diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java
index 23a19dc753..5509d40aba 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java
@@ -57,8 +57,10 @@ import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity;
+import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.DynamicIntroTheme;
import org.thoughtcrime.securesms.util.DynamicLanguage;
+import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
/**
@@ -137,7 +139,7 @@ public class PassphrasePromptActivity extends PassphraseActivity {
MenuInflater inflater = this.getMenuInflater();
menu.clear();
- inflater.inflate(R.menu.log_submit, menu);
+ inflater.inflate(R.menu.passphrase_prompt, menu);
super.onCreateOptionsMenu(menu);
return true;
@@ -146,8 +148,12 @@ public class PassphrasePromptActivity extends PassphraseActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
- switch (item.getItemId()) {
- case R.id.menu_submit_debug_logs: handleLogSubmit(); return true;
+ if (item.getItemId() == R.id.menu_submit_debug_logs) {
+ handleLogSubmit();
+ return true;
+ } else if (item.getItemId() == R.id.menu_contact_support) {
+ sendEmailToSupport();
+ return true;
}
return false;
@@ -294,6 +300,17 @@ public class PassphrasePromptActivity extends PassphraseActivity {
}
}
+ private void sendEmailToSupport() {
+ String body = SupportEmailUtil.generateSupportEmailBody(this,
+ R.string.PassphrasePromptActivity_signal_android_lock_screen,
+ null,
+ null);
+ CommunicationActions.openEmail(this,
+ SupportEmailUtil.getSupportEmailAddress(this),
+ getString(R.string.PassphrasePromptActivity_signal_android_lock_screen),
+ body);
+ }
+
private class PassphraseActionListener implements TextView.OnEditorActionListener {
@Override
public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent keyEvent) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
index 8891b9d87c..2596cf193b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java
@@ -29,7 +29,9 @@ import org.thoughtcrime.securesms.pin.PinRestoreRepository.TokenData;
import org.thoughtcrime.securesms.registration.service.CodeVerificationRequest;
import org.thoughtcrime.securesms.registration.service.RegistrationService;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
+import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.ServiceUtil;
+import org.thoughtcrime.securesms.util.SupportEmailUtil;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import java.util.concurrent.TimeUnit;
@@ -47,6 +49,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
private TextView errorLabel;
private TextView keyboardToggle;
private long timeRemaining;
+ private boolean isV1RegistrationLock;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -67,9 +70,10 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
RegistrationLockFragmentArgs args = RegistrationLockFragmentArgs.fromBundle(requireArguments());
- timeRemaining = args.getTimeRemaining();
+ timeRemaining = args.getTimeRemaining();
+ isV1RegistrationLock = args.getIsV1RegistrationLock();
- if (args.getIsV1RegistrationLock()) {
+ if (isV1RegistrationLock) {
keyboardToggle.setVisibility(View.GONE);
}
@@ -117,6 +121,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
.setTitle(R.string.RegistrationLockFragment__not_many_tries_left)
.setMessage(getTriesRemainingDialogMessage(triesRemaining, daysRemaining))
.setPositiveButton(android.R.string.ok, null)
+ .setNeutralButton(R.string.PinRestoreEntryFragment_contact_support, (dialog, which) -> sendEmailToSupport())
.show();
}
@@ -264,6 +269,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
.setTitle(R.string.RegistrationLockFragment__forgot_your_pin)
.setMessage(requireContext().getResources().getQuantityString(R.plurals.RegistrationLockFragment__for_your_privacy_and_security_there_is_no_way_to_recover, lockoutDays, lockoutDays))
.setPositiveButton(android.R.string.ok, null)
+ .setNeutralButton(R.string.PinRestoreEntryFragment_contact_support, (dialog, which) -> sendEmailToSupport())
.show();
}
@@ -320,4 +326,18 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
Navigation.findNavController(requireView()).navigate(RegistrationLockFragmentDirections.actionSuccessfulRegistration());
});
}
+
+ private void sendEmailToSupport() {
+ int subject = isV1RegistrationLock ? R.string.RegistrationLockFragment__signal_registration_need_help_with_pin_for_android_v1_pin
+ : R.string.RegistrationLockFragment__signal_registration_need_help_with_pin_for_android_v2_pin;
+
+ String body = SupportEmailUtil.generateSupportEmailBody(requireContext(),
+ subject,
+ null,
+ null);
+ CommunicationActions.openEmail(requireContext(),
+ SupportEmailUtil.getSupportEmailAddress(requireContext()),
+ getString(subject),
+ body);
+ }
}
diff --git a/app/src/main/res/menu/log_submit.xml b/app/src/main/res/menu/passphrase_prompt.xml
similarity index 69%
rename from app/src/main/res/menu/log_submit.xml
rename to app/src/main/res/menu/passphrase_prompt.xml
index abd321d48d..a3ee2a9b9a 100644
--- a/app/src/main/res/menu/log_submit.xml
+++ b/app/src/main/res/menu/passphrase_prompt.xml
@@ -4,4 +4,7 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 86013f71e4..4580b94940 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1278,6 +1278,7 @@
Submit passphrase
Invalid passphrase!
Unlock Signal
+ Signal Android - Lock Screen
Map
@@ -2563,6 +2564,8 @@
Incorrect PIN
Forgot your PIN?
Not many tries left!
+ Signal Registration - Need Help with PIN for Android (v1 PIN)
+ Signal Registration - Need Help with PIN for Android (v2 PIN)
- For your privacy and security, there is no way to recover your PIN. If you can\'t remember your PIN, you can re-verify with SMS after %1$d day of inactivity. In this case, your account will be wiped and all content deleted.