diff --git a/WordPressLoginFlow/src/main/java/org/wordpress/android/login/ConnectSiteInfoResult.kt b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/ConnectSiteInfoResult.kt new file mode 100644 index 0000000000..a0ab4a7c0e --- /dev/null +++ b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/ConnectSiteInfoResult.kt @@ -0,0 +1,11 @@ +package org.wordpress.android.login + +data class ConnectSiteInfoResult @JvmOverloads constructor( + val url: String, + val urlAfterRedirects: String?, + val hasJetpack: Boolean, + /** + * Whether the site is suspended on WordPress.com and can't be connected using Jetpack + */ + val isWPComSuspended: Boolean = false, +) diff --git a/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java index 25e85e121e..9964353730 100644 --- a/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java +++ b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java @@ -61,7 +61,11 @@ void needs2faSocial(String email, String userId, String nonceAuthenticator, Stri // Login Site Address input callbacks void alreadyLoggedInWpcom(ArrayList oldSitesIds); void gotWpcomSiteInfo(String siteAddress); - void gotConnectedSiteInfo(@NonNull String siteAddress, @Nullable String redirectUrl, boolean hasJetpack); + default void gotConnectSiteInfo(@NonNull ConnectSiteInfoResult result) { + gotConnectedSiteInfo(result.getUrl(), result.getUrlAfterRedirects(), result.getHasJetpack()); + } + + default void gotConnectedSiteInfo(@NonNull String siteAddress, @Nullable String redirectUrl, boolean hasJetpack) { } void gotXmlRpcEndpoint(String inputSiteAddress, String endpointAddress); void handleSslCertificateError(MemorizingTrustManager memorizingTrustManager, SelfSignedSSLCallback callback); void helpSiteAddress(String url); diff --git a/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java index 8d99ea6b83..764c5e4159 100644 --- a/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java +++ b/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java @@ -32,6 +32,7 @@ import org.wordpress.android.fluxc.store.AccountStore; import org.wordpress.android.fluxc.store.SiteStore.ConnectSiteInfoPayload; import org.wordpress.android.fluxc.store.SiteStore.OnConnectSiteInfoChecked; +import org.wordpress.android.fluxc.store.SiteStore.SiteErrorType; import org.wordpress.android.login.util.SiteUtils; import org.wordpress.android.login.widgets.WPLoginInputRow; import org.wordpress.android.login.widgets.WPLoginInputRow.OnEditorCommitListener; @@ -339,15 +340,7 @@ public void handleDiscoverySuccess(@NonNull String endpointAddress) { // hold the URL in a variable to use below otherwise it gets cleared up by endProgress String inputSiteAddress = mRequestedSiteAddress; endProgress(); - if (mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) { - mLoginListener.gotConnectedSiteInfo( - mConnectSiteInfoUrl, - mConnectSiteInfoUrlRedirect, - mConnectSiteInfoCalculatedHasJetpack - ); - } else { - mLoginListener.gotXmlRpcEndpoint(inputSiteAddress, endpointAddress); - } + mLoginListener.gotXmlRpcEndpoint(inputSiteAddress, endpointAddress); } private void askForHttpAuthCredentials(@NonNull final String url, int messageId) { @@ -397,13 +390,26 @@ public void onFetchedConnectSiteInfo(OnConnectSiteInfoChecked event) { event.error.type.name(), event.error.message); - AppLog.e(T.API, "onFetchedConnectSiteInfo has error: " + event.error.message); - if (NetworkUtils.isNetworkAvailable(requireContext())) { - showError(R.string.invalid_site_url_message); + if (event.error.type == SiteErrorType.WPCOM_SITE_SUSPENDED + && mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) { + // the site is WPCom suspended, we should treat it as non-Jetpack site + mConnectSiteInfoCalculatedHasJetpack = false; + mLoginListener.gotConnectSiteInfo( + new ConnectSiteInfoResult( + mRequestedSiteAddress, + null, + mConnectSiteInfoCalculatedHasJetpack, + true + ) + ); } else { - showError(R.string.error_generic_network); + AppLog.e(T.API, "onFetchedConnectSiteInfo has error: " + event.error.message); + if (NetworkUtils.isNetworkAvailable(requireContext())) { + showError(R.string.invalid_site_url_message); + } else { + showError(R.string.error_generic_network); + } } - endProgressIfNeeded(); } else { boolean hasJetpack = calculateHasJetpack(event.info); @@ -433,10 +439,12 @@ private void handleConnectSiteInfoForWoo(ConnectSiteInfoPayload siteInfo) { mLoginListener.handleSiteAddressError(siteInfo); } else { endProgressIfNeeded(); - mLoginListener.gotConnectedSiteInfo( - mConnectSiteInfoUrl, - mConnectSiteInfoUrlRedirect, - mConnectSiteInfoCalculatedHasJetpack + mLoginListener.gotConnectSiteInfo( + new ConnectSiteInfoResult( + mConnectSiteInfoUrl, + mConnectSiteInfoUrlRedirect, + mConnectSiteInfoCalculatedHasJetpack + ) ); } } diff --git a/build.gradle b/build.gradle index 70cbad2ee1..e6ca23f30a 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ ext { // libs wordpressLintVersion = '2.1.0' wordpressUtilsVersion = '3.5.0' - wordpressFluxCVersion = 'trunk-863f213e0e3a7a4322032e8e8c57a99f77bb48ec' + wordpressFluxCVersion = 'trunk-5dfbbc993d2472f6aad2b9f357021506ecfe7152' gravatarSdkVersion = '0.2.0' // main