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 d4b104881f..651dd998f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java @@ -301,6 +301,8 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { SignalStore.donationsValues().setUnexpectedSubscriptionCancelationTimestamp(timestamp); MultiDeviceSubscriptionSyncRequestJob.enqueue(); } else if (chargeFailure != null) { + Log.d(TAG, "Charge failure detected: " + chargeFailure, true); + StripeDeclineCode declineCode = StripeDeclineCode.Companion.getFromCode(chargeFailure.getOutcomeNetworkReason()); DonationError.PaymentSetupError paymentSetupError; diff --git a/donations/lib/src/main/java/org/signal/donations/StripeDeclineCode.kt b/donations/lib/src/main/java/org/signal/donations/StripeDeclineCode.kt index 56d9c48699..441bbc6d54 100644 --- a/donations/lib/src/main/java/org/signal/donations/StripeDeclineCode.kt +++ b/donations/lib/src/main/java/org/signal/donations/StripeDeclineCode.kt @@ -53,7 +53,11 @@ sealed class StripeDeclineCode { } companion object { - fun getFromCode(code: String): StripeDeclineCode { + fun getFromCode(code: String?): StripeDeclineCode { + if (code == null) { + return Unknown("null") + } + val typedCode: Code? = Code.values().firstOrNull { it.code == code } return typedCode?.let { Known(typedCode) } ?: Unknown(code) } 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 8ab78ff10b..73a790451a 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 @@ -9,6 +9,8 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import javax.annotation.Nullable; + public final class ActiveSubscription { public static final ActiveSubscription EMPTY = new ActiveSubscription(null, null); @@ -270,7 +272,7 @@ public final class ActiveSubscription { *

* See: https://stripe.com/docs/api/charges/object#charge_object-outcome-reason */ - public String getOutcomeNetworkReason() { + public @Nullable String getOutcomeNetworkReason() { return outcomeNetworkReason; } @@ -282,5 +284,14 @@ public final class ActiveSubscription { public String getOutcomeType() { return outcomeType; } + + @Override public String toString() { + return "ChargeFailure{" + + "code='" + code + '\'' + + ", outcomeNetworkStatus='" + outcomeNetworkStatus + '\'' + + ", outcomeNetworkReason='" + outcomeNetworkReason + '\'' + + ", outcomeType='" + outcomeType + '\'' + + '}'; + } } }