Login screens: fix issue with reset password fragment navigation
This commit is contained in:
parent
37166caea2
commit
d2b516bdc2
@ -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
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user