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