Skip to content

Commit 3db9a5d

Browse files
authored
Merge pull request #10150 from wordpress-mobile/amanda/woo-login-test-wp-2
Merge login lib changes and implement new interface methods
2 parents badea06 + e2d43a3 commit 3db9a5d

File tree

14 files changed

+169
-13
lines changed

14 files changed

+169
-13
lines changed

WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,4 +826,12 @@ private void dismissSignupSheet() {
826826
public AndroidInjector<Fragment> supportFragmentInjector() {
827827
return mFragmentInjector;
828828
}
829+
830+
@Override public void showHelpFindingConnectedEmail() {
831+
// Not used in WordPress app
832+
}
833+
834+
@Override public void gotConnectedSiteInfo(String siteAddress, boolean hasJetpack) {
835+
// Not used in WordPress app
836+
}
829837
}

WordPress/src/main/java/org/wordpress/android/ui/accounts/login/LoginAnalyticsTracker.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,18 @@ public void trackUsernamePasswordFormViewed() {
236236
public void trackWpComBackgroundServiceUpdate(Map<String, ?> properties) {
237237
AnalyticsTracker.track(AnalyticsTracker.Stat.LOGIN_WPCOM_BACKGROUND_SERVICE_UPDATE, properties);
238238
}
239+
240+
@Override public void trackConnectedSiteInfoRequested(String url) {
241+
// Not used in WordPress app
242+
}
243+
244+
@Override
245+
public void trackConnectedSiteInfoFailed(String url, String errorContext, String errorType,
246+
String errorDescription) {
247+
// Not used in WordPress app
248+
}
249+
250+
@Override public void trackConnectedSiteInfoSucceeded(Map<String, ?> properties) {
251+
// Not used in WordPress app
252+
}
239253
}

WordPress/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2274,6 +2274,7 @@
22742274
<string name="enter_your_password_instead">Enter your password instead</string>
22752275
<string name="alternatively">Alternatively:</string>
22762276
<string name="enter_email_wordpress_com">Log in to WordPress.com using an email address to manage all your WordPress sites.</string>
2277+
<string name="enter_email_for_site">Log in with WordPress.com to connect to %1$s</string>
22772278
<string name="next">Next</string>
22782279
<string name="open_mail">Open mail</string>
22792280
<string name="enter_site_address_instead">Log in by entering your site address.</string>
@@ -2324,6 +2325,8 @@
23242325
<string name="login_error_generic_start">Google login could not be started.</string>
23252326
<string name="login_error_suffix">\nMaybe try a different account?</string>
23262327
<string name="enter_wpcom_or_jetpack_site">Please enter a WordPress.com or Jetpack-connected self-hosted WordPress site</string>
2328+
<string name="enter_wordpress_site">The website at this address is not a WordPress site. For us to connect to it, the site must have WordPress installed.</string>
2329+
<string name="login_need_help_finding_connected_email">Need help finding the email you connected with?</string>
23272330
<!-- Screen titles -->
23282331
<string name="email_address_login_title">Email address login</string>
23292332
<string name="site_address_login_title">Site address login</string>

libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginAnalyticsListener.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ public interface LoginAnalyticsListener {
5151
void trackUrlHelpScreenViewed();
5252
void trackUsernamePasswordFormViewed();
5353
void trackWpComBackgroundServiceUpdate(Map<String, ?> properties);
54+
void trackConnectedSiteInfoRequested(String url);
55+
void trackConnectedSiteInfoFailed(String url, String errorContext, String errorType, String errorDescription);
56+
void trackConnectedSiteInfoSucceeded(Map<String, ?> properties);
5457
}

libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailFragment.java

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.wordpress.android.login;
22

33
import android.app.PendingIntent;
4+
import android.content.ActivityNotFoundException;
45
import android.content.Context;
56
import android.content.Intent;
67
import android.content.IntentSender;
@@ -67,6 +68,9 @@ public class LoginEmailFragment extends LoginBaseFormFragment<LoginListener> imp
6768
private static final int GOOGLE_API_CLIENT_ID = 1002;
6869
private static final int EMAIL_CREDENTIALS_REQUEST_CODE = 25100;
6970

71+
private static final String ARG_HIDE_LOGIN_BY_SITE_OPTION = "ARG_HIDE_LOGIN_BY_SITE_OPTION";
72+
private static final String ARG_LOGIN_SITE_URL = "ARG_LOGIN_SITE_URL";
73+
7074
public static final String TAG = "login_email_fragment_tag";
7175
public static final int MAX_EMAIL_LENGTH = 100;
7276

