From e9f50038a49143c1a7edbf1dbcb9f1b805a74d1a Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 1 Apr 2022 16:53:54 +0100 Subject: [PATCH] splitting the homeserver edit from the selection so that we can handle the cases differently --- .../features/onboarding/OnboardingAction.kt | 1 + .../onboarding/OnboardingViewEvents.kt | 1 + .../onboarding/OnboardingViewModel.kt | 29 ++++++++++++------- .../StartAuthenticationFlowUseCase.kt | 2 +- ...FtueAuthCombinedServerSelectionFragment.kt | 11 +++++-- .../onboarding/ftueauth/FtueAuthVariant.kt | 1 + 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAction.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAction.kt index 8ae41adb22..e00976f8f6 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAction.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingAction.kt @@ -30,6 +30,7 @@ sealed interface OnboardingAction : VectorViewModelAction { data class UpdateServerType(val serverType: ServerType) : OnboardingAction data class SelectHomeServer(val homeServerUrl: String) : OnboardingAction + data class EditHomeServer(val homeServerUrl: String) : OnboardingAction data class UpdateUseCase(val useCase: FtueUseCase) : OnboardingAction object ResetUseCase : OnboardingAction data class UpdateSignMode(val signMode: SignMode) : OnboardingAction diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt index dddf350542..ee406aff48 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewEvents.kt @@ -40,6 +40,7 @@ sealed class OnboardingViewEvents : VectorViewEvents { object EditServerSelection : OnboardingViewEvents() data class OnServerSelectionDone(val serverType: ServerType) : OnboardingViewEvents() object OnLoginFlowRetrieved : OnboardingViewEvents() + object OnHomeserverEdited : OnboardingViewEvents() data class OnSignModeSelected(val signMode: SignMode) : OnboardingViewEvents() object OnForgetPasswordClicked : OnboardingViewEvents() object OnResetPasswordSendThreePidDone : OnboardingViewEvents() 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 a4c3db671c..1a3a0074a6 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 @@ -140,7 +140,8 @@ class OnboardingViewModel @AssistedInject constructor( is OnboardingAction.UpdateServerType -> handleUpdateServerType(action) is OnboardingAction.UpdateSignMode -> handleUpdateSignMode(action) is OnboardingAction.InitWith -> handleInitWith(action) - is OnboardingAction.SelectHomeServer -> handleSelectHomeserver(action).also { lastAction = action } + is OnboardingAction.SelectHomeServer -> handleHomeserverChange(action.homeServerUrl).also { lastAction = action } + is OnboardingAction.EditHomeServer -> handleHomeserverChange(action.homeServerUrl).also { lastAction = action } is OnboardingAction.LoginOrRegister -> handleLoginOrRegister(action).also { lastAction = action } is OnboardingAction.Register -> handleRegisterWith(action).also { lastAction = action } is OnboardingAction.LoginWithToken -> handleLoginWithToken(action) @@ -576,8 +577,8 @@ class OnboardingViewModel @AssistedInject constructor( } } - private fun handleSelectHomeserver(action: OnboardingAction.SelectHomeServer) { - val homeServerConnectionConfig = homeServerConnectionConfigFactory.create(action.homeServerUrl) + private fun handleHomeserverChange(homeserverUrl: String) { + val homeServerConnectionConfig = homeServerConnectionConfigFactory.create(homeserverUrl) if (homeServerConnectionConfig == null) { // This is invalid _viewEvents.post(OnboardingViewEvents.Failure(Throwable("Unable to create a HomeServerConnectionConfig"))) @@ -630,17 +631,23 @@ class OnboardingViewModel @AssistedInject constructor( private fun onAuthenticationStartedSuccess() { withState { - if (it.selectedHomeserver.preferredLoginMode.supportsSignModeScreen()) { - when (it.onboardingFlow) { - OnboardingFlow.SignIn -> handleUpdateSignMode(OnboardingAction.UpdateSignMode(SignMode.SignIn)) - OnboardingFlow.SignUp -> handleUpdateSignMode(OnboardingAction.UpdateSignMode(SignMode.SignUp)) - OnboardingFlow.SignInSignUp, - null -> { + when (lastAction) { + is OnboardingAction.EditHomeServer -> _viewEvents.post(OnboardingViewEvents.OnHomeserverEdited) + is OnboardingAction.SelectHomeServer -> { + if (it.selectedHomeserver.preferredLoginMode.supportsSignModeScreen()) { + when (it.onboardingFlow) { + OnboardingFlow.SignIn -> handleUpdateSignMode(OnboardingAction.UpdateSignMode(SignMode.SignIn)) + OnboardingFlow.SignUp -> handleUpdateSignMode(OnboardingAction.UpdateSignMode(SignMode.SignUp)) + OnboardingFlow.SignInSignUp, + null -> { + _viewEvents.post(OnboardingViewEvents.OnLoginFlowRetrieved) + } + } + } else { _viewEvents.post(OnboardingViewEvents.OnLoginFlowRetrieved) } } - } else { - _viewEvents.post(OnboardingViewEvents.OnLoginFlowRetrieved) + else -> _viewEvents.post(OnboardingViewEvents.OnLoginFlowRetrieved) } } } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/StartAuthenticationFlowUseCase.kt b/vector/src/main/java/im/vector/app/features/onboarding/StartAuthenticationFlowUseCase.kt index 2f5f756891..186cd2bd82 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/StartAuthenticationFlowUseCase.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/StartAuthenticationFlowUseCase.kt @@ -43,7 +43,7 @@ class StartAuthenticationFlowUseCase @Inject constructor( private fun createSelectedHomeserverState(authFlow: LoginFlowResult, config: HomeServerConnectionConfig, preferredLoginMode: LoginMode): SelectedHomeserverState { val matrixOrgUrl = stringProvider.getString(R.string.matrix_org_server_url).ensureTrailingSlash() return SelectedHomeserverState( - description = when (authFlow.homeServerUrl) { + description = when (config.homeServerUri.toString()) { matrixOrgUrl -> stringProvider.getString(R.string.ftue_auth_create_account_matrix_dot_org_server_description) else -> null }, diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt index 43cbb22d92..284bca3ed6 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt @@ -20,10 +20,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isEmpty import im.vector.app.core.extensions.content import im.vector.app.core.extensions.editText import im.vector.app.core.extensions.realignPercentagesToParent import im.vector.app.core.extensions.toReducedUrl +import im.vector.app.core.utils.ensureProtocol +import im.vector.app.core.utils.ensureTrailingSlash import im.vector.app.databinding.FragmentFtueServerSelectionCombinedBinding import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingViewEvents @@ -45,7 +48,7 @@ class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractFt } views.chooseServerSubmit.debouncedClicks { - viewModel.handle(OnboardingAction.SelectHomeServer(views.chooseServerInput.content())) + viewModel.handle(OnboardingAction.EditHomeServer(views.chooseServerInput.content().ensureProtocol().ensureTrailingSlash())) } } @@ -54,8 +57,10 @@ class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractFt } override fun updateWithState(state: OnboardingViewState) { - val userUrlInput = state.selectedHomeserver.sourceUrl?.toReducedUrlKeepingSchemaIfInsecure() - views.chooseServerInput.editText().setText(userUrlInput) + if (views.chooseServerInput.isEmpty()) { + val userUrlInput = state.selectedHomeserver.sourceUrl?.toReducedUrlKeepingSchemaIfInsecure() + views.chooseServerInput.editText().setText(userUrlInput) + } } private fun String.toReducedUrlKeepingSchemaIfInsecure() = toReducedUrl(keepSchema = this.startsWith("http://")) diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt index b96f44cc39..ea479b1cdc 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt @@ -240,6 +240,7 @@ class FtueAuthVariant( option = commonOption ) } + OnboardingViewEvents.OnHomeserverEdited -> activity.popBackstack() } }