diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.kt
index 6570a92847..b57c9a8966 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.kt
@@ -47,6 +47,7 @@ class MiscellaneousValues internal constructor(store: KeyValueStore) : SignalSto
private const val HAS_KEY_TRANSPARENCY_FAILURE = "misc.has_key_transparency_failure"
private const val HAS_SEEN_KEY_TRANSPARENCY_FAILURE = "misc.has_seen_key_transparency_failure"
private const val CAMERA_FACING_FRONT = "misc.camera_facing_front"
+ private const val CAPTCHA_LAST_VIEWED_AT = "misc.captcha_last_viewed_at"
private const val COMPLETED_COLLAPSED_EVENTS_MIGRATION = "misc.completed_collapsed_events_migration"
}
@@ -318,4 +319,9 @@ class MiscellaneousValues internal constructor(store: KeyValueStore) : SignalSto
var isCameraFacingFront: Boolean by booleanValue(CAMERA_FACING_FRONT, true)
var completedCollapsedEventsMigration: Boolean by booleanValue(COMPLETED_COLLAPSED_EVENTS_MIGRATION, false)
+
+ /**
+ * The last time the user viewed the captcha/recaptcha proof activity.
+ */
+ var captchaLastViewedAt: Long by longValue(CAPTCHA_LAST_VIEWED_AT, 0)
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java
index 5a44d2fbe6..db3307f6d0 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java
@@ -69,6 +69,7 @@ public class RecaptchaProofActivity extends PassphraseRequiredActivity {
}
});
+ SignalStore.misc().setCaptchaLastViewedAt(System.currentTimeMillis());
webView.loadUrl(BuildConfig.RECAPTCHA_PROOF_URL);
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java
index af95c9f6d5..ccd89bd7e9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java
@@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import java.util.Locale;
+import java.util.concurrent.TimeUnit;
public final class SupportEmailUtil {
@@ -68,7 +69,9 @@ public final class SupportEmailUtil {
"\n" +
context.getString(R.string.SupportEmailUtil_registration_lock) + " " + getRegistrationLockEnabled() +
"\n" +
- context.getString(R.string.SupportEmailUtil_locale) + " " + Locale.getDefault().toString();
+ context.getString(R.string.SupportEmailUtil_locale) + " " + Locale.getDefault().toString() +
+ "\n" +
+ context.getString(R.string.SupportEmailUtil_challenge_received) + " " + getChallengeReceived();
}
private static CharSequence getDeviceInfo() {
@@ -90,4 +93,11 @@ public final class SupportEmailUtil {
private static CharSequence getRegistrationLockEnabled() {
return String.valueOf(SignalStore.svr().isRegistrationLockEnabled());
}
+
+ private static String getChallengeReceived() {
+ long captchaLastViewedAt = SignalStore.misc().getCaptchaLastViewedAt();
+ boolean receivedRecently = captchaLastViewedAt > 0 && (System.currentTimeMillis() - captchaLastViewedAt) <= TimeUnit.DAYS.toMillis(3);
+
+ return receivedRecently ? "yes" : "no";
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 62919c2fcb..3654649498 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3081,6 +3081,7 @@
Signal package:
Registration lock:
Locale:
+ Challenge Received:
Group updated