diff options
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt index 3cc2935c21..9052a2e63e 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt @@ -17,12 +17,17 @@ import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.ui.ListItemDividerDecoration import net.mullvad.mullvadvpn.ui.LoginState import net.mullvad.mullvadvpn.ui.widget.AccountLoginBorder.BorderState +import net.mullvad.mullvadvpn.util.Debouncer class AccountLogin : RelativeLayout { companion object { private val MAX_ACCOUNT_HISTORY_ENTRIES = 3 } + private val focusDebouncer = Debouncer(false).apply { + listener = { hasFocus -> focused = hasFocus } + } + private val container = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE).let { service -> val inflater = service as LayoutInflater @@ -36,6 +41,7 @@ class AccountLogin : RelativeLayout { private val historyAdapter = AccountHistoryAdapter().apply { onSelectEntry = { account -> input.loginWith(account) } + onChildFocusChanged = { _, hasFocus -> focusDebouncer.rawValue = hasFocus } } private val dividerHeight = resources.getDimensionPixelSize(R.dimen.account_history_divider) @@ -70,7 +76,7 @@ class AccountLogin : RelativeLayout { } } - private var inputHasFocus by observable(false) { _, _, hasFocus -> + private var focused by observable(false) { _, _, hasFocus -> updateBorder() shouldShowAccountHistory = hasFocus @@ -137,7 +143,7 @@ class AccountLogin : RelativeLayout { input.apply { onFocusChanged.subscribe(this) { hasFocus -> - inputHasFocus = hasFocus + focusDebouncer.rawValue = hasFocus } onTextChanged.subscribe(this) { _ -> @@ -173,7 +179,7 @@ class AccountLogin : RelativeLayout { private fun updateBorder() { if (state == LoginState.Failure) { border.borderState = BorderState.ERROR - } else if (inputHasFocus) { + } else if (focused) { border.borderState = BorderState.FOCUSED } else { border.borderState = BorderState.UNFOCUSED |
