From 33236ea8e6c70236b65218761bfeaf5a5aad6698 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 28 Apr 2022 14:33:30 -0300 Subject: [PATCH] Add retry when user resubscribes after canceling. --- .../jobs/SubscriptionReceiptRequestResponseJob.java | 3 +++ .../signalservice/api/subscriptions/ActiveSubscription.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java index fa3c6fb210..270f5c7952 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java @@ -161,6 +161,9 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { Log.w(TAG, "Subscription is not yet active. Status: " + subscription.getStatus(), true); throw new RetryableException(); + } else if (subscription.isCanceled()) { + Log.w(TAG, "Subscription is marked as cancelled, but it's possible that the user cancelled and then later tried to resubscribe. Scheduling a retry.", true); + throw new RetryableException(); } else { Log.i(TAG, "Recording end of period from active subscription: " + subscription.getStatus(), true); SignalStore.donationsValues().setLastEndOfPeriod(subscription.getEndOfCurrentPeriod()); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscription.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscription.java index 302129546b..8ab78ff10b 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscription.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscription.java @@ -57,7 +57,6 @@ public final class ActiveSubscription { private static final Set FAILURE_STATUSES = new HashSet<>(Arrays.asList( INCOMPLETE_EXPIRED, PAST_DUE, - CANCELED, UNPAID )); @@ -197,6 +196,10 @@ public final class ActiveSubscription { return Status.isPaymentFailed(getStatus()); } + public boolean isCanceled() { + return Status.getStatus(getStatus()) == Status.CANCELED; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false;