diff options
| author | Albin <albin@mullvad.net> | 2023-11-17 16:31:31 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-11-17 16:31:31 +0100 |
| commit | d5fe71a19e58d340c01a713d99393a1389724c4a (patch) | |
| tree | 1feb53a19eac4183dd9292e67bc4f574a84fec01 /android | |
| parent | 1cd0cbcffad0f62da6662ffb3011fa207b11d376 (diff) | |
| parent | 1a4e58948f4364d39439bd116946b7ae6bd68a13 (diff) | |
| download | mullvadvpn-d5fe71a19e58d340c01a713d99393a1389724c4a.tar.xz mullvadvpn-d5fe71a19e58d340c01a713d99393a1389724c4a.zip | |
Merge branch 'missing-timeout-for-login-attempts-when-offline-droid-511'
Diffstat (limited to 'android')
3 files changed, 12 insertions, 1 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/constant/LoginConstant.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/constant/LoginConstant.kt new file mode 100644 index 0000000000..af8f89ce98 --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/constant/LoginConstant.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.constant + +const val LOGIN_TIMEOUT_MILLIS = 10000L // 10 seconds diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt index e782f6f439..a754b5a6c2 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt @@ -2,12 +2,14 @@ package net.mullvad.mullvadvpn.util import android.view.animation.Animation import kotlin.coroutines.EmptyCoroutineContext +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.take +import kotlinx.coroutines.withTimeoutOrNull import net.mullvad.mullvadvpn.lib.common.util.safeOffer import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionState import net.mullvad.talpid.util.EventNotifier @@ -124,3 +126,6 @@ inline fun <T1, T2, T3, T4, T5, T6, T7, T8, R> combine( ) } } + +suspend inline fun <T> Deferred<T>.awaitWithTimeoutOrNull(timeout: Long) = + withTimeoutOrNull(timeout) { await() } 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 b31478ce1a..87174f2063 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 @@ -19,12 +19,14 @@ import net.mullvad.mullvadvpn.compose.state.LoginError import net.mullvad.mullvadvpn.compose.state.LoginState import net.mullvad.mullvadvpn.compose.state.LoginState.* import net.mullvad.mullvadvpn.compose.state.LoginUiState +import net.mullvad.mullvadvpn.constant.LOGIN_TIMEOUT_MILLIS import net.mullvad.mullvadvpn.model.AccountCreationResult import net.mullvad.mullvadvpn.model.AccountToken import net.mullvad.mullvadvpn.model.LoginResult import net.mullvad.mullvadvpn.repository.AccountRepository import net.mullvad.mullvadvpn.repository.DeviceRepository import net.mullvad.mullvadvpn.usecase.NewDeviceNotificationUseCase +import net.mullvad.mullvadvpn.util.awaitWithTimeoutOrNull private const val MINIMUM_LOADING_SPINNER_TIME_MILLIS = 500L @@ -81,7 +83,8 @@ class LoginViewModel( delay(MINIMUM_LOADING_SPINNER_TIME_MILLIS) val uiState = - when (val result = loginDeferred.await()) { + // If timed out will go to the else branch + when (val result = loginDeferred.awaitWithTimeoutOrNull(LOGIN_TIMEOUT_MILLIS)) { LoginResult.Ok -> { launch { delay(1000) |
