diff --git a/changelog.d/6737.bugfix b/changelog.d/6737.bugfix new file mode 100644 index 0000000000..6568e9ff31 --- /dev/null +++ b/changelog.d/6737.bugfix @@ -0,0 +1 @@ +Fixes onboarding login/account creation errors showing after navigation diff --git a/vector/src/main/java/im/vector/app/core/extensions/TextInputLayout.kt b/vector/src/main/java/im/vector/app/core/extensions/TextInputLayout.kt index 4739840f01..909c343a45 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/TextInputLayout.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/TextInputLayout.kt @@ -78,10 +78,14 @@ fun TextInputLayout.setOnImeDoneListener(action: () -> Unit) { } } -fun TextInputLayout.setOnFocusLostListener(action: () -> Unit) { +/** + * Set a listener for when the input has lost focus, such as moving to the another input field. + * The listener is only called when the view is in a resumed state to avoid triggers when exiting a screen. + */ +fun TextInputLayout.setOnFocusLostListener(lifecycleOwner: LifecycleOwner, action: () -> Unit) { editText().setOnFocusChangeListener { _, hasFocus -> when (hasFocus) { - false -> action() + false -> lifecycleOwner.lifecycleScope.launchWhenResumed { action() } else -> { // do nothing } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt index 58b1edddf8..c2d2346765 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt @@ -63,7 +63,9 @@ class FtueAuthCombinedLoginFragment @Inject constructor( views.loginRoot.realignPercentagesToParent() views.editServerButton.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection)) } views.loginPasswordInput.setOnImeDoneListener { submit() } - views.loginInput.setOnFocusLostListener { viewModel.handle(OnboardingAction.UserNameEnteredAction.Login(views.loginInput.content())) } + views.loginInput.setOnFocusLostListener(viewLifecycleOwner) { + viewModel.handle(OnboardingAction.UserNameEnteredAction.Login(views.loginInput.content())) + } views.loginForgotPassword.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnForgetPasswordClicked)) } } 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 c69706a17b..8340fb903a 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 @@ -86,7 +86,7 @@ class FtueAuthCombinedRegisterFragment @Inject constructor() : AbstractSSOFtueAu views.createAccountEntryFooter.text = "" } - views.createAccountInput.setOnFocusLostListener { + views.createAccountInput.setOnFocusLostListener(viewLifecycleOwner) { viewModel.handle(OnboardingAction.UserNameEnteredAction.Registration(views.createAccountInput.content())) } } diff --git a/vector/src/main/res/layout/fragment_ftue_combined_login.xml b/vector/src/main/res/layout/fragment_ftue_combined_login.xml index 9533ab29fc..12943b4dc0 100644 --- a/vector/src/main/res/layout/fragment_ftue_combined_login.xml +++ b/vector/src/main/res/layout/fragment_ftue_combined_login.xml @@ -147,6 +147,7 @@ app:layout_constraintTop_toBottomOf="@id/serverSelectionSpacing">