summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-19 17:04:24 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-24 23:55:50 +0200
commit7f04e9a8e5775967e7aed950cf3bdfb8e2f37b3f (patch)
tree565e616737effcd4437a1f68dfd679c7f366f85b
parent6ffbd8725beaeffcb143c158636391681269aabf (diff)
downloadmullvadvpn-7f04e9a8e5775967e7aed950cf3bdfb8e2f37b3f.tar.xz
mullvadvpn-7f04e9a8e5775967e7aed950cf3bdfb8e2f37b3f.zip
Add delay at least wrapper and apply to test api method
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/Delay.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ApiAccessMethodDetailsViewModel.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/EditApiAccessMethodViewModel.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt14
4 files changed, 28 insertions, 11 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/Delay.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/Delay.kt
new file mode 100644
index 0000000000..3449ee23bf
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/Delay.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.util
+
+import kotlinx.coroutines.async
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.delay
+
+suspend fun <T> delayAtLeast(duration: Long, f: suspend () -> T): T = coroutineScope {
+ val result = async { f() }
+ delay(timeMillis = duration)
+ result.await()
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ApiAccessMethodDetailsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ApiAccessMethodDetailsViewModel.kt
index a6ba01e81c..fc52cb7eee 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ApiAccessMethodDetailsViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ApiAccessMethodDetailsViewModel.kt
@@ -14,10 +14,12 @@ import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.compose.state.ApiAccessMethodDetailsUiState
+import net.mullvad.mullvadvpn.constant.MINIMUM_LOADING_TIME_MILLIS
import net.mullvad.mullvadvpn.lib.model.ApiAccessMethod
import net.mullvad.mullvadvpn.lib.model.ApiAccessMethodId
import net.mullvad.mullvadvpn.lib.model.TestApiAccessMethodError
import net.mullvad.mullvadvpn.repository.ApiAccessRepository
+import net.mullvad.mullvadvpn.util.delayAtLeast
class ApiAccessMethodDetailsViewModel(
private val apiAccessMethodId: ApiAccessMethodId,
@@ -107,8 +109,9 @@ class ApiAccessMethodDetailsViewModel(
private suspend fun testMethodById(): Either<TestApiAccessMethodError, Unit> {
isTestingApiAccessMethodState.value = true
- return apiAccessRepository
- .testApiAccessMethodById(apiAccessMethodId)
+ return delayAtLeast(MINIMUM_LOADING_TIME_MILLIS) {
+ apiAccessRepository.testApiAccessMethodById(apiAccessMethodId)
+ }
.onLeft { isTestingApiAccessMethodState.value = false }
.onRight { isTestingApiAccessMethodState.value = false }
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/EditApiAccessMethodViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/EditApiAccessMethodViewModel.kt
index 87316e90e2..043c503792 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/EditApiAccessMethodViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/EditApiAccessMethodViewModel.kt
@@ -23,6 +23,7 @@ import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.compose.state.ApiAccessMethodTypes
import net.mullvad.mullvadvpn.compose.state.EditApiAccessFormData
import net.mullvad.mullvadvpn.compose.state.EditApiAccessMethodUiState
+import net.mullvad.mullvadvpn.constant.MINIMUM_LOADING_TIME_MILLIS
import net.mullvad.mullvadvpn.lib.model.ApiAccessMethod
import net.mullvad.mullvadvpn.lib.model.ApiAccessMethodId
import net.mullvad.mullvadvpn.lib.model.ApiAccessMethodName
@@ -32,6 +33,7 @@ import net.mullvad.mullvadvpn.lib.model.ParsePortError
import net.mullvad.mullvadvpn.lib.model.Port
import net.mullvad.mullvadvpn.lib.model.SocksAuth
import net.mullvad.mullvadvpn.repository.ApiAccessRepository
+import net.mullvad.mullvadvpn.util.delayAtLeast
import org.apache.commons.validator.routines.InetAddressValidator
class EditApiAccessMethodViewModel(
@@ -104,7 +106,10 @@ class EditApiAccessMethodViewModel(
{ errors -> formData.update { it.updateWithErrors(errors) } },
{ customProxy ->
isTestingApiAccessMethod.value = true
- val result = apiAccessRepository.testCustomApiAccessMethod(customProxy)
+ val result =
+ delayAtLeast(MINIMUM_LOADING_TIME_MILLIS) {
+ apiAccessRepository.testCustomApiAccessMethod(customProxy)
+ }
_uiSideEffect.send(
EditApiAccessSideEffect.TestApiAccessMethodResult(result.isRight())
)
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 e35baa571e..30bea42cfe 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
@@ -29,6 +29,7 @@ import net.mullvad.mullvadvpn.lib.model.LoginAccountError
import net.mullvad.mullvadvpn.lib.shared.AccountRepository
import net.mullvad.mullvadvpn.repository.NewDeviceRepository
import net.mullvad.mullvadvpn.usecase.InternetAvailableUseCase
+import net.mullvad.mullvadvpn.util.delayAtLeast
import net.mullvad.mullvadvpn.util.getOrDefault
private const val MINIMUM_LOADING_SPINNER_TIME_MILLIS = 500L
@@ -101,15 +102,12 @@ class LoginViewModel(
}
_loginState.value = Loading.LoggingIn
viewModelScope.launch(dispatcher) {
- // Ensure we always take at least MINIMUM_LOADING_SPINNER_TIME_MILLIS to show the
- // loading indicator
- val result = async { accountRepository.login(AccountNumber(accountNumber)) }
-
- delay(MINIMUM_LOADING_SPINNER_TIME_MILLIS)
-
val uiState =
- result
- .await()
+ // Ensure we always take at least MINIMUM_LOADING_SPINNER_TIME_MILLIS to show the
+ // loading indicator
+ delayAtLeast(MINIMUM_LOADING_SPINNER_TIME_MILLIS) {
+ accountRepository.login(AccountNumber(accountNumber))
+ }
.fold(
{ it.toUiState() },
{