Allow users to cancel during pending donation.

This commit is contained in:
Alex Hart
2024-10-02 15:23:15 -03:00
committed by Greyson Parrelli
parent 66e6b5506e
commit 91115fa0bd
5 changed files with 54 additions and 5 deletions

View File

@@ -277,7 +277,7 @@ class DonateToSignalFragment :
space(20.dp)
if (state.inAppPaymentType == InAppPaymentType.RECURRING_DONATION && state.monthlyDonationState.isSubscriptionActive) {
if (state.inAppPaymentType == InAppPaymentType.RECURRING_DONATION && (state.monthlyDonationState.isSubscriptionActive || state.monthlyDonationState.isSubscriptionInProgress)) {
primaryButton(
text = DSLSettingsText.from(R.string.SubscribeFragment__update_subscription),
isEnabled = state.canUpdate,

View File

@@ -82,7 +82,7 @@ data class DonateToSignalState(
val canUpdate: Boolean
get() = when (inAppPaymentType) {
InAppPaymentType.ONE_TIME_DONATION -> false
InAppPaymentType.RECURRING_DONATION -> areFieldsEnabled && monthlyDonationState.isSelectionValid
InAppPaymentType.RECURRING_DONATION -> areFieldsEnabled && monthlyDonationState.isSelectionValid && monthlyDonationState.isSubscriptionActive && !monthlyDonationState.transactionState.isInProgress
else -> error("This flow does not support $inAppPaymentType")
}
@@ -124,6 +124,7 @@ data class DonateToSignalState(
val transactionState: TransactionState = TransactionState()
) {
val isSubscriptionActive: Boolean = _activeSubscription?.isActive == true
val isSubscriptionInProgress: Boolean = _activeSubscription?.isInProgress == true
val activeLevel: Int? = _activeSubscription?.activeSubscription?.level
val activeSubscription: ActiveSubscription.Subscription? = _activeSubscription?.activeSubscription
val isActiveSubscriptionEnding: Boolean = _activeSubscription?.isActive == true && _activeSubscription.activeSubscription.willCancelAtPeriodEnd()

View File

@@ -119,6 +119,8 @@ class DonateToSignalViewModel(
fun updateSubscription() {
val snapshot = store.state
check(snapshot.canUpdate)
if (snapshot.areFieldsEnabled) {
actionDisposable += createInAppPayment(snapshot).subscribeBy {
_actions.onNext(DonateToSignalAction.UpdateSubscription(it, snapshot.isUpdateLongRunning))

View File

@@ -278,9 +278,7 @@ class ManageDonationsFragment :
activeSubscription = activeSubscription,
subscriberRequiresCancel = state.subscriberRequiresCancel,
onRowClick = {
if (it != ManageDonationsState.RedemptionState.IN_PROGRESS) {
launcher.launch(InAppPaymentType.RECURRING_DONATION)
}
launcher.launch(InAppPaymentType.RECURRING_DONATION)
},
onPendingClick = {
displayPendingDialog(it)