From b50b6daca19a72ce27791df5a53caeea259ca574 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 19 Aug 2022 12:44:01 +0100 Subject: [PATCH] using wider range network error when deciding to forward to the edit server instead of just unknown host - will also capture timeouts --- .../matrix/android/sdk/api/failure/Extensions.kt | 2 ++ .../features/onboarding/OnboardingViewModel.kt | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt index 429d346a1b..5b41ddaaec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt @@ -89,6 +89,8 @@ fun Throwable.isInvalidUIAAuth() = this is Failure.ServerError && fun Throwable.isHomeserverUnavailable() = this is Failure.NetworkConnection && this.ioException is UnknownHostException +fun Throwable.isHomeserverConnectionError() = this is Failure.NetworkConnection + fun Throwable.isMissingEmailVerification() = this is Failure.ServerError && error.code == MatrixError.M_UNAUTHORIZED && error.message == "Unable to get validated threepid" diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt index 9fb82380b3..9661feb002 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt @@ -61,6 +61,7 @@ import org.matrix.android.sdk.api.auth.login.LoginWizard import org.matrix.android.sdk.api.auth.registration.RegistrationAvailability import org.matrix.android.sdk.api.auth.registration.RegistrationWizard import org.matrix.android.sdk.api.failure.Failure +import org.matrix.android.sdk.api.failure.isHomeserverConnectionError import org.matrix.android.sdk.api.failure.isHomeserverUnavailable import org.matrix.android.sdk.api.failure.isUnrecognisedCertificate import org.matrix.android.sdk.api.network.ssl.Fingerprint @@ -702,7 +703,14 @@ class OnboardingViewModel @AssistedInject constructor( private fun onAuthenticationStartError(error: Throwable, trigger: OnboardingAction.HomeServerChange) { when { error.isHomeserverUnavailable() && applicationContext.inferNoConnectivity(sdkIntProvider) -> _viewEvents.post(OnboardingViewEvents.Failure(error)) - isUnableToSelectServer(error, trigger) -> handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection)) + isUnableToSelectServer(error, trigger) -> { + withState { state -> + when { + canEditServerSelectionError(state) -> handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection)) + else -> _viewEvents.post(OnboardingViewEvents.Failure(error)) + } + } + } error.isUnrecognisedCertificate() -> { _viewEvents.post(OnboardingViewEvents.UnrecognisedCertificateFailure(trigger, error as Failure.UnrecognizedCertificateFailure)) } @@ -710,8 +718,12 @@ class OnboardingViewModel @AssistedInject constructor( } } + private fun canEditServerSelectionError(state: OnboardingViewState) = + (state.onboardingFlow == OnboardingFlow.SignIn && vectorFeatures.isOnboardingCombinedLoginEnabled()) || + (state.onboardingFlow == OnboardingFlow.SignUp && vectorFeatures.isOnboardingCombinedRegisterEnabled()) + private fun isUnableToSelectServer(error: Throwable, trigger: OnboardingAction.HomeServerChange) = - trigger is OnboardingAction.HomeServerChange.SelectHomeServer && error.isHomeserverUnavailable() + trigger is OnboardingAction.HomeServerChange.SelectHomeServer && error.isHomeserverConnectionError() private suspend fun onAuthenticationStartedSuccess( trigger: OnboardingAction.HomeServerChange,