adding dedicated server selection state to onboarding state
- replaces previous separately url strings with state usage - makes use of the state for updating the sign up and server selection fields
This commit is contained in:
parent
c3cf22158b
commit
7f90dda96f
vector/src/main
@ -291,21 +291,20 @@ class OnboardingViewModel @AssistedInject constructor(
|
|||||||
currentJob = null
|
currentJob = null
|
||||||
|
|
||||||
when (action) {
|
when (action) {
|
||||||
OnboardingAction.ResetHomeServerType -> {
|
OnboardingAction.ResetHomeServerType -> {
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
serverType = ServerType.Unknown
|
serverType = ServerType.Unknown
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OnboardingAction.ResetHomeServerUrl -> {
|
OnboardingAction.ResetHomeServerUrl -> {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
authenticationService.reset()
|
authenticationService.reset()
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
isLoading = false,
|
isLoading = false,
|
||||||
homeServerUrlFromUser = null,
|
serverSelectionState = ServerSelectionState(),
|
||||||
homeServerUrl = null,
|
|
||||||
loginMode = LoginMode.Unknown,
|
loginMode = LoginMode.Unknown,
|
||||||
serverType = ServerType.Unknown,
|
serverType = ServerType.Unknown,
|
||||||
loginModeSupportedTypes = emptyList()
|
loginModeSupportedTypes = emptyList()
|
||||||
@ -571,7 +570,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun handleWebLoginSuccess(action: OnboardingAction.WebLoginSuccess) = withState { state ->
|
private fun handleWebLoginSuccess(action: OnboardingAction.WebLoginSuccess) = withState { state ->
|
||||||
val homeServerConnectionConfigFinal = homeServerConnectionConfigFactory.create(state.homeServerUrl)
|
val homeServerConnectionConfigFinal = homeServerConnectionConfigFactory.create(state.serverSelectionState.hostedUrl)
|
||||||
|
|
||||||
if (homeServerConnectionConfigFinal == null) {
|
if (homeServerConnectionConfigFinal == null) {
|
||||||
// Should not happen
|
// Should not happen
|
||||||
@ -647,11 +646,19 @@ class OnboardingViewModel @AssistedInject constructor(
|
|||||||
else -> LoginMode.Unsupported
|
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 {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
isLoading = false,
|
isLoading = false,
|
||||||
homeServerUrlFromUser = homeServerConnectionConfig.homeServerUri.toString(),
|
serverSelectionState = serverSelection,
|
||||||
homeServerUrl = data.homeServerUrl,
|
|
||||||
loginMode = loginMode,
|
loginMode = loginMode,
|
||||||
loginModeSupportedTypes = data.supportedLoginTypes.toList()
|
loginModeSupportedTypes = data.supportedLoginTypes.toList()
|
||||||
)
|
)
|
||||||
|
@ -40,12 +40,6 @@ data class OnboardingViewState(
|
|||||||
val signMode: SignMode = SignMode.Unknown,
|
val signMode: SignMode = SignMode.Unknown,
|
||||||
@PersistState
|
@PersistState
|
||||||
val resetPasswordEmail: String? = null,
|
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
|
// For SSO session recovery
|
||||||
@PersistState
|
@PersistState
|
||||||
@ -60,6 +54,9 @@ data class OnboardingViewState(
|
|||||||
val knownCustomHomeServersUrls: List<String> = emptyList(),
|
val knownCustomHomeServersUrls: List<String> = emptyList(),
|
||||||
val isForceLoginFallbackEnabled: Boolean = false,
|
val isForceLoginFallbackEnabled: Boolean = false,
|
||||||
|
|
||||||
|
@PersistState
|
||||||
|
val serverSelectionState: ServerSelectionState = ServerSelectionState(),
|
||||||
|
|
||||||
@PersistState
|
@PersistState
|
||||||
val personalizationState: PersonalizationState = PersonalizationState()
|
val personalizationState: PersonalizationState = PersonalizationState()
|
||||||
) : MavericksState
|
) : MavericksState
|
||||||
@ -70,6 +67,13 @@ enum class OnboardingFlow {
|
|||||||
SignInSignUp
|
SignInSignUp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class ServerSelectionState(
|
||||||
|
val description: String? = null,
|
||||||
|
val userUrlInput: String? = null,
|
||||||
|
val hostedUrl: String? = null,
|
||||||
|
) : Parcelable
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class PersonalizationState(
|
data class PersonalizationState(
|
||||||
val supportsChangingDisplayName: Boolean = false,
|
val supportsChangingDisplayName: Boolean = false,
|
||||||
|
@ -77,7 +77,7 @@ class FtueAuthCaptchaFragment @Inject constructor(
|
|||||||
val mime = "text/html"
|
val mime = "text/html"
|
||||||
val encoding = "utf-8"
|
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.loadDataWithBaseURL(homeServerUrl, html, mime, encoding, null)
|
||||||
views.loginCaptchaWevView.requestLayout()
|
views.loginCaptchaWevView.requestLayout()
|
||||||
|
|
||||||
|
4
vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedRegisterFragment.kt
4
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.hidePassword
|
||||||
import im.vector.app.core.extensions.realignPercentagesToParent
|
import im.vector.app.core.extensions.realignPercentagesToParent
|
||||||
import im.vector.app.core.extensions.toMvRxBundle
|
import im.vector.app.core.extensions.toMvRxBundle
|
||||||
|
import im.vector.app.core.extensions.toReducedUrl
|
||||||
import im.vector.app.databinding.FragmentFtueSignUpCombinedBinding
|
import im.vector.app.databinding.FragmentFtueSignUpCombinedBinding
|
||||||
import im.vector.app.features.login.LoginMode
|
import im.vector.app.features.login.LoginMode
|
||||||
import im.vector.app.features.login.SSORedirectRouterActivity
|
import im.vector.app.features.login.SSORedirectRouterActivity
|
||||||
@ -174,6 +175,9 @@ class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAu
|
|||||||
setupUi(state)
|
setupUi(state)
|
||||||
setupAutoFill()
|
setupAutoFill()
|
||||||
|
|
||||||
|
views.selectedServerName.text = state.serverSelectionState.userUrlInput.toReducedUrl()
|
||||||
|
views.selectedServerDescription.text = state.serverSelectionState.description
|
||||||
|
|
||||||
if (state.isLoading) {
|
if (state.isLoading) {
|
||||||
// Ensure password is hidden
|
// Ensure password is hidden
|
||||||
views.createAccountPasswordInput.editText().hidePassword()
|
views.createAccountPasswordInput.editText().hidePassword()
|
||||||
|
@ -20,9 +20,13 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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.databinding.FragmentFtueServerSelectionCombinedBinding
|
||||||
import im.vector.app.features.onboarding.OnboardingAction
|
import im.vector.app.features.onboarding.OnboardingAction
|
||||||
import im.vector.app.features.onboarding.OnboardingViewEvents
|
import im.vector.app.features.onboarding.OnboardingViewEvents
|
||||||
|
import im.vector.app.features.onboarding.OnboardingViewState
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSSOFtueAuthFragment<FragmentFtueServerSelectionCombinedBinding>() {
|
class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSSOFtueAuthFragment<FragmentFtueServerSelectionCombinedBinding>() {
|
||||||
@ -33,12 +37,18 @@ class FtueAuthCombinedServerSelectionFragment @Inject constructor() : AbstractSS
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
views.chooseServerRoot.realignPercentagesToParent()
|
||||||
|
|
||||||
views.chooseServerToolbar.setNavigationOnClickListener {
|
views.chooseServerToolbar.setNavigationOnClickListener {
|
||||||
viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnBack))
|
viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnBack))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resetViewModel() {
|
override fun resetViewModel() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun updateWithState(state: OnboardingViewState) {
|
||||||
|
views.chooseServerInput.editText().setText(state.serverSelectionState.userUrlInput.toReducedUrl())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
|||||||
ServerType.MatrixOrg -> {
|
ServerType.MatrixOrg -> {
|
||||||
views.loginServerIcon.isVisible = true
|
views.loginServerIcon.isVisible = true
|
||||||
views.loginServerIcon.setImageResource(R.drawable.ic_logo_matrix_org)
|
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)
|
views.loginNotice.text = getString(R.string.login_server_matrix_org_text)
|
||||||
}
|
}
|
||||||
ServerType.EMS -> {
|
ServerType.EMS -> {
|
||||||
@ -195,7 +195,7 @@ class FtueAuthLoginFragment @Inject constructor() : AbstractSSOFtueAuthFragment<
|
|||||||
}
|
}
|
||||||
ServerType.Other -> {
|
ServerType.Other -> {
|
||||||
views.loginServerIcon.isVisible = false
|
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)
|
views.loginNotice.text = getString(R.string.login_server_other_text)
|
||||||
}
|
}
|
||||||
ServerType.Unknown -> Unit /* Should not happen */
|
ServerType.Unknown -> Unit /* Should not happen */
|
||||||
|
@ -59,7 +59,7 @@ class FtueAuthResetPasswordFragment @Inject constructor() : AbstractFtueAuthFrag
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupUi(state: OnboardingViewState) {
|
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() {
|
private fun setupSubmitButton() {
|
||||||
|
@ -60,19 +60,19 @@ class FtueAuthSignUpSignInSelectionFragment @Inject constructor() : AbstractSSOF
|
|||||||
ServerType.MatrixOrg -> {
|
ServerType.MatrixOrg -> {
|
||||||
views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_matrix_org)
|
views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_matrix_org)
|
||||||
views.loginSignupSigninServerIcon.isVisible = true
|
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)
|
views.loginSignupSigninText.text = getString(R.string.login_server_matrix_org_text)
|
||||||
}
|
}
|
||||||
ServerType.EMS -> {
|
ServerType.EMS -> {
|
||||||
views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_element_matrix_services)
|
views.loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_element_matrix_services)
|
||||||
views.loginSignupSigninServerIcon.isVisible = true
|
views.loginSignupSigninServerIcon.isVisible = true
|
||||||
views.loginSignupSigninTitle.text = getString(R.string.login_connect_to_modular)
|
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 -> {
|
ServerType.Other -> {
|
||||||
views.loginSignupSigninServerIcon.isVisible = false
|
views.loginSignupSigninServerIcon.isVisible = false
|
||||||
views.loginSignupSigninTitle.text = getString(R.string.login_server_other_title)
|
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 */
|
ServerType.Unknown -> Unit /* Should not happen */
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ class FtueAuthTermsFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun updateWithState(state: OnboardingViewState) {
|
override fun updateWithState(state: OnboardingViewState) {
|
||||||
policyController.homeServer = state.homeServerUrlFromUser.toReducedUrl()
|
policyController.homeServer = state.serverSelectionState.userUrlInput.toReducedUrl()
|
||||||
renderState()
|
renderState()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,6 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:text="@string/ftue_auth_create_account_matrix_dot_org_server_name"
|
|
||||||
android:textColor="?vctr_content_primary"
|
android:textColor="?vctr_content_primary"
|
||||||
app:layout_constraintBottom_toTopOf="@id/selectedServerDescription"
|
app:layout_constraintBottom_toTopOf="@id/selectedServerDescription"
|
||||||
app:layout_constraintEnd_toStartOf="@id/editServerButton"
|
app:layout_constraintEnd_toStartOf="@id/editServerButton"
|
||||||
@ -122,7 +121,6 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:text="@string/ftue_auth_create_account_matrix_dot_org_server_description"
|
|
||||||
android:textColor="?vctr_content_tertiary"
|
android:textColor="?vctr_content_tertiary"
|
||||||
app:layout_constraintBottom_toTopOf="@id/serverSelectionSpacing"
|
app:layout_constraintBottom_toTopOf="@id/serverSelectionSpacing"
|
||||||
app:layout_constraintEnd_toStartOf="@id/editServerButton"
|
app:layout_constraintEnd_toStartOf="@id/editServerButton"
|
||||||
|
@ -17,11 +17,10 @@
|
|||||||
<string name="ftue_auth_create_account_choose_server_header">Choose your server to store your data</string>
|
<string name="ftue_auth_create_account_choose_server_header">Choose your server to store your data</string>
|
||||||
<string name="ftue_auth_create_account_sso_section_header">Or</string>
|
<string name="ftue_auth_create_account_sso_section_header">Or</string>
|
||||||
<string name="ftue_auth_create_account_matrix_dot_org_server_description">Join millions for free on the largest public server</string>
|
<string name="ftue_auth_create_account_matrix_dot_org_server_description">Join millions for free on the largest public server</string>
|
||||||
<string name="ftue_auth_create_account_matrix_dot_org_server_name">matrix.org</string>
|
|
||||||
<string name="ftue_auth_create_account_edit_server_selection">Edit</string>
|
<string name="ftue_auth_create_account_edit_server_selection">Edit</string>
|
||||||
|
|
||||||
<string name="ftue_auth_choose_server_title">Choose your server</string>
|
<string name="ftue_auth_choose_server_title">Choose your server</string>
|
||||||
<string name="ftue_auth_choose_server_subtitle">What is the address of your server? Server is like a home for all your data</string>
|
<string name="ftue_auth_choose_server_subtitle">What is the address of your server? Server is like a home for all your data.</string>
|
||||||
<string name="ftue_auth_choose_server_entry_hint">Server URL</string>
|
<string name="ftue_auth_choose_server_entry_hint">Server URL</string>
|
||||||
<string name="ftue_auth_choose_server_entry_footer">You can only connect to a server that has already been set up</string>
|
<string name="ftue_auth_choose_server_entry_footer">You can only connect to a server that has already been set up</string>
|
||||||
<string name="ftue_auth_choose_server_ems_title">Want to host your own server?</string>
|
<string name="ftue_auth_choose_server_ems_title">Want to host your own server?</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user