summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-08-28 20:07:43 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-09-02 13:15:27 +0000
commit4c5b179683f6ea02a4b4128cde1346c84f94e7ee (patch)
tree91970cbf3808694fbf1f86895126d362ddb9cede /android/src/main
parent2a6650b19c11d414ebbf4f4ef2c6f1b7b21d0c9a (diff)
downloadmullvadvpn-4c5b179683f6ea02a4b4128cde1346c84f94e7ee.tar.xz
mullvadvpn-4c5b179683f6ea02a4b4128cde1346c84f94e7ee.zip
Move configuring if button is enabled to widget
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountInputController.kt18
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt40
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)
+ }
+ }
}
}