diff --git a/vector/src/main/java/im/vector/riotx/core/di/VectorModule.kt b/vector/src/main/java/im/vector/riotx/core/di/VectorModule.kt index 84441d88e1..848c1e0d97 100644 --- a/vector/src/main/java/im/vector/riotx/core/di/VectorModule.kt +++ b/vector/src/main/java/im/vector/riotx/core/di/VectorModule.kt @@ -26,6 +26,8 @@ import dagger.Provides import im.vector.matrix.android.api.Matrix import im.vector.matrix.android.api.auth.AuthenticationService import im.vector.matrix.android.api.session.Session +import im.vector.riotx.core.error.DefaultErrorFormatter +import im.vector.riotx.core.error.ErrorFormatter import im.vector.riotx.features.navigation.DefaultNavigator import im.vector.riotx.features.navigation.Navigator import im.vector.riotx.features.ui.SharedPreferencesUiStateRepository @@ -72,6 +74,9 @@ abstract class VectorModule { @Binds abstract fun bindNavigator(navigator: DefaultNavigator): Navigator + @Binds + abstract fun bindErrorFormatter(errorFormatter: DefaultErrorFormatter): ErrorFormatter + @Binds abstract fun bindUiStateRepository(uiStateRepository: SharedPreferencesUiStateRepository): UiStateRepository } diff --git a/vector/src/main/java/im/vector/riotx/core/error/ErrorFormatter.kt b/vector/src/main/java/im/vector/riotx/core/error/ErrorFormatter.kt index e01c2b0542..f2daa6fc9a 100644 --- a/vector/src/main/java/im/vector/riotx/core/error/ErrorFormatter.kt +++ b/vector/src/main/java/im/vector/riotx/core/error/ErrorFormatter.kt @@ -25,14 +25,15 @@ import java.net.SocketTimeoutException import java.net.UnknownHostException import javax.inject.Inject -class ErrorFormatter @Inject constructor(private val stringProvider: StringProvider) { +interface ErrorFormatter { + fun toHumanReadable(throwable: Throwable?): String +} - fun toHumanReadable(failure: Failure): String { - // Default - return failure.localizedMessage - } +class DefaultErrorFormatter @Inject constructor( + private val stringProvider: StringProvider +) : ErrorFormatter { - fun toHumanReadable(throwable: Throwable?): String { + override fun toHumanReadable(throwable: Throwable?): String { return when (throwable) { null -> null is Failure.NetworkConnection -> { @@ -57,19 +58,19 @@ class ErrorFormatter @Inject constructor(private val stringProvider: StringProvi && throwable.error.message == "Invalid password" -> { stringProvider.getString(R.string.auth_invalid_login_param) } - throwable.error.code == MatrixError.M_USER_IN_USE -> { + throwable.error.code == MatrixError.M_USER_IN_USE -> { stringProvider.getString(R.string.login_signup_error_user_in_use) } - throwable.error.code == MatrixError.M_BAD_JSON -> { + throwable.error.code == MatrixError.M_BAD_JSON -> { stringProvider.getString(R.string.login_error_bad_json) } - throwable.error.code == MatrixError.M_NOT_JSON -> { + throwable.error.code == MatrixError.M_NOT_JSON -> { stringProvider.getString(R.string.login_error_not_json) } - throwable.error.code == MatrixError.M_LIMIT_EXCEEDED -> { + throwable.error.code == MatrixError.M_LIMIT_EXCEEDED -> { limitExceededError(throwable.error) } - throwable.error.code == MatrixError.M_THREEPID_NOT_FOUND -> { + throwable.error.code == MatrixError.M_THREEPID_NOT_FOUND -> { stringProvider.getString(R.string.login_reset_password_error_not_found) } else -> {