summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-09-05 14:59:27 +0200
committerAlbin <albin@mullvad.net>2022-09-06 07:12:55 +0200
commit5888e2a2a7004f161c2df2c6afe41e621c1d3bee (patch)
tree8374fac5dae525191b3c0f23a3bd01e34d221fe0 /android
parent78a3c35ea467bca370b578ddb761af9a3848a683 (diff)
downloadmullvadvpn-5888e2a2a7004f161c2df2c6afe41e621c1d3bee.tar.xz
mullvadvpn-5888e2a2a7004f161c2df2c6afe41e621c1d3bee.zip
Reduce flickering on login failure
The flickering behavior is reduced by adding a short delay for all states except the loading state.
Diffstat (limited to 'android')
-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/viewmodel/LoginViewModel.kt4
2 files changed, 18 insertions, 1 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/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()