summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-04-08 11:29:37 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-04-16 23:14:33 +0200
commit85ba2643fc3350570fe19e5d3d1180b3301105ef (patch)
tree150474a6cd975e1a8157428dfb506f57ca11a003 /android/app/src
parentbea01509a1b7221d3af6324b4bd9fc7243d90d1f (diff)
downloadmullvadvpn-85ba2643fc3350570fe19e5d3d1180b3301105ef.tar.xz
mullvadvpn-85ba2643fc3350570fe19e5d3d1180b3301105ef.zip
Show loading states in purchasing flow an extra amount of time
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt19
1 files changed, 18 insertions, 1 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt
index 5a50e80401..82efd5d722 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt
@@ -1,9 +1,11 @@
package net.mullvad.mullvadvpn.usecase
import android.app.Activity
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.transform
import net.mullvad.mullvadvpn.constant.VERIFICATION_BACK_OFF_FACTOR
import net.mullvad.mullvadvpn.constant.VERIFICATION_INITIAL_BACK_OFF_MILLISECONDS
import net.mullvad.mullvadvpn.constant.VERIFICATION_MAX_ATTEMPTS
@@ -35,7 +37,15 @@ class PlayPaymentUseCase(private val paymentRepository: PaymentRepository) : Pay
override val purchaseResult = _purchaseResult.asStateFlow()
override suspend fun purchaseProduct(productId: ProductId, activityProvider: () -> Activity) {
- paymentRepository.purchaseProduct(productId, activityProvider).collect(_purchaseResult)
+ paymentRepository
+ .purchaseProduct(productId, activityProvider)
+ .transform {
+ emit(it)
+ if (it.shouldDelayLoading()) {
+ delay(EXTRA_LOADING_DELAY_MS)
+ }
+ }
+ .collect(_purchaseResult)
}
override suspend fun queryPaymentAvailability() {
@@ -64,6 +74,13 @@ class PlayPaymentUseCase(private val paymentRepository: PaymentRepository) : Pay
}
}
}
+
+ private fun PurchaseResult?.shouldDelayLoading() =
+ this is PurchaseResult.FetchingProducts || this is PurchaseResult.VerificationStarted
+
+ companion object {
+ const val EXTRA_LOADING_DELAY_MS = 300L
+ }
}
class EmptyPaymentUseCase : PaymentUseCase {