From 00a8565e91279734fb97805bb7337884b72348f2 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 4 Nov 2021 14:05:40 -0300 Subject: [PATCH] Allow retries for redemption from server failure. Add internal preference to enqueue job. --- .../app/internal/InternalSettingsFragment.kt | 18 ++++++++++++++++++ .../jobs/BoostReceiptRequestResponseJob.java | 4 ++-- .../SubscriptionReceiptRequestResponseJob.java | 10 ++++++++-- app/src/main/res/values/strings.xml | 3 +++ 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index 301970cfb..1adb6c9ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -24,8 +24,11 @@ import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob import org.thoughtcrime.securesms.jobs.RemoteConfigRefreshJob import org.thoughtcrime.securesms.jobs.RotateProfileKeyJob import org.thoughtcrime.securesms.jobs.StorageForcePushJob +import org.thoughtcrime.securesms.jobs.SubscriptionReceiptRequestResponseJob +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.payments.DataExportUtil import org.thoughtcrime.securesms.util.ConversationUtil +import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.concurrent.SimpleTask class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__internal_preferences) { @@ -317,6 +320,17 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } ) } + + if (FeatureFlags.donorBadges() && SignalStore.donationsValues().getSubscriber() != null) { + sectionHeaderPref(R.string.preferences__internal_badges) + + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_badges_enqueue_redemption), + onClick = { + enqueueSubscriptionRedemption() + } + ) + } } } @@ -399,4 +413,8 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter LocalMetricsDatabase.getInstance(ApplicationDependencies.getApplication()).clear() Toast.makeText(context, "Cleared all local metrics state.", Toast.LENGTH_SHORT).show() } + + private fun enqueueSubscriptionRedemption() { + SubscriptionReceiptRequestResponseJob.enqueueSubscriptionContinuation() + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java index d728bc420..213190ba1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java @@ -125,8 +125,8 @@ public class BoostReceiptRequestResponseJob extends BaseJob { if (response.getStatus() == 204) { Log.w(TAG, "User does not have receipts available to exchange. Exiting.", response.getApplicationError().get()); } else { - Log.w(TAG, "Encountered a permanent failure: " + response.getStatus(), response.getApplicationError().get()); - throw new Exception(response.getApplicationError().get()); + Log.w(TAG, "Encountered a server failure: " + response.getStatus(), response.getApplicationError().get()); + throw new RetryableException(); } } else if (response.getResult().isPresent()) { ReceiptCredential receiptCredential = getReceiptCredential(response.getResult().get()); 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 ad36250a4..03376f2e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java @@ -140,8 +140,8 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { if (response.getStatus() == 204) { Log.w(TAG, "User does not have receipts available to exchange. Exiting.", response.getApplicationError().get()); } else { - Log.w(TAG, "Encountered a permanent failure: " + response.getStatus(), response.getApplicationError().get()); - throw new Exception(response.getApplicationError().get()); + Log.w(TAG, "Encountered a server failure response: " + response.getStatus(), response.getApplicationError().get()); + throw new RetryableException(); } } else if (response.getResult().isPresent()) { ReceiptCredential receiptCredential = getReceiptCredential(response.getResult().get()); @@ -215,6 +215,12 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { boolean isExpirationInTheFuture = receiptCredential.getReceiptExpirationTime() > now; boolean isExpirationWithinAMonth = receiptCredential.getReceiptExpirationTime() < monthFromNow; + Log.d(TAG, "Credential validation: isSameLevel(" + isSameLevel + + ") isExpirationAfterSub(" + isExpirationAfterSub + + ") isExpiration86400(" + isExpiration86400 + + ") isExpirationInTheFuture(" + isExpirationInTheFuture + + ") isExpirationWithinAMonth(" + isExpirationWithinAMonth + ")"); + return isSameLevel && isExpirationAfterSub && isExpiration86400 && isExpirationInTheFuture && isExpirationWithinAMonth; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 488cf5b8d..1df1f9d00 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2601,6 +2601,9 @@ Group call server Default %1$s server + Badges + Enqueue redemption. + All activity