diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-08-28 20:07:43 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-09-02 13:15:27 +0000 |
| commit | 4c5b179683f6ea02a4b4128cde1346c84f94e7ee (patch) | |
| tree | 91970cbf3808694fbf1f86895126d362ddb9cede /android | |
| parent | 2a6650b19c11d414ebbf4f4ef2c6f1b7b21d0c9a (diff) | |
| download | mullvadvpn-4c5b179683f6ea02a4b4128cde1346c84f94e7ee.tar.xz mullvadvpn-4c5b179683f6ea02a4b4128cde1346c84f94e7ee.zip | |
Move configuring if button is enabled to widget
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt | 18 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt | 40 |
2 files changed, 40 insertions, 18 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt index d80e6aae07..d115719c92 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt @@ -76,8 +76,6 @@ class AccountInputController(val parentView: View, context: Context) { set(value) { newInput.onLogin = value } init { - setButtonEnabled(false) - input.apply { addTextChangedListener(InputWatcher()) setOnTouchListener( @@ -95,7 +93,6 @@ class AccountInputController(val parentView: View, context: Context) { } private fun initialState() { - setButtonEnabled(input.text.length >= MIN_ACCOUNT_TOKEN_LENGTH) button.visibility = View.VISIBLE input.apply { @@ -106,7 +103,6 @@ class AccountInputController(val parentView: View, context: Context) { } private fun loggingInState() { - setButtonEnabled(false) button.visibility = View.GONE input.apply { @@ -119,14 +115,12 @@ class AccountInputController(val parentView: View, context: Context) { } private fun successState() { - setButtonEnabled(false) button.visibility = View.GONE input.visibility = View.GONE container.visibility = View.INVISIBLE } private fun failureState() { - setButtonEnabled(false) button.visibility = View.VISIBLE input.apply { @@ -139,16 +133,6 @@ class AccountInputController(val parentView: View, context: Context) { usingErrorColor = true } - private fun setButtonEnabled(enabled: Boolean) { - button.apply { - if (enabled != isEnabled()) { - setEnabled(enabled) - setClickable(enabled) - setFocusable(enabled) - } - } - } - private fun updateAccountHistory() { accountHistory?.let { history -> accountHistoryList.apply { @@ -209,7 +193,7 @@ class AccountInputController(val parentView: View, context: Context) { override fun afterTextChanged(text: Editable) { inputHasFocus = true removeFormattingSpans(text) - setButtonEnabled(text.length >= MIN_ACCOUNT_TOKEN_LENGTH) + newInput.setButtonEnabled(text.length >= MIN_ACCOUNT_TOKEN_LENGTH) leaveErrorState() } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt index 31edfd1704..943eab99fd 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt @@ -6,9 +6,12 @@ import android.view.LayoutInflater import android.widget.ImageButton import android.widget.LinearLayout import android.widget.TextView +import kotlin.properties.Delegates.observable import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.ui.LoginState +const val MIN_ACCOUNT_TOKEN_LENGTH = 10 + class AccountInput : LinearLayout { private val container = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE).let { service -> @@ -25,7 +28,14 @@ class AccountInput : LinearLayout { } } - var loginState = LoginState.Initial + var loginState by observable(LoginState.Initial) { _, _, state -> + when (state) { + LoginState.Initial -> initialState() + LoginState.InProgress -> loggingInState() + LoginState.Success -> successState() + LoginState.Failure -> failureState() + } + } var onLogin: ((String) -> Unit)? = null @@ -46,5 +56,33 @@ class AccountInput : LinearLayout { init { orientation = HORIZONTAL + + setButtonEnabled(false) + } + + private fun initialState() { + setButtonEnabled(input.text.length >= MIN_ACCOUNT_TOKEN_LENGTH) + } + + private fun loggingInState() { + setButtonEnabled(false) + } + + private fun successState() { + setButtonEnabled(false) + } + + private fun failureState() { + setButtonEnabled(false) + } + + /*private*/ fun setButtonEnabled(enabled: Boolean) { + button.apply { + if (enabled != isEnabled()) { + setEnabled(enabled) + setClickable(enabled) + setFocusable(enabled) + } + } } } |
