Login screens: fix issue with reset password fragment navigation

This commit is contained in:
Benoit Marty 2019-11-22 10:37:47 +01:00
parent 37166caea2
commit d2b516bdc2
2 changed files with 11 additions and 11 deletions

View File

@ -79,3 +79,6 @@ fun <T : Fragment> VectorBaseFragment.addChildFragmentToBackstack(frameId: Int,
replace(frameId, fragmentClass, params.toMvRxBundle(), tag).addToBackStack(tag) replace(frameId, fragmentClass, params.toMvRxBundle(), tag).addToBackStack(tag)
} }
} }
// Define a missing constant
const val POP_BACK_STACK_EXCLUSIVE = 0

View File

@ -30,6 +30,7 @@ import im.vector.matrix.android.api.auth.registration.FlowResult
import im.vector.matrix.android.api.auth.registration.Stage import im.vector.matrix.android.api.auth.registration.Stage
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.di.ScreenComponent import im.vector.riotx.core.di.ScreenComponent
import im.vector.riotx.core.extensions.POP_BACK_STACK_EXCLUSIVE
import im.vector.riotx.core.extensions.addFragment import im.vector.riotx.core.extensions.addFragment
import im.vector.riotx.core.extensions.addFragmentToBackstack import im.vector.riotx.core.extensions.addFragmentToBackstack
import im.vector.riotx.core.platform.ToolbarConfigurable import im.vector.riotx.core.platform.ToolbarConfigurable
@ -104,21 +105,20 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable {
}) })
is LoginNavigation.OnServerSelectionDone -> onServerSelectionDone() is LoginNavigation.OnServerSelectionDone -> onServerSelectionDone()
is LoginNavigation.OnSignModeSelected -> onSignModeSelected() is LoginNavigation.OnSignModeSelected -> onSignModeSelected()
is LoginNavigation.OnLoginFlowRetrieved -> onLoginFlowRetrieved() is LoginNavigation.OnLoginFlowRetrieved -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginSignUpSignInSelectionFragment::class.java)
is LoginNavigation.OnWebLoginError -> onWebLoginError(loginNavigation) is LoginNavigation.OnWebLoginError -> onWebLoginError(loginNavigation)
is LoginNavigation.OnForgetPasswordClicked -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordFragment::class.java) is LoginNavigation.OnForgetPasswordClicked -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordFragment::class.java)
is LoginNavigation.OnResetPasswordSendThreePidDone -> { is LoginNavigation.OnResetPasswordSendThreePidDone -> {
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE)
addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordMailConfirmationFragment::class.java) addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordMailConfirmationFragment::class.java)
} }
is LoginNavigation.OnResetPasswordMailConfirmationSuccess -> { is LoginNavigation.OnResetPasswordMailConfirmationSuccess -> {
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE)
addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordSuccessFragment::class.java) addFragmentToBackstack(R.id.loginFragmentContainer, LoginResetPasswordSuccessFragment::class.java)
} }
is LoginNavigation.OnResetPasswordMailConfirmationSuccessDone -> { is LoginNavigation.OnResetPasswordMailConfirmationSuccessDone -> {
// FIXME It goes too far (to the top fragment) // Go back to the login fragment
// Can be reproduce by entering email and then click back on the next screen supportFragmentManager.popBackStack(FRAGMENT_LOGIN_TAG, POP_BACK_STACK_EXCLUSIVE)
supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
} }
is LoginNavigation.OnSendEmailSuccess -> addFragmentToBackstack(R.id.loginFragmentContainer, is LoginNavigation.OnSendEmailSuccess -> addFragmentToBackstack(R.id.loginFragmentContainer,
LoginWaitForEmailFragment::class.java, LoginWaitForEmailFragment::class.java,
@ -158,10 +158,6 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable {
} }
} }
private fun onLoginFlowRetrieved() {
addFragmentToBackstack(R.id.loginFragmentContainer, LoginSignUpSignInSelectionFragment::class.java)
}
private fun updateWithState(loginViewState: LoginViewState) { private fun updateWithState(loginViewState: LoginViewState) {
if (loginViewState.isUserLogged()) { if (loginViewState.isUserLogged()) {
val intent = HomeActivity.newIntent(this) val intent = HomeActivity.newIntent(this)
@ -205,7 +201,7 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable {
withState(loginViewModel) { withState(loginViewModel) {
when (val loginMode = it.asyncHomeServerLoginFlowRequest.invoke()) { when (val loginMode = it.asyncHomeServerLoginFlowRequest.invoke()) {
null -> error("Developer error") null -> error("Developer error")
LoginMode.Password -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginFragment::class.java) LoginMode.Password -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginFragment::class.java, tag = FRAGMENT_LOGIN_TAG)
LoginMode.Sso -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginWebFragment::class.java) LoginMode.Sso -> addFragmentToBackstack(R.id.loginFragmentContainer, LoginWebFragment::class.java)
is LoginMode.Unsupported -> onLoginModeNotSupported(loginMode) is LoginMode.Unsupported -> onLoginModeNotSupported(loginMode)
} }
@ -284,6 +280,7 @@ class LoginActivity : VectorBaseActivity(), ToolbarConfigurable {
companion object { companion object {
private const val FRAGMENT_REGISTRATION_STAGE_TAG = "FRAGMENT_REGISTRATION_STAGE_TAG" private const val FRAGMENT_REGISTRATION_STAGE_TAG = "FRAGMENT_REGISTRATION_STAGE_TAG"
private const val FRAGMENT_LOGIN_TAG = "FRAGMENT_LOGIN_TAG"
private const val EXTRA_CONFIG = "EXTRA_CONFIG" private const val EXTRA_CONFIG = "EXTRA_CONFIG"