summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-09-06 09:33:17 +0200
committerAlbin <albin@mullvad.net>2022-09-06 09:33:17 +0200
commitc0b5290d5859b1737c2995571e902b60434305ee (patch)
treef53ab6b778bc1163895fbe960d4e3ce625d87611 /android/app/src
parentfed8b43daeb56162ee19d34b23b792f9b2c8d9a5 (diff)
parent60bc8ed073476117bf7b417ea878dca7aa88c4d1 (diff)
downloadmullvadvpn-c0b5290d5859b1737c2995571e902b60434305ee.tar.xz
mullvadvpn-c0b5290d5859b1737c2995571e902b60434305ee.zip
Merge branch 'fix-disabled-login-button-on-login-failure'
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt15
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt4
3 files changed, 19 insertions, 2 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
index 07e7748935..c04f41ca1c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
@@ -12,7 +12,9 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.ui.extension.requireMainActivity
@@ -127,7 +129,14 @@ class LoginFragment : BaseFragment(), NavigationBarPainter {
}
private fun CoroutineScope.launchUpdateUiOnViewModelStateChanges() = launch {
- loginViewModel.uiState.collect { uiState -> updateUi(uiState) }
+ loginViewModel.uiState
+ .onEach {
+ // Adds a short delay to prevent loading spinner flickering.
+ if (it.isLoading().not()) {
+ delay(MINIMUM_LOADING_SPINNER_TIME_MILLIS)
+ }
+ }
+ .collect { uiState -> updateUi(uiState) }
}
private fun updateUi(uiState: LoginViewModel.LoginUiState) {
@@ -269,4 +278,8 @@ class LoginFragment : BaseFragment(), NavigationBarPainter {
val rectangle = Rect(0, 0, view.width, view.height)
scrollArea.requestChildRectangleOnScreen(view, rectangle, false)
}
+
+ companion object {
+ private const val MINIMUM_LOADING_SPINNER_TIME_MILLIS = 200L
+ }
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
index 38b42ca351..ea4ce8a211 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
@@ -144,7 +144,7 @@ class AccountInput : LinearLayout {
private fun failureState() {
button.visibility = View.VISIBLE
- setButtonEnabled(false)
+ setButtonEnabled(true)
input.apply {
setTextColor(errorTextColor)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
index e73d42438a..cc653b0c73 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
@@ -39,6 +39,10 @@ class LoginViewModel(
data class TooManyDevicesError(val accountToken: String) : LoginUiState()
object TooManyDevicesMissingListError : LoginUiState()
data class OtherError(val errorMessage: String) : LoginUiState()
+
+ fun isLoading(): Boolean {
+ return this is Loading
+ }
}
fun clearAccountHistory() = accountRepository.clearAccountHistory()