diff options
| author | Albin <albin@mullvad.net> | 2022-09-05 14:59:27 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-09-06 07:12:55 +0200 |
| commit | 5888e2a2a7004f161c2df2c6afe41e621c1d3bee (patch) | |
| tree | 8374fac5dae525191b3c0f23a3bd01e34d221fe0 /android | |
| parent | 78a3c35ea467bca370b578ddb761af9a3848a683 (diff) | |
| download | mullvadvpn-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.kt | 15 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt | 4 |
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() |
