diff options
| author | Albin <albin@mullvad.net> | 2022-09-06 09:33:17 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-09-06 09:33:17 +0200 |
| commit | c0b5290d5859b1737c2995571e902b60434305ee (patch) | |
| tree | f53ab6b778bc1163895fbe960d4e3ce625d87611 /android/app/src | |
| parent | fed8b43daeb56162ee19d34b23b792f9b2c8d9a5 (diff) | |
| parent | 60bc8ed073476117bf7b417ea878dca7aa88c4d1 (diff) | |
| download | mullvadvpn-c0b5290d5859b1737c2995571e902b60434305ee.tar.xz mullvadvpn-c0b5290d5859b1737c2995571e902b60434305ee.zip | |
Merge branch 'fix-disabled-login-button-on-login-failure'
Diffstat (limited to 'android/app/src')
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() |