@@ -79,6 +83,17 @@ public class LoginEmailFragment extends LoginBaseFormFragment<LoginListener> imp
7983
protected WPLoginInputRow mEmailInput;
8084
protected boolean mHasDismissedEmailHints;
8185
protected boolean mIsDisplayingEmailHints;
86+
protected boolean mHideLoginWithSiteOption;
87+
protected String mLoginSiteUrl;
88+
89+
public static LoginEmailFragment newInstance(Boolean hideLoginWithSiteOption, String url) {
90+
LoginEmailFragment fragment = new LoginEmailFragment();
91+
Bundle args = new Bundle();
92+
args.putBoolean(ARG_HIDE_LOGIN_BY_SITE_OPTION, hideLoginWithSiteOption);
93+
args.putString(ARG_LOGIN_SITE_URL, url);
94+
fragment.setArguments(args);
95+
return fragment;
96+
}
8297

8398
@Override
8499
protected @LayoutRes int getContentLayout() {
@@ -103,6 +118,9 @@ protected void setupLabel(@NonNull TextView label) {
103118
case WPCOM_LOGIN_ONLY:
104119
label.setText(R.string.enter_email_wordpress_com);
105120
break;
121+
case WOO_LOGIN_MODE:
122+
label.setText(getString(R.string.enter_email_for_site, mLoginSiteUrl));
123+
break;
106124
case JETPACK_STATS:
107125
label.setText(R.string.login_to_to_connect_jetpack);
108126
break;
@@ -162,25 +180,30 @@ public void onClick(View view) {
162180
});
163181

164182
LinearLayout siteLoginButton = rootView.findViewById(R.id.login_site_button);
165-
siteLoginButton.setOnClickListener(new OnClickListener() {
166-
@Override
167-
public void onClick(View view) {
168-
if (mLoginListener != null) {
169-
if (mLoginListener.getLoginMode() == LoginMode.JETPACK_STATS) {
170-
mLoginListener.loginViaWpcomUsernameInstead();
171-
} else {
172-
mLoginListener.loginViaSiteAddress();
183+
if (mHideLoginWithSiteOption) {
184+
siteLoginButton.setVisibility(View.GONE);
185+
} else {
186+
siteLoginButton.setOnClickListener(new OnClickListener() {
187+
@Override
188+
public void onClick(View view) {
189+
if (mLoginListener != null) {
190+
if (mLoginListener.getLoginMode() == LoginMode.JETPACK_STATS) {
191+
mLoginListener.loginViaWpcomUsernameInstead();
192+
} else {
193+
mLoginListener.loginViaSiteAddress();
194+
}
173195
}
174196
}
175-
}
176-
});
197+
});
198+
}
177199

178200
ImageView siteLoginButtonIcon = rootView.findViewById(R.id.login_site_button_icon);
179201
TextView siteLoginButtonText = rootView.findViewById(R.id.login_site_button_text);
180202

181203
switch (mLoginListener.getLoginMode()) {
182204
case FULL:
183205
case WPCOM_LOGIN_ONLY:
206+
case WOO_LOGIN_MODE:
184207
case SHARE_INTENT:
185208
siteLoginButtonIcon.setImageResource(R.drawable.ic_domains_grey_24dp);
186209
siteLoginButtonText.setText(R.string.enter_site_address_instead);
@@ -211,6 +234,13 @@ public void onClick(View view) {
211234
}
212235
}
213236
});
237+
} else if (mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) {
238+
secondaryButton.setText(getResources().getString(R.string.login_need_help_finding_connected_email));
239+
secondaryButton.setOnClickListener(new OnClickListener() {
240+
public void onClick(View view) {
241+
mLoginListener.showHelpFindingConnectedEmail();
242+
}
243+
});
214244
} else {
215245
secondaryButton.setVisibility(View.GONE);
216246
}
@@ -244,6 +274,13 @@ public void onAttach(Context context) {
244274
@Override
245275
public void onCreate(Bundle savedInstanceState) {
246276
super.onCreate(savedInstanceState);
277+
278+
Bundle args = getArguments();
279+
if (args != null) {
280+
mHideLoginWithSiteOption = args.getBoolean(ARG_HIDE_LOGIN_BY_SITE_OPTION, false);
281+
mLoginSiteUrl = args.getString(ARG_LOGIN_SITE_URL, "");
282+
}
283+
247284
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
248285
.addConnectionCallbacks(LoginEmailFragment.this)
249286
.enableAutoManage(getActivity(), GOOGLE_API_CLIENT_ID, LoginEmailFragment.this)
@@ -445,6 +482,8 @@ public void getEmailHints() {
445482
startIntentSenderForResult(intent.getIntentSender(), EMAIL_CREDENTIALS_REQUEST_CODE, null, 0, 0, 0, null);
446483
} catch (IntentSender.SendIntentException exception) {
447484
AppLog.d(T.NUX, LOG_TAG + "Could not start email hint picker" + exception);
485+
} catch (ActivityNotFoundException exception) {
486+
AppLog.d(T.NUX, LOG_TAG + "Could not find any activity to handle email hint picker" + exception);
448487
}
449488
}
450489

libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ interface SelfSignedSSLCallback {
2626
void helpEmailScreen(String email);
2727
void helpSocialEmailScreen(String email);
2828
void addGoogleLoginFragment();
29+
void showHelpFindingConnectedEmail();
2930

3031
// Login Request Magic Link callbacks
3132
void showMagicLinkSentScreen(String email);
@@ -47,6 +48,7 @@ interface SelfSignedSSLCallback {
4748
// Login Site Address input callbacks
4849
void alreadyLoggedInWpcom(ArrayList<Integer> oldSitesIds);
4950
void gotWpcomSiteInfo(String siteAddress, String siteName, String siteIconUrl);
51+
void gotConnectedSiteInfo(String siteAddress, boolean hasJetpack);
5052
void gotXmlRpcEndpoint(String inputSiteAddress, String endpointAddress);
5153
void handleSslCertificateError(MemorizingTrustManager memorizingTrustManager, SelfSignedSSLCallback callback);
5254
void helpSiteAddress(String url);

libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ public enum LoginMode {
99
JETPACK_STATS,
1010
WPCOM_LOGIN_DEEPLINK,
1111
WPCOM_REAUTHENTICATE,
12-
SHARE_INTENT;
12+
SHARE_INTENT,
13+
WOO_LOGIN_MODE;
1314

1415
private static final String ARG_LOGIN_MODE = "ARG_LOGIN_MODE";
1516

libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.wordpress.android.fluxc.network.discovery.SelfHostedEndpointFinder.DiscoveryError;
3030
import org.wordpress.android.fluxc.store.AccountStore;
3131
import org.wordpress.android.fluxc.store.AccountStore.OnDiscoveryResponse;
32+
import org.wordpress.android.fluxc.store.SiteStore.OnConnectSiteInfoChecked;
3233
import org.wordpress.android.fluxc.store.SiteStore.OnWPComSiteFetched;
3334
import org.wordpress.android.login.util.SiteUtils;
3435
import org.wordpress.android.login.widgets.WPLoginInputRow;
@@ -40,6 +41,7 @@
4041
import org.wordpress.android.util.UrlUtils;
4142

4243
import java.util.ArrayList;
44+
import java.util.HashMap;
4345

4446
import javax.inject.Inject;
4547

@@ -87,6 +89,9 @@ protected void setupContent(ViewGroup rootView) {
8789
// important for accessibility - talkback
8890
getActivity().setTitle(R.string.site_address_login_title);
8991
mSiteAddressInput = rootView.findViewById(R.id.login_site_address_row);
92+
if (BuildConfig.DEBUG) {
93+
mSiteAddressInput.getEditText().setText(BuildConfig.DEBUG_WPCOM_WEBSITE_URL);
94+
}
9095
mSiteAddressInput.addTextChangedListener(this);
9196
mSiteAddressInput.setOnEditorCommitListener(this);
9297
}
@@ -163,7 +168,16 @@ protected void discover() {
163168
mRequestedSiteAddress = cleanedSiteAddress;
164169

165170
String cleanedXmlrpcSuffix = UrlUtils.removeXmlrpcSuffix(mRequestedSiteAddress);
166-
mDispatcher.dispatch(SiteActionBuilder.newFetchWpcomSiteByUrlAction(cleanedXmlrpcSuffix));
171+
172+
if (mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) {
173+
// TODO: This is temporary code to test out sign in flow milestone 1 effectiveness. If we move
174+
// forward with this flow, we will need to just call the XMLRPC discovery code and handle all the
175+
// edge cases such as HTTP auth and self-signed SSL.
176+
mAnalyticsListener.trackConnectedSiteInfoRequested(cleanedXmlrpcSuffix);
177+
mDispatcher.dispatch(SiteActionBuilder.newFetchConnectSiteInfoAction(cleanedXmlrpcSuffix));
178+
} else {
179+
mDispatcher.dispatch(SiteActionBuilder.newFetchWpcomSiteByUrlAction(cleanedXmlrpcSuffix));
180+
}
167181

168182
startProgress();
169183
}
@@ -354,4 +368,65 @@ public void onDiscoverySucceeded(OnDiscoveryResponse event) {
354368
AppLog.i(T.NUX, "Discovery succeeded, endpoint: " + event.xmlRpcEndpoint);
355369
mLoginListener.gotXmlRpcEndpoint(requestedSiteAddress, event.xmlRpcEndpoint);
356370
}
371+
372+
@SuppressWarnings("unused")
373+
@Subscribe(threadMode = ThreadMode.MAIN)
374+
public void onFetchedConnectSiteInfo(OnConnectSiteInfoChecked event) {
375+
if (mRequestedSiteAddress == null) {
376+
// bail if user canceled
377+
return;
378+
}
379+
380+
if (!isAdded()) {
381+
return;
382+
}
383+
384+
// hold the URL in a variable to use below otherwise it gets cleared up by endProgress
385+
final String requestedSiteAddress = mRequestedSiteAddress;
386+
387+
if (isInProgress()) {
388+
endProgress();
389+
}
390+
391+
if (event.isError()) {
392+
mAnalyticsListener.trackConnectedSiteInfoFailed(
393+
requestedSiteAddress,
394+
event.getClass().getSimpleName(),
395+
event.error.type.name(),
396+
event.error.message);
397+
398+
AppLog.e(T.API, "onFetchedConnectSiteInfo has error: " + event.error.message);
399+
400+
showError(R.string.invalid_site_url_message);
401+
} else {
402+
// TODO: If we plan to keep this logic we should convert these labels to constants
403+
HashMap<String, String> properties = new HashMap<>();
404+
properties.put("url", event.info.url);
405+
properties.put("urlAfterRedirects", event.info.urlAfterRedirects);
406+
properties.put("exists", Boolean.toString(event.info.exists));
407+
properties.put("hasJetpack", Boolean.toString(event.info.hasJetpack));
408+
properties.put("isJetpackActive", Boolean.toString(event.info.isJetpackActive));
409+
properties.put("isJetpackConnected", Boolean.toString(event.info.isJetpackConnected));
410+
properties.put("isWordPress", Boolean.toString(event.info.isWordPress));
411+
properties.put("isWPCom", Boolean.toString(event.info.isWPCom));
412+
mAnalyticsListener.trackConnectedSiteInfoSucceeded(properties);
413+
414+
if (!event.info.exists) {
415+
// Site does not exist
416+
showError(R.string.invalid_site_url_message);
417+
} else if (!event.info.isWordPress) {
418+
// Not a WordPress site
419+
showError(R.string.enter_wordpress_site);
420+
} else {
421+
boolean hasJetpack = false;
422+
if (event.info.isWPCom && event.info.hasJetpack) {
423+
// This is likely an atomic site.
424+
hasJetpack = true;
425+
} else if (event.info.hasJetpack && event.info.isJetpackActive && event.info.isJetpackConnected) {
426+
hasJetpack = true;
427+
}
428+
mLoginListener.gotConnectedSiteInfo(event.info.url, hasJetpack);
429+
}
430+
}
431+
}
357432
}

libs/login/WordPressLoginFlow/src/main/res/layout/login_email_password_screen.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
android:layout_height="wrap_content"
1919
android:layout_marginTop="@dimen/margin_extra_large"
2020
android:layout_marginBottom="@dimen/margin_extra_large"
21+
android:textAlignment="viewStart"
22+
android:gravity="start"
2123
tools:text="@string/enter_site_address" />
2224

2325
<LinearLayout

libs/login/WordPressLoginFlow/src/main/res/layout/login_email_screen.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
android:layout_marginBottom="@dimen/margin_extra_large"
1818
android:layout_marginTop="@dimen/margin_extra_large"
1919
android:layout_width="match_parent"
20+
android:textAlignment="viewStart"
21+
android:gravity="start"
2022
tools:text="@string/enter_email_wordpress_com"
2123
style="@style/LoginTheme.TextLabel" >
2224
</TextView>

0 commit comments

Comments
 (0)