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 d3cc8fc8e4..6e198fb98c 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 @@ -86,6 +86,10 @@ fun Throwable.isInvalidUIAAuth() = this is Failure.ServerError && fun Throwable.isHomeserverUnavailable() = this is Failure.NetworkConnection && this.ioException is UnknownHostException +fun Throwable.isMissingEmailVerification() = this is Failure.ServerError && + error.code == MatrixError.M_UNAUTHORIZED && + error.message == "Unable to get validated threepid" + /** * Try to convert to a RegistrationFlowResponse. Return null in the cases it's not possible */ diff --git a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt index 8fbd89a6c1..d9a08bd81a 100644 --- a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt +++ b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt @@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.failure.MatrixError import org.matrix.android.sdk.api.failure.MatrixIdFailure import org.matrix.android.sdk.api.failure.isInvalidPassword import org.matrix.android.sdk.api.failure.isLimitExceededError +import org.matrix.android.sdk.api.failure.isMissingEmailVerification import org.matrix.android.sdk.api.session.identity.IdentityServiceError import java.net.HttpURLConnection import java.net.SocketTimeoutException @@ -105,6 +106,9 @@ class DefaultErrorFormatter @Inject constructor( throwable.error.message == "Not allowed to join this room" -> { stringProvider.getString(R.string.room_error_access_unauthorized) } + throwable.isMissingEmailVerification() -> { + stringProvider.getString(R.string.auth_reset_password_error_unverified) + } else -> { throwable.error.message.takeIf { it.isNotEmpty() } ?: throwable.error.code.takeIf { it.isNotEmpty() } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordEntryFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordEntryFragment.kt index 6282fded61..cede32008c 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordEntryFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordEntryFragment.kt @@ -31,6 +31,8 @@ import im.vector.app.core.extensions.setOnImeDoneListener import im.vector.app.databinding.FragmentFtueResetPasswordInputBinding import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingViewState +import org.matrix.android.sdk.api.failure.isInvalidPassword +import org.matrix.android.sdk.api.failure.isMissingEmailVerification @AndroidEntryPoint class FtueAuthResetPasswordEntryFragment : AbstractFtueAuthFragment() { @@ -61,7 +63,12 @@ class FtueAuthResetPasswordEntryFragment : AbstractFtueAuthFragment super.onError(throwable) + else -> { + views.newPasswordInput.error = errorFormatter.toHumanReadable(throwable) + } + } } override fun updateWithState(state: OnboardingViewState) { diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 8f0e0ac7ab..96ea65c5a7 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -524,6 +524,7 @@ This homeserver would like to make sure you are not a robot The email address linked to your account must be entered. Failed to verify email address: make sure you clicked the link in the email + Email not verified, check your inbox "Please review and accept the policies of this homeserver:"