diff --git a/CHANGES.md b/CHANGES.md index 5f61c3569d..7067edbb1b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Improvements 🙌: - Visually disable call buttons in menu and prohibit calling when permissions are insufficient (#2112) - Add a setting to show timestamp for all messages (#2123) - Use cache for user color + - Allow using an outdated homeserver, at user's risk (#1972) Bugfix 🐛: - Long message cannot be sent/takes infinite time & blocks other messages #1397 diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt index c3686da7dd..13693e5bf1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt @@ -17,13 +17,11 @@ package org.matrix.android.sdk.api.auth.data -// Either a list of supported login types, or an error if the homeserver is outdated sealed class LoginFlowResult { data class Success( val supportedLoginTypes: List, val isLoginAndRegistrationSupported: Boolean, - val homeServerUrl: String + val homeServerUrl: String, + val isOutdatedHomeserver: Boolean ) : LoginFlowResult() - - object OutdatedHomeserver : LoginFlowResult() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt index 02c48dab07..3313a3e86f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt @@ -273,16 +273,16 @@ internal class DefaultAuthenticationService @Inject constructor( } private suspend fun getLoginFlowResult(authAPI: AuthAPI, versions: Versions, homeServerUrl: String): LoginFlowResult { - return if (versions.isSupportedBySdk()) { - // Get the login flow - val loginFlowResponse = executeRequest(null) { - apiCall = authAPI.getLoginFlows() - } - LoginFlowResult.Success(loginFlowResponse.flows.orEmpty().mapNotNull { it.type }, versions.isLoginAndRegistrationSupportedBySdk(), homeServerUrl) - } else { - // Not supported - LoginFlowResult.OutdatedHomeserver + // Get the login flow + val loginFlowResponse = executeRequest(null) { + apiCall = authAPI.getLoginFlows() } + return LoginFlowResult.Success( + loginFlowResponse.flows.orEmpty().mapNotNull { it.type }, + versions.isLoginAndRegistrationSupportedBySdk(), + homeServerUrl, + !versions.isSupportedBySdk() + ) } override fun getRegistrationWizard(): RegistrationWizard { diff --git a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt index da63ca529d..735521fc3c 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt @@ -42,10 +42,10 @@ import im.vector.app.features.login.terms.LoginTermsFragment import im.vector.app.features.login.terms.LoginTermsFragmentArgument import im.vector.app.features.login.terms.toLocalizedLoginTerms import im.vector.app.features.pin.UnlockedActivity +import kotlinx.android.synthetic.main.activity_login.* import org.matrix.android.sdk.api.auth.registration.FlowResult import org.matrix.android.sdk.api.auth.registration.Stage import org.matrix.android.sdk.api.extensions.tryOrNull -import kotlinx.android.synthetic.main.activity_login.* import javax.inject.Inject /** @@ -127,7 +127,7 @@ open class LoginActivity : VectorBaseActivity(), ToolbarConfigurable, UnlockedAc is LoginViewEvents.OutdatedHomeserver -> { AlertDialog.Builder(this) .setTitle(R.string.login_error_outdated_homeserver_title) - .setMessage(R.string.login_error_outdated_homeserver_content) + .setMessage(R.string.login_error_outdated_homeserver_warning_content) .setPositiveButton(R.string.ok, null) .show() Unit diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index aed186bcd6..f986227961 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -748,34 +748,21 @@ class LoginViewModel @AssistedInject constructor( else -> LoginMode.Unsupported } - if (loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) { - notSupported() - } else { - // FIXME We should post a view event here normally? - setState { - copy( - asyncHomeServerLoginFlowRequest = Uninitialized, - homeServerUrl = data.homeServerUrl, - loginMode = loginMode, - loginModeSupportedTypes = data.supportedLoginTypes.toList() - ) - } + // FIXME We should post a view event here normally? + setState { + copy( + asyncHomeServerLoginFlowRequest = Uninitialized, + homeServerUrl = data.homeServerUrl, + loginMode = loginMode, + loginModeSupportedTypes = data.supportedLoginTypes.toList() + ) + } + if ((loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) + || data.isOutdatedHomeserver) { + // Notify the UI + _viewEvents.post(LoginViewEvents.OutdatedHomeserver) } } - is LoginFlowResult.OutdatedHomeserver -> { - notSupported() - } - } - } - - private fun notSupported() { - // Notify the UI - _viewEvents.post(LoginViewEvents.OutdatedHomeserver) - - setState { - copy( - asyncHomeServerLoginFlowRequest = Uninitialized - ) } } }) diff --git a/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt b/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt index 94caf70a11..4f6110aab1 100644 --- a/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/signout/soft/SoftLogoutViewModel.kt @@ -25,16 +25,16 @@ import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject +import im.vector.app.core.di.ActiveSessionHolder +import im.vector.app.core.extensions.hasUnsavedKeys +import im.vector.app.core.platform.VectorViewModel +import im.vector.app.features.login.LoginMode import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.auth.AuthenticationService import org.matrix.android.sdk.api.auth.data.LoginFlowResult import org.matrix.android.sdk.api.auth.data.LoginFlowTypes import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.util.Cancelable -import im.vector.app.core.di.ActiveSessionHolder -import im.vector.app.core.extensions.hasUnsavedKeys -import im.vector.app.core.platform.VectorViewModel -import im.vector.app.features.login.LoginMode import timber.log.Timber /** @@ -102,7 +102,7 @@ class SoftLogoutViewModel @AssistedInject constructor( override fun onSuccess(data: LoginFlowResult) { when (data) { - is LoginFlowResult.Success -> { + is LoginFlowResult.Success -> { val loginMode = when { // SSO login is taken first data.supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso @@ -110,29 +110,12 @@ class SoftLogoutViewModel @AssistedInject constructor( else -> LoginMode.Unsupported } - if (loginMode == LoginMode.Password && !data.isLoginAndRegistrationSupported) { - notSupported() - } else { - setState { - copy( - asyncHomeServerLoginFlowRequest = Success(loginMode) - ) - } + setState { + copy( + asyncHomeServerLoginFlowRequest = Success(loginMode) + ) } } - is LoginFlowResult.OutdatedHomeserver -> { - notSupported() - } - } - } - - private fun notSupported() { - // Should not happen since it's a re-logout - // Notify the UI - setState { - copy( - asyncHomeServerLoginFlowRequest = Fail(IllegalStateException("Should not happen")) - ) } } }) diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 3d945f3cfd..61580a66d4 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1988,6 +1988,7 @@ The entered code is not correct. Please check. Outdated homeserver This homeserver is running too old a version to connect to. Ask your homeserver admin to upgrade. + This homeserver is running an old version. Ask your homeserver admin to upgrade. You can continue, but some features may not work correctly. Too many requests have been sent. You can retry in %1$d second…