summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionError.kt12
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/RedeemVoucherDialogFragment.kt19
-rw-r--r--mullvad-jni/src/lib.rs28
4 files changed, 45 insertions, 27 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionError.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionError.kt
new file mode 100644
index 0000000000..1cf778400a
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionError.kt
@@ -0,0 +1,12 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+enum class VoucherSubmissionError : Parcelable {
+ InvalidVoucher,
+ VoucherAlreadyUsed,
+ RpcError,
+ OtherError,
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt
index 7403d66014..b78957d5c0 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt
@@ -5,17 +5,8 @@ import kotlinx.parcelize.Parcelize
sealed class VoucherSubmissionResult : Parcelable {
@Parcelize
- class Ok(val submission: VoucherSubmission) : VoucherSubmissionResult(), Parcelable
+ data class Ok(val submission: VoucherSubmission) : VoucherSubmissionResult()
@Parcelize
- object InvalidVoucher : VoucherSubmissionResult(), Parcelable
-
- @Parcelize
- object VoucherAlreadyUsed : VoucherSubmissionResult(), Parcelable
-
- @Parcelize
- object RpcError : VoucherSubmissionResult(), Parcelable
-
- @Parcelize
- object OtherError : VoucherSubmissionResult(), Parcelable
+ data class Error(val error: VoucherSubmissionError) : VoucherSubmissionResult()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/RedeemVoucherDialogFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/RedeemVoucherDialogFragment.kt
index 41cb29498b..a25ac6a1d8 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/RedeemVoucherDialogFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/RedeemVoucherDialogFragment.kt
@@ -14,6 +14,7 @@ import android.widget.EditText
import android.widget.TextView
import androidx.fragment.app.DialogFragment
import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.model.VoucherSubmissionError
import net.mullvad.mullvadvpn.model.VoucherSubmissionResult
import net.mullvad.mullvadvpn.ui.serviceconnection.AccountCache
import net.mullvad.mullvadvpn.ui.serviceconnection.VoucherRedeemer
@@ -126,9 +127,7 @@ class RedeemVoucherDialogFragment : DialogFragment() {
}
private fun updateRedeemButton() {
- redeemButton?.apply {
- setEnabled(voucherInputIsValid && voucherRedeemer != null)
- }
+ redeemButton?.setEnabled(voucherInputIsValid && voucherRedeemer != null)
}
private suspend fun submitVoucher() {
@@ -138,11 +137,7 @@ class RedeemVoucherDialogFragment : DialogFragment() {
when (result) {
is VoucherSubmissionResult.Ok -> handleAddedTime(result.submission.timeAdded)
- is VoucherSubmissionResult.InvalidVoucher -> showError(R.string.invalid_voucher)
- is VoucherSubmissionResult.VoucherAlreadyUsed -> {
- showError(R.string.voucher_already_used)
- }
- else -> showError(R.string.error_occurred)
+ is VoucherSubmissionResult.Error -> showError(result.error)
}
}
@@ -156,7 +151,13 @@ class RedeemVoucherDialogFragment : DialogFragment() {
}
}
- private fun showError(message: Int) {
+ private fun showError(error: VoucherSubmissionError) {
+ val message = when (error) {
+ VoucherSubmissionError.InvalidVoucher -> R.string.invalid_voucher
+ VoucherSubmissionError.VoucherAlreadyUsed -> R.string.voucher_already_used
+ else -> R.string.error_occurred
+ }
+
errorMessage.apply {
setText(message)
visibility = View.VISIBLE
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 35fe78dd01..32d89a84cf 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -94,6 +94,12 @@ impl From<Result<AccountData, daemon_interface::Error>> for GetAccountDataResult
#[jnix(package = "net.mullvad.mullvadvpn.model")]
pub enum VoucherSubmissionResult {
Ok(VoucherSubmission),
+ Error(VoucherSubmissionError),
+}
+
+#[derive(IntoJava)]
+#[jnix(package = "net.mullvad.mullvadvpn.model")]
+pub enum VoucherSubmissionError {
InvalidVoucher,
VoucherAlreadyUsed,
RpcError,
@@ -104,15 +110,23 @@ impl From<Result<VoucherSubmission, daemon_interface::Error>> for VoucherSubmiss
fn from(result: Result<VoucherSubmission, daemon_interface::Error>) -> Self {
match result {
Ok(submission) => VoucherSubmissionResult::Ok(submission),
- Err(daemon_interface::Error::RpcError(RestError::ApiError(_, code))) => {
+ Err(error) => VoucherSubmissionResult::Error(error.into()),
+ }
+ }
+}
+
+impl From<daemon_interface::Error> for VoucherSubmissionError {
+ fn from(error: daemon_interface::Error) -> Self {
+ match error {
+ daemon_interface::Error::RpcError(RestError::ApiError(_, code)) => {
match code.as_str() {
- mullvad_rpc::INVALID_VOUCHER => VoucherSubmissionResult::InvalidVoucher,
- mullvad_rpc::VOUCHER_USED => VoucherSubmissionResult::VoucherAlreadyUsed,
- _ => VoucherSubmissionResult::RpcError,
+ mullvad_rpc::INVALID_VOUCHER => VoucherSubmissionError::InvalidVoucher,
+ mullvad_rpc::VOUCHER_USED => VoucherSubmissionError::VoucherAlreadyUsed,
+ _ => VoucherSubmissionError::RpcError,
}
}
- Err(daemon_interface::Error::RpcError(_)) => VoucherSubmissionResult::RpcError,
- _ => VoucherSubmissionResult::OtherError,
+ daemon_interface::Error::RpcError(_) => VoucherSubmissionError::RpcError,
+ _ => VoucherSubmissionError::OtherError,
}
}
}
@@ -908,7 +922,7 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_submitV
VoucherSubmissionResult::from(raw_result)
} else {
- VoucherSubmissionResult::OtherError
+ VoucherSubmissionResult::Error(VoucherSubmissionError::OtherError)
};
result.into_java(&env).forget()