diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt
index 6cc2d5532d..2f88606fb7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/InAppPaymentsRepository.kt
@@ -523,7 +523,9 @@ object InAppPaymentsRepository {
)
}
InAppPaymentTable.State.PENDING -> {
- if (inAppPayment.data.redemption?.stage == InAppPaymentData.RedemptionState.Stage.REDEMPTION_STARTED) {
+ if (inAppPayment.data.redemption?.keepAlive == true) {
+ DonationRedemptionJobStatus.PendingKeepAlive
+ } else if (inAppPayment.data.redemption?.stage == InAppPaymentData.RedemptionState.Stage.REDEMPTION_STARTED) {
DonationRedemptionJobStatus.PendingReceiptRedemption
} else {
DonationRedemptionJobStatus.PendingReceiptRequest
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalViewModel.kt
index 2c96a69f3d..a0dc0e5023 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalViewModel.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/donate/DonateToSignalViewModel.kt
@@ -240,6 +240,8 @@ class DonateToSignalViewModel(
when (it) {
is DonationRedemptionJobStatus.PendingExternalVerification -> Optional.ofNullable(it.pendingOneTimeDonation)
+ DonationRedemptionJobStatus.PendingKeepAlive -> error("Invalid state for one time donation")
+
DonationRedemptionJobStatus.PendingReceiptRedemption,
DonationRedemptionJobStatus.PendingReceiptRequest,
DonationRedemptionJobStatus.FailedSubscription,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ActiveSubscriptionPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ActiveSubscriptionPreference.kt
index 8d82fddf07..9b8f8d2039 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ActiveSubscriptionPreference.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ActiveSubscriptionPreference.kt
@@ -82,6 +82,7 @@ object ActiveSubscriptionPreference {
ManageDonationsState.RedemptionState.IS_PENDING_BANK_TRANSFER -> presentPendingBankTransferState(model)
ManageDonationsState.RedemptionState.IN_PROGRESS -> presentInProgressState()
ManageDonationsState.RedemptionState.FAILED -> presentFailureState(model)
+ ManageDonationsState.RedemptionState.SUBSCRIPTION_REFRESH -> presentRefreshState()
}
}
@@ -96,6 +97,11 @@ object ActiveSubscriptionPreference {
progress.visible = false
}
+ private fun presentRefreshState() {
+ expiry.text = context.getString(R.string.MySupportPreference__checking_subscription)
+ progress.visible = true
+ }
+
private fun presentPendingBankTransferState(model: Model) {
expiry.text = context.getString(R.string.MySupportPreference__payment_pending)
progress.visible = true
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/DonationRedemptionJobStatus.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/DonationRedemptionJobStatus.kt
index d4ac1683e2..f5eb568fb1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/DonationRedemptionJobStatus.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/DonationRedemptionJobStatus.kt
@@ -14,7 +14,7 @@ sealed class DonationRedemptionJobStatus {
/**
* No pending/running jobs for a donation type.
*/
- object None : DonationRedemptionJobStatus()
+ data object None : DonationRedemptionJobStatus()
/**
* Donation is pending external user verification (e.g., iDEAL).
@@ -31,26 +31,34 @@ sealed class DonationRedemptionJobStatus {
*
* For one-time donations, pending donation data available via the store.
*/
- object PendingReceiptRequest : DonationRedemptionJobStatus()
+ data object PendingReceiptRequest : DonationRedemptionJobStatus()
/**
* Donation is at the receipt redemption status.
*
* For one-time donations, pending donation data available via the store.
*/
- object PendingReceiptRedemption : DonationRedemptionJobStatus()
+ data object PendingReceiptRedemption : DonationRedemptionJobStatus()
+
+ /**
+ * Donation is being refreshed during a keep-alive.
+ *
+ * This is an invalid state for one-time donations.
+ */
+ data object PendingKeepAlive : DonationRedemptionJobStatus()
/**
* Representation of a failed subscription job chain derived from no pending/running jobs and
* a failure state in the store.
*/
- object FailedSubscription : DonationRedemptionJobStatus()
+ data object FailedSubscription : DonationRedemptionJobStatus()
fun isInProgress(): Boolean {
return when (this) {
is PendingExternalVerification,
PendingReceiptRedemption,
- PendingReceiptRequest -> true
+ PendingReceiptRequest,
+ PendingKeepAlive -> true
FailedSubscription,
None -> false
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt
index d212f09c37..b7127e8fc5 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt
@@ -36,15 +36,16 @@ data class ManageDonationsState(
}
sealed class TransactionState {
- object Init : TransactionState()
- object NetworkFailure : TransactionState()
- object InTransaction : TransactionState()
+ data object Init : TransactionState()
+ data object NetworkFailure : TransactionState()
+ data object InTransaction : TransactionState()
class NotInTransaction(val activeSubscription: ActiveSubscription) : TransactionState()
}
enum class RedemptionState {
NONE,
IN_PROGRESS,
+ SUBSCRIPTION_REFRESH,
IS_PENDING_BANK_TRANSFER,
FAILED
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt
index 0bcd7657f8..262c03ea24 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt
@@ -145,6 +145,7 @@ class ManageDonationsViewModel : ViewModel() {
return when (status) {
DonationRedemptionJobStatus.FailedSubscription -> ManageDonationsState.RedemptionState.FAILED
DonationRedemptionJobStatus.None -> ManageDonationsState.RedemptionState.NONE
+ DonationRedemptionJobStatus.PendingKeepAlive -> ManageDonationsState.RedemptionState.SUBSCRIPTION_REFRESH
is DonationRedemptionJobStatus.PendingExternalVerification,
DonationRedemptionJobStatus.PendingReceiptRedemption,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 91bc4560b3..1891081116 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5828,6 +5828,8 @@
Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete.
Learn more
+
+ Checking subscription…
Update Signal