diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-11-16 00:57:13 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-11-16 09:34:26 +0100 |
| commit | 2a0c1b1e84d28fa8f3db3dda0c115059c678eb35 (patch) | |
| tree | 07fd826f95ec50fb11ef6ae28fdf411f09b34826 /android | |
| parent | 81beb5e1d5aa729d9a0985c010c446ac87f54fe8 (diff) | |
| download | mullvadvpn-2a0c1b1e84d28fa8f3db3dda0c115059c678eb35.tar.xz mullvadvpn-2a0c1b1e84d28fa8f3db3dda0c115059c678eb35.zip | |
Add PaymentUseCase
Diffstat (limited to 'android')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt | 74 |
1 files changed, 74 insertions, 0 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 new file mode 100644 index 0000000000..151e2caec7 --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/PaymentUseCase.kt @@ -0,0 +1,74 @@ +package net.mullvad.mullvadvpn.usecase + +import android.app.Activity +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import net.mullvad.mullvadvpn.lib.payment.PaymentRepository +import net.mullvad.mullvadvpn.lib.payment.model.PaymentAvailability +import net.mullvad.mullvadvpn.lib.payment.model.ProductId +import net.mullvad.mullvadvpn.lib.payment.model.PurchaseResult +import net.mullvad.mullvadvpn.lib.payment.model.VerificationResult + +interface PaymentUseCase { + val paymentAvailability: Flow<PaymentAvailability?> + val purchaseResult: Flow<PurchaseResult?> + + suspend fun purchaseProduct(productId: ProductId, activityProvider: () -> Activity) + + suspend fun queryPaymentAvailability() + + suspend fun resetPurchaseResult() + + suspend fun verifyPurchases() +} + +class PlayPaymentUseCase(private val paymentRepository: PaymentRepository) : PaymentUseCase { + private val _paymentAvailability = MutableStateFlow<PaymentAvailability?>(null) + private val _purchaseResult = MutableStateFlow<PurchaseResult?>(null) + + override val paymentAvailability = _paymentAvailability.asStateFlow() + override val purchaseResult = _purchaseResult.asStateFlow() + + override suspend fun purchaseProduct(productId: ProductId, activityProvider: () -> Activity) { + paymentRepository.purchaseProduct(productId, activityProvider).collect(_purchaseResult) + } + + override suspend fun queryPaymentAvailability() { + paymentRepository.queryPaymentAvailability().collect(_paymentAvailability) + } + + override suspend fun resetPurchaseResult() { + _purchaseResult.emit(null) + } + + override suspend fun verifyPurchases() { + paymentRepository.verifyPurchases().collect { + if (it == VerificationResult.Success) { + // Update the payment availability after a successful verification. + queryPaymentAvailability() + } + } + } +} + +class EmptyPaymentUseCase : PaymentUseCase { + override val paymentAvailability = MutableStateFlow(PaymentAvailability.ProductsUnavailable) + override val purchaseResult = MutableStateFlow<PurchaseResult?>(null) + + override suspend fun purchaseProduct(productId: ProductId, activityProvider: () -> Activity) { + // No op + } + + override suspend fun queryPaymentAvailability() { + // No op + } + + override suspend fun resetPurchaseResult() { + // No op + } + + override suspend fun verifyPurchases() { + // No op + } +} |
