summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-08-21 10:30:22 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-08-21 11:05:02 +0200
commitd1e33486cf2b4c027f1a87a1700891c7cd6bcbab (patch)
treee8eb7b98bb54a0b8ce20e3b958f40c3eae2ad55d /android/app
parent5d38db0855f8e48cf43795b73488121dd4810b1b (diff)
downloadmullvadvpn-d1e33486cf2b4c027f1a87a1700891c7cd6bcbab.tar.xz
mullvadvpn-d1e33486cf2b4c027f1a87a1700891c7cd6bcbab.zip
Add error for voucher code looks like an account number
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt21
2 files changed, 31 insertions, 3 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
index 093dc7ce97..6d3d134e1d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
@@ -274,10 +274,23 @@ private fun EnterVoucherBody(
)
}
}
+ if (
+ state.voucherState is VoucherDialogState.Error &&
+ state.voucherState.error is RedeemVoucherError.EnteredAccountNumber
+ ) {
+ Text(
+ modifier = Modifier.padding(top = Dimens.smallPadding),
+ text = stringResource(id = R.string.voucher_is_account_number),
+ color = MaterialTheme.colorScheme.onPrimary,
+ style = MaterialTheme.typography.bodySmall
+ )
+ }
}
private fun RedeemVoucherError.message(): Int =
when (this) {
+ RedeemVoucherError.TooShortVoucher,
+ RedeemVoucherError.EnteredAccountNumber,
RedeemVoucherError.InvalidVoucher -> R.string.invalid_voucher
RedeemVoucherError.VoucherAlreadyUsed -> R.string.voucher_already_used
RedeemVoucherError.RpcError,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt
index 3d67b42bd1..857953f28b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import arrow.core.raise.either
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
@@ -11,7 +12,9 @@ import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.compose.state.VoucherDialogState
import net.mullvad.mullvadvpn.compose.state.VoucherDialogUiState
import net.mullvad.mullvadvpn.constant.VOUCHER_LENGTH
+import net.mullvad.mullvadvpn.lib.model.ParseVoucherCodeError
import net.mullvad.mullvadvpn.lib.model.RedeemVoucherError
+import net.mullvad.mullvadvpn.lib.model.VoucherCode
import net.mullvad.mullvadvpn.lib.shared.VoucherRepository
import net.mullvad.mullvadvpn.util.VoucherRegexHelper
@@ -26,11 +29,23 @@ class VoucherDialogViewModel(private val voucherRepository: VoucherRepository) :
}
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), VoucherDialogUiState.INITIAL)
- fun onRedeem(voucherCode: String) {
+ fun onRedeem(voucherInput: String) {
vmState.update { VoucherDialogState.Verifying }
viewModelScope.launch {
- voucherRepository
- .submitVoucher(voucherCode)
+ either {
+ val voucherCode =
+ VoucherCode.fromString(voucherInput)
+ .mapLeft {
+ when (it) {
+ is ParseVoucherCodeError.AllDigit ->
+ RedeemVoucherError.EnteredAccountNumber
+ is ParseVoucherCodeError.TooShort ->
+ RedeemVoucherError.TooShortVoucher
+ }
+ }
+ .bind()
+ voucherRepository.submitVoucher(voucherCode).bind()
+ }
.fold(
{ error -> setError(error) },
{ success -> handleAddedTime(success.timeAdded) }