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