Allow contact support from registration lock and screen lock screens.

This commit is contained in:
Cody Henthorne 2021-02-01 11:58:33 -05:00 committed by GitHub
parent 589f345825
commit dcfa7e3b36
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 5 deletions

View file

@ -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) {

View file

@ -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);
}
}

View file

@ -4,4 +4,7 @@
<item android:title="@string/preferences__submit_debug_log"
android:id="@+id/menu_submit_debug_logs"
android:icon="@android:drawable/ic_menu_upload" />
<item android:title="@string/PinRestoreEntryFragment_contact_support"
android:id="@+id/menu_contact_support" />
</menu>

View file

@ -1278,6 +1278,7 @@
<string name="PassphrasePromptActivity_ok_button_content_description">Submit passphrase</string>
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Invalid passphrase!</string>
<string name="PassphrasePromptActivity_unlock_signal">Unlock Signal</string>
<string name="PassphrasePromptActivity_signal_android_lock_screen">Signal Android - Lock Screen</string>
<!-- PlacePickerActivity -->
<string name="PlacePickerActivity_title">Map</string>
@ -2563,6 +2564,8 @@
<string name="RegistrationLockFragment__incorrect_pin">Incorrect PIN</string>
<string name="RegistrationLockFragment__forgot_your_pin">Forgot your PIN?</string>
<string name="RegistrationLockFragment__not_many_tries_left">Not many tries left!</string>
<string name="RegistrationLockFragment__signal_registration_need_help_with_pin_for_android_v1_pin">Signal Registration - Need Help with PIN for Android (v1 PIN)</string>
<string name="RegistrationLockFragment__signal_registration_need_help_with_pin_for_android_v2_pin">Signal Registration - Need Help with PIN for Android (v2 PIN)</string>
<plurals name="RegistrationLockFragment__for_your_privacy_and_security_there_is_no_way_to_recover">
<item quantity="one">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.</item>