Skip to content

Commit db8d333

Browse files
author
AmandaRiu
committed
Squashed 'libs/login/' changes from 69e488759c..fc60b518d7
fc60b518d7 Merge branch 'develop' into merge/woocommerce-android/1287 38737cef3b Merge pull request #25 from wordpress-mobile/merge-wpa d035db2384 Merge commit 'eb8270b278800a6804a2fce6bb63111c0dfa789a' into update-login-lib 4e66d2a380 Move signedin tracking to the google fragment a1e403a879 Track signed in event on sign up d983da8c98 Merge pull request #10232 from wordpress-mobile/amanda/login-lib-redirect-support 3bf6e99f15 Merge pull request #24 from wordpress-mobile/merge/WordPress-Android/10255 895ece8fc4 Merge commit '3a2393c33fe8f1f1448591580fc0054a732fac9b' into amanda/login-lib-redirect-support 5a21797a03 Merge pull request #23 from wordpress-mobile/merge/woocommerce-android/1224-amanda-new 8fee8b3660 Updated login and editor libraries to remove right/left attributes when a start/end attribute already exists 2289f9707b Merge commit '43ac7e9468ada491ccd1fcd63cfa1ef0616bd791' into issue/9720-login-subtree-update b5ac63f082 Fix redundancy in R.string.enter_site_address bc3903bd29 Update login_invalid_site_url 5d1b930343 Add tests for LoginSiteAddressValidator ae203df2ec Delete unused R.string.login_empty_site_url 763eeb9490 Replace login_invalid_site_url 1032574f3f Do not report an error if the text is empty 1fa189853a Site Address: Show an error message after 2 sec e869735555 Do not react to keyboard enter if site is invalid 8d50ab92c6 Move LoginSiteAddress validation to a class 3a9a5c8566 Merge commit 'e3144c2c11b0c982eadb2478cf6926aa40c127e6' into amanda/login-lib-redirect-support 3b1db07c38 Merge commit '615ebab45e1bc3d0cdd3a9da060026fef704d3a8' into amanda/test_git_subtree a8f234de25 Merge pull request #10150 from wordpress-mobile/amanda/woo-login-test-wp-2 43ac7e9468 Merge pull request #22 from wordpress-mobile/merge-wca d4d717cf16 Send redirectUrl to listener and strip protocol before saving 6dbf72672a Updated login and editor libraries to remove right/left attributes when a start/end attribute already exists 979ddf4aec Merge commit '827a47189094a6bc7800eaccc3ed069841251373' into sync-login-lib df3c11ed09 added textAlignment property to secondary button in login da783ea3c7 Login screens: added textAlignment property to labels 6d486bbf6b Merge pull request #21 from wordpress-mobile/merge-wpa-develop 57a2d00b14 Update login lib standalone FluxC hash 0ea2405def Merge commit 'ad485b27b26ffb38b8718940b0b7556b902dc28c' into sync-login-lib 6df15ab86b Update 2FA unavailable API error message eefd72f317 Show error and continue login on OAuth client 2FA error 578dca7f29 Update androidx dependencies 1d09d1536d Fix AndroidX import order 48df84638f Fix import ordering for androidx d3dc35035a Migrate to AndroidX 78c5307f7a Merge pull request #16 from wordpress-mobile/fix_crash_in_login_email_fragment 4d6c83f111 Merge pull request #9890 from wordpress-mobile/update-dagger-version-to-v2.22.1 edd8684ec4 Merge pull request #18 from wordpress-mobile/new-wpandroid-changes 9cbf3f17ff Merge pull request #9885 from wordpress-mobile/update-login-library 71729e5e76 Merge pull request #17 from wordpress-mobile/issue/glide-4.9 0ddf4dcdbd Update Glide version to 4.9.0 f7860b9861 Updated Dagger in the login library aabdedf672 Merge commit '099b5a011d32283eb6c79b0e599b5272a597e849' into update-login-library 1eb7f4f156 Updated Glide to 4.9.0 a32cc8c09d Add crash fix to SignupEmailFragment 08109fa90f Adds non-null check to onActivityResult 664b67f62d Fix #9826: make sure we Play Services are available before running the email hint picker 94a0ae2a39 Merge pull request #9743 from wordpress-mobile/feature/manage_insights_readonly 7cad17e264 Fix a few ContentDescription lint errors 9f171b55d0 Merge branch 'feature/manage_insights_readonly' into issue/9464-manage-insights 663a168903 Add the missing drawable resources git-subtree-dir: libs/login git-subtree-split: fc60b518d7c72864f6df54546d640d0e2fbb8673
1 parent 2338a63 commit db8d333

29 files changed

+315
-116
lines changed

.idea/codeStyles/Project.xml

Lines changed: 3 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

WordPressLoginFlow/build.gradle

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ buildscript {
44
jcenter()
55
}
66
dependencies {
7-
classpath 'com.android.tools.build:gradle:3.3.1'
7+
classpath 'com.android.tools.build:gradle:3.3.2'
88
}
99
}
1010

@@ -21,8 +21,8 @@ android {
2121
buildToolsVersion "28.0.3"
2222

2323
defaultConfig {
24-
minSdkVersion 16
25-
targetSdkVersion 26
24+
minSdkVersion 17
25+
targetSdkVersion 28
2626
versionCode 2
2727
versionName "1.1"
2828

@@ -35,9 +35,9 @@ dependencies {
3535
exclude group: "com.mcxiaoke.volley"
3636
}
3737

38-
implementation 'androidx.appcompat:appcompat:1.0.0'
38+
implementation 'androidx.appcompat:appcompat:1.0.2'
3939
implementation 'androidx.vectordrawable:vectordrawable-animated:1.0.0'
40-
implementation 'androidx.media:media:1.0.0'
40+
implementation 'androidx.media:media:1.0.1'
4141
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
4242
implementation 'androidx.gridlayout:gridlayout:1.0.0'
4343
implementation 'com.google.android.material:material:1.0.0'
@@ -51,7 +51,7 @@ dependencies {
5151
exclude group: "org.wordpress", module: "utils"
5252
}
5353
} else {
54-
implementation("com.github.wordpress-mobile.WordPress-FluxC-Android:fluxc:8cdbf03cf3d595ef904bab3c1dc207e39242c882") {
54+
implementation("com.github.wordpress-mobile.WordPress-FluxC-Android:fluxc:9f07b031646dd3e6021d4b8e0a35647c9109ff27") {
5555
exclude group: "com.android.support"
5656
exclude group: "org.wordpress", module: "utils"
5757
}
@@ -68,6 +68,12 @@ dependencies {
6868
annotationProcessor 'com.google.dagger:dagger-android-processor:2.22.1'
6969

7070
lintChecks 'org.wordpress:lint:1.0.1'
71+
72+
testImplementation 'junit:junit:4.12'
73+
testImplementation 'org.mockito:mockito-core:2.27.0'
74+
testImplementation 'androidx.arch.core:core-testing:2.0.1'
75+
testImplementation 'org.robolectric:robolectric:3.6.1'
76+
testImplementation 'org.assertj:assertj-core:3.11.1'
7177
}
7278

7379
// Add properties named "wp.xxx" to our BuildConfig

WordPressLoginFlow/src/main/java/org/wordpress/android/login/Login2FaFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ public void onSocialChanged(OnSocialChanged event) {
500500

501501
@Override
502502
protected void onLoginFinished() {
503-
mAnalyticsListener.trackAnalyticsSignIn(mAccountStore, mSiteStore, true);
503+
mAnalyticsListener.trackAnalyticsSignIn(true);
504504

505505
mLoginListener.startPostLoginServices();
506506

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package org.wordpress.android.login;
22

3-
import org.wordpress.android.fluxc.store.AccountStore;
4-
import org.wordpress.android.fluxc.store.SiteStore;
5-
63
import java.util.Map;
74

85
public interface LoginAnalyticsListener {
9-
void trackAnalyticsSignIn(AccountStore accountStore, SiteStore siteStore, boolean isWpcomLogin);
6+
void trackAnalyticsSignIn(boolean isWpcomLogin);
107
void trackCreatedAccount(String username, String email);
118
void trackEmailFormViewed();
129
void trackInsertedInvalidUrl();

WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginBaseFormFragment.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@
3434
import org.wordpress.android.fluxc.generated.AccountActionBuilder;
3535
import org.wordpress.android.fluxc.generated.SiteActionBuilder;
3636
import org.wordpress.android.fluxc.store.AccountStore;
37+
import org.wordpress.android.fluxc.store.AccountStore.AccountErrorType;
3738
import org.wordpress.android.fluxc.store.AccountStore.OnAccountChanged;
3839
import org.wordpress.android.fluxc.store.SiteStore;
3940
import org.wordpress.android.fluxc.store.SiteStore.OnSiteChanged;
4041
import org.wordpress.android.fluxc.store.SiteStore.SiteErrorType;
4142
import org.wordpress.android.util.AppLog;
4243
import org.wordpress.android.util.EditTextUtils;
4344
import org.wordpress.android.util.ToastUtils;
45+
import org.wordpress.android.util.ToastUtils.Duration;
4446

4547
import javax.inject.Inject;
4648

@@ -291,9 +293,15 @@ public void onAccountChanged(OnAccountChanged event) {
291293

292294
if (event.isError()) {
293295
AppLog.e(AppLog.T.API, "onAccountChanged has error: " + event.error.type + " - " + event.error.message);
294-
ToastUtils.showToast(getContext(), R.string.error_fetch_my_profile);
295-
onLoginFinished(false);
296-
return;
296+
if (event.error.type == AccountErrorType.SETTINGS_FETCH_REAUTHORIZATION_REQUIRED_ERROR) {
297+
// This probably means we're logging in to 2FA-enabled account with a non-production WP.com client id.
298+
// A few WordPress.com APIs like /me/settings/ won't work for this account.
299+
ToastUtils.showToast(getContext(), R.string.error_disabled_apis, Duration.LONG);
300+
} else {
301+
ToastUtils.showToast(getContext(), R.string.error_fetch_my_profile, Duration.LONG);
302+
onLoginFinished(false);
303+
return;
304+
}
297305
}
298306

299307
if (event.causeOfChange == AccountAction.FETCH_ACCOUNT) {

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.google.android.gms.auth.api.credentials.CredentialPickerConfig;
3030
import com.google.android.gms.auth.api.credentials.HintRequest;
3131
import com.google.android.gms.common.ConnectionResult;
32+
import com.google.android.gms.common.GoogleApiAvailability;
3233
import com.google.android.gms.common.api.GoogleApiClient;
3334
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
3435
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
@@ -442,7 +443,7 @@ public void finishLogin() {
442443

443444
@Override
444445
protected void onLoginFinished() {
445-
mAnalyticsListener.trackAnalyticsSignIn(mAccountStore, mSiteStore, true);
446+
mAnalyticsListener.trackAnalyticsSignIn(true);
446447
mLoginListener.loggedInViaSocialAccount(mOldSitesIDs, false);
447448
}
448449

@@ -462,6 +463,12 @@ public void onConnectionSuspended(int i) {
462463
}
463464

464465
public void getEmailHints() {
466+
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
467+
if (getContext() == null
468+
|| googleApiAvailability.isGooglePlayServicesAvailable(getContext()) != ConnectionResult.SUCCESS) {
469+
AppLog.w(T.NUX, LOG_TAG + ": Couldn't start hint picker - Play Services unavailable");
470+
return;
471+
}
465472
HintRequest hintRequest = new HintRequest.Builder()
466473
.setHintPickerConfig(new CredentialPickerConfig.Builder()
467474
.setShowCancelButton(true)

WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailPasswordFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ private void showError(String error) {
253253

254254
@Override
255255
protected void onLoginFinished() {
256-
mAnalyticsListener.trackAnalyticsSignIn(mAccountStore, mSiteStore, true);
256+
mAnalyticsListener.trackAnalyticsSignIn(true);
257257
mLoginListener.startPostLoginServices();
258258

259259
if (mIsSocialLogin) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ interface SelfSignedSSLCallback {
4848
// Login Site Address input callbacks
4949
void alreadyLoggedInWpcom(ArrayList<Integer> oldSitesIds);
5050
void gotWpcomSiteInfo(String siteAddress, String siteName, String siteIconUrl);
51-
void gotConnectedSiteInfo(String siteAddress, boolean hasJetpack);
51+
void gotConnectedSiteInfo(@NonNull String siteAddress, @Nullable String redirectUrl, boolean hasJetpack);
5252
void gotXmlRpcEndpoint(String inputSiteAddress, String endpointAddress);
5353
void handleSslCertificateError(MemorizingTrustManager memorizingTrustManager, SelfSignedSSLCallback callback);
5454
void helpSiteAddress(String url);

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

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
import android.content.Intent;
66
import android.os.Bundle;
77
import android.text.Editable;
8-
import android.text.TextUtils;
98
import android.text.TextWatcher;
10-
import android.util.Patterns;
119
import android.view.View;
1210
import android.view.View.OnClickListener;
1311
import android.view.ViewGroup;
@@ -18,6 +16,7 @@
1816
import androidx.annotation.LayoutRes;
1917
import androidx.annotation.NonNull;
2018
import androidx.annotation.Nullable;
19+
import androidx.lifecycle.Observer;
2120

2221
import org.greenrobot.eventbus.Subscribe;
2322
import org.greenrobot.eventbus.ThreadMode;
@@ -57,6 +56,8 @@ public class LoginSiteAddressFragment extends LoginBaseFormFragment<LoginListene
5756

5857
private String mRequestedSiteAddress;
5958

59+
private LoginSiteAddressValidator mLoginSiteAddressValidator;
60+
6061
@Inject AccountStore mAccountStore;
6162
@Inject Dispatcher mDispatcher;
6263
@Inject HTTPAuthManager mHTTPAuthManager;
@@ -139,6 +140,23 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
139140
} else {
140141
mAnalyticsListener.trackUrlFormViewed();
141142
}
143+
144+
mLoginSiteAddressValidator = new LoginSiteAddressValidator();
145+
146+
mLoginSiteAddressValidator.getIsValid().observe(this, new Observer<Boolean>() {
147+
@Override public void onChanged(Boolean enabled) {
148+
getPrimaryButton().setEnabled(enabled);
149+
}
150+
});
151+
mLoginSiteAddressValidator.getErrorMessageResId().observe(this, new Observer<Integer>() {
152+
@Override public void onChanged(Integer resId) {
153+
if (resId != null) {
154+
showError(resId);
155+
} else {
156+
mSiteAddressInput.setError(null);
157+
}
158+
}
159+
});
142160
}
143161

144162
@Override
@@ -148,24 +166,17 @@ public void onSaveInstanceState(Bundle outState) {
148166
outState.putString(KEY_REQUESTED_SITE_ADDRESS, mRequestedSiteAddress);
149167
}
150168

169+
@Override public void onDestroyView() {
170+
super.onDestroyView();
171+
mLoginSiteAddressValidator.dispose();
172+
}
173+
151174
protected void discover() {
152175
if (!NetworkUtils.checkConnection(getActivity())) {
153176
return;
154177
}
155178

156-
String cleanedSiteAddress = getCleanedSiteAddress();
157-
158-
if (TextUtils.isEmpty(cleanedSiteAddress)) {
159-
showError(R.string.login_empty_site_url);
160-
return;
161-
}
162-
163-
if (!Patterns.WEB_URL.matcher(cleanedSiteAddress).matches()) {
164-
showError(R.string.login_invalid_site_url);
165-
return;
166-
}
167-
168-
mRequestedSiteAddress = cleanedSiteAddress;
179+
mRequestedSiteAddress = mLoginSiteAddressValidator.getCleanedSiteAddress();
169180

170181
String cleanedXmlrpcSuffix = UrlUtils.removeXmlrpcSuffix(mRequestedSiteAddress);
171182

@@ -182,17 +193,16 @@ protected void discover() {
182193
startProgress();
183194
}
184195

185-
private String getCleanedSiteAddress() {
186-
return EditTextUtils.getText(mSiteAddressInput.getEditText()).trim().replaceAll("[\r\n]", "");
187-
}
188-
189196
@Override
190197
public void onEditorCommit() {
191-
discover();
198+
if (getPrimaryButton().isEnabled()) {
199+
discover();
200+
}
192201
}
193202

194203
@Override
195204
public void afterTextChanged(Editable s) {
205+
mLoginSiteAddressValidator.setAddress(EditTextUtils.getText(mSiteAddressInput.getEditText()));
196206
}
197207

198208
@Override
@@ -359,7 +369,7 @@ public void onDiscoverySucceeded(OnDiscoveryResponse event) {
359369
return;
360370
} else {
361371
AppLog.e(T.API, "onDiscoveryResponse has error: " + event.error.name()
362-
+ " - " + event.error.toString());
372+
+ " - " + event.error.toString());
363373
handleDiscoveryError(event.error, event.failedEndpoint);
364374
return;
365375
}
@@ -429,7 +439,10 @@ public void onFetchedConnectSiteInfo(OnConnectSiteInfoChecked event) {
429439
// Not a WordPress site
430440
showError(R.string.enter_wordpress_site);
431441
} else {
432-
mLoginListener.gotConnectedSiteInfo(event.info.url, hasJetpack);
442+
mLoginListener.gotConnectedSiteInfo(
443+
event.info.url,
444+
event.info.urlAfterRedirects,
445+
hasJetpack);
433446
}
434447
}
435448
}

0 commit comments

Comments
 (0)