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 dbd257464e..8a427abdd1 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 @@ -291,21 +291,20 @@ class OnboardingViewModel @AssistedInject constructor( currentJob = null when (action) { - OnboardingAction.ResetHomeServerType -> { + OnboardingAction.ResetHomeServerType -> { setState { copy( serverType = ServerType.Unknown ) } } - OnboardingAction.ResetHomeServerUrl -> { + OnboardingAction.ResetHomeServerUrl -> { viewModelScope.launch { authenticationService.reset() setState { copy( isLoading = false, - homeServerUrlFromUser = null, - homeServerUrl = null, + serverSelectionState = ServerSelectionState(), loginMode = LoginMode.Unknown, serverType = ServerType.Unknown, loginModeSupportedTypes = emptyList() @@ -571,7 +570,7 @@ class OnboardingViewModel @AssistedInject constructor( } private fun handleWebLoginSuccess(action: OnboardingAction.WebLoginSuccess) = withState { state -> - val homeServerConnectionConfigFinal = homeServerConnectionConfigFactory.create(state.homeServerUrl) + val homeServerConnectionConfigFinal = homeServerConnectionConfigFactory.create(state.serverSelectionState.hostedUrl) if (homeServerConnectionConfigFinal == null) { // Should not happen @@ -647,11 +646,19 @@ class OnboardingViewModel @AssistedInject constructor( else -> LoginMode.Unsupported } + val serverSelection = ServerSelectionState( + description = when (data.homeServerUrl) { + matrixOrgUrl -> stringProvider.getString(R.string.ftue_auth_create_account_matrix_dot_org_server_description) + else -> null + }, + userUrlInput = homeServerConnectionConfig.homeServerUri.toString(), + hostedUrl = data.homeServerUrl + ) + setState { copy( isLoading = false, - homeServerUrlFromUser = homeServerConnectionConfig.homeServerUri.toString(), - homeServerUrl = data.homeServerUrl, + serverSelectionState = serverSelection, loginMode = loginMode, loginModeSupportedTypes = data.supportedLoginTypes.toList() ) diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt index b98e811679..99a5c595e5 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt @@ -40,12 +40,6 @@ data class OnboardingViewState( val signMode: SignMode = SignMode.Unknown, @PersistState val resetPasswordEmail: String? = null, - @PersistState - val homeServerUrlFromUser: String? = null, - - // Can be modified after a Wellknown request - @PersistState - val homeServerUrl: String? = null, // For SSO session recovery @PersistState @@ -60,6 +54,9 @@ data class OnboardingViewState( val knownCustomHomeServersUrls: List = emptyList(), val isForceLoginFallbackEnabled: Boolean = false, + @PersistState + val serverSelectionState: ServerSelectionState = ServerSelectionState(), + @PersistState val personalizationState: PersonalizationState = PersonalizationState() ) : MavericksState @@ -70,6 +67,13 @@ enum class OnboardingFlow { SignInSignUp } +@Parcelize +data class ServerSelectionState( + val description: String? = null, + val userUrlInput: String? = null, + val hostedUrl: String? = null, +) : Parcelable + @Parcelize data class PersonalizationState( val supportsChangingDisplayName: Boolean = false, diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCaptchaFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCaptchaFragment.kt index c9c693ef3b..f10ef68850 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCaptchaFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCaptchaFragment.kt @@ -77,7 +77,7 @@ class FtueAuthCaptchaFragment @Inject constructor( val mime = "text/html" val encoding = "utf-8" - val homeServerUrl = state.homeServerUrl ?: error("missing url of homeserver") + val homeServerUrl = state.serverSelectionState.hostedUrl ?: error("missing url of homeserver") views.loginCaptchaWevView.loadDataWithBaseURL(homeServerUrl, html, mime, encoding, null) views.loginCaptchaWevView.requestLayout() diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt index 5096598386..c24dc22de2 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt @@ -40,6 +40,7 @@ import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hidePassword import im.vector.app.core.extensions.realignPercentagesToParent import im.vector.app.core.extensions.toMvRxBundle +import im.vector.app.core.extensions.toReducedUrl import im.vector.app.databinding.FragmentFtueSignUpCombinedBinding import im.vector.app.features.login.LoginMode import im.vector.app.features.login.SSORedirectRouterActivity @@ -174,6 +175,9 @@ class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAu setupUi(state) setupAutoFill() + views.selectedServerName.text = state.serverSelectionState.userUrlInput.toReducedUrl() + views.selectedServerDescription.text = state.serverSelectionState.description + if (state.isLoading) { // Ensure password is hidden views.createAccountPasswordInput.editText().hidePassword() 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 fdd81b99c0..66707f371d 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,9 +20,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +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.databinding.FragmentFtueServerSelectionCombinedBinding import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingViewEvents +import im.vector.app.features.onboarding.OnboardingViewState import javax.inject.Inject class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSSOFtueAuthFragment() { @@ -33,12 +37,18 @@ class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSS override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + views.chooseServerRoot.realignPercentagesToParent() + views.chooseServerToolbar.setNavigationOnClickListener { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnBack)) } } override fun resetViewModel() { + // do nothing + } + override fun updateWithState(state: OnboardingViewState) { + views.chooseServerInput.editText().setText(state.serverSelectionState.userUrlInput.toReducedUrl()) } } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt index e561f85f25..e21210065b 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt @@ -184,7 +184,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment< ServerType.MatrixOrg -> { views.loginServerIcon.isVisible = true views.loginServerIcon.setImageResource(R.drawable.ic_logo_matrix_org) - views.loginTitle.text = getString(resId, state.homeServerUrlFromUser.toReducedUrl()) + views.loginTitle.text = getString(resId, state.serverSelectionState.userUrlInput.toReducedUrl()) views.loginNotice.text = getString(R.string.login_server_matrix_org_text) } ServerType.EMS -> { @@ -195,7 +195,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment< } ServerType.Other -> { views.loginServerIcon.isVisible = false - views.loginTitle.text = getString(resId, state.homeServerUrlFromUser.toReducedUrl()) + views.loginTitle.text = getString(resId, state.serverSelectionState.userUrlInput.toReducedUrl()) views.loginNotice.text = getString(R.string.login_server_other_text) } ServerType.Unknown -> Unit /* Should not happen */ diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordFragment.kt index b612ec34b5..67dafbd9c2 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthResetPasswordFragment.kt @@ -59,7 +59,7 @@ class FtueAuthResetPasswordFragment @Inject constructor() : AbstractFtueAuthFrag } private fun setupUi(state: OnboardingViewState) { - views.resetPasswordTitle.text = getString(R.string.login_reset_password_on, state.homeServerUrlFromUser.toReducedUrl()) + views.resetPasswordTitle.text = getString(R.string.login_reset_password_on, state.serverSelectionState.userUrlInput.toReducedUrl()) } private fun setupSubmitButton() { diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSignUpSignInSelectionFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSignUpSignInSelectionFragment.kt index e9ae5022e2..74c98c0366 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSignUpSignInSelectionFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSignUpSignInSelectionFragment.kt @@ -60,19 +60,19 @@ class FtueAuthSignUpSignInSelectionFragment @Inject constructor() : AbstractSSOF ServerType.MatrixOrg -> { views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_matrix_org) views.loginSignupSigninServerIcon.isVisible = true - views.loginSignupSigninTitle.text = getString(R.string.login_connect_to, state.homeServerUrlFromUser.toReducedUrl()) + views.loginSignupSigninTitle.text = getString(R.string.login_connect_to, state.serverSelectionState.userUrlInput.toReducedUrl()) views.loginSignupSigninText.text = getString(R.string.login_server_matrix_org_text) } ServerType.EMS -> { views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_element_matrix_services) views.loginSignupSigninServerIcon.isVisible = true views.loginSignupSigninTitle.text = getString(R.string.login_connect_to_modular) - views.loginSignupSigninText.text = state.homeServerUrlFromUser.toReducedUrl() + views.loginSignupSigninText.text = state.serverSelectionState.userUrlInput.toReducedUrl() } ServerType.Other -> { views.loginSignupSigninServerIcon.isVisible = false views.loginSignupSigninTitle.text = getString(R.string.login_server_other_title) - views.loginSignupSigninText.text = getString(R.string.login_connect_to, state.homeServerUrlFromUser.toReducedUrl()) + views.loginSignupSigninText.text = getString(R.string.login_connect_to, state.serverSelectionState.userUrlInput.toReducedUrl()) } ServerType.Unknown -> Unit /* Should not happen */ } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/terms/FtueAuthTermsFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/terms/FtueAuthTermsFragment.kt index f6a7769cbd..7d8f19b1b0 100755 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/terms/FtueAuthTermsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/terms/FtueAuthTermsFragment.kt @@ -116,7 +116,7 @@ class FtueAuthTermsFragment @Inject constructor( } override fun updateWithState(state: OnboardingViewState) { - policyController.homeServer = state.homeServerUrlFromUser.toReducedUrl() + policyController.homeServer = state.serverSelectionState.userUrlInput.toReducedUrl() renderState() } diff --git a/vector/src/main/res/layout/fragment_ftue_sign_up_combined.xml b/vector/src/main/res/layout/fragment_ftue_sign_up_combined.xml index ae51808d3a..5c3fa9cf8f 100644 --- a/vector/src/main/res/layout/fragment_ftue_sign_up_combined.xml +++ b/vector/src/main/res/layout/fragment_ftue_sign_up_combined.xml @@ -109,7 +109,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="12dp" - android:text="@string/ftue_auth_create_account_matrix_dot_org_server_name" android:textColor="?vctr_content_primary" app:layout_constraintBottom_toTopOf="@id/selectedServerDescription" app:layout_constraintEnd_toStartOf="@id/editServerButton" @@ -122,7 +121,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="12dp" - android:text="@string/ftue_auth_create_account_matrix_dot_org_server_description" android:textColor="?vctr_content_tertiary" app:layout_constraintBottom_toTopOf="@id/serverSelectionSpacing" app:layout_constraintEnd_toStartOf="@id/editServerButton" diff --git a/vector/src/main/res/values/donottranslate.xml b/vector/src/main/res/values/donottranslate.xml index fc946c3b3f..c0ac6a4989 100755 --- a/vector/src/main/res/values/donottranslate.xml +++ b/vector/src/main/res/values/donottranslate.xml @@ -17,11 +17,10 @@ Choose your server to store your data Or Join millions for free on the largest public server - matrix.org Edit Choose your server - What is the address of your server? Server is like a home for all your data + What is the address of your server? Server is like a home for all your data. Server URL You can only connect to a server that has already been set up Want to host your own server?