From f40cf13048ee4bb1b00de13ee0d1fb09437917ff Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 4 Aug 2022 14:25:05 +0100 Subject: [PATCH] fixing login/account creation errors showing when navigating to another screen - was caused by the lost focus callback being triggered by onPause, fixed by only triggering if the current view is in the resumed state --- .../im/vector/app/core/extensions/TextInputLayout.kt | 9 +++++++-- .../onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt | 4 +++- .../ftueauth/FtueAuthCombinedRegisterFragment.kt | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) 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..f1b5f5ce09 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,15 @@ 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) { + lifecycleOwner.lifecycle 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())) } }