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 fa3c6fb21..270f5c795 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 302129546..8ab78ff10 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;