kopia lustrzana https://github.com/ryukoposting/Signal-Android
Allow contact support from registration lock and screen lock screens.
rodzic
589f345825
commit
dcfa7e3b36
|
@ -57,8 +57,10 @@ import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
|
||||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||||
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
||||||
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity;
|
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity;
|
||||||
|
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||||
import org.thoughtcrime.securesms.util.DynamicIntroTheme;
|
import org.thoughtcrime.securesms.util.DynamicIntroTheme;
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
||||||
|
import org.thoughtcrime.securesms.util.SupportEmailUtil;
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -137,7 +139,7 @@ public class PassphrasePromptActivity extends PassphraseActivity {
|
||||||
MenuInflater inflater = this.getMenuInflater();
|
MenuInflater inflater = this.getMenuInflater();
|
||||||
menu.clear();
|
menu.clear();
|
||||||
|
|
||||||
inflater.inflate(R.menu.log_submit, menu);
|
inflater.inflate(R.menu.passphrase_prompt, menu);
|
||||||
|
|
||||||
super.onCreateOptionsMenu(menu);
|
super.onCreateOptionsMenu(menu);
|
||||||
return true;
|
return true;
|
||||||
|
@ -146,8 +148,12 @@ public class PassphrasePromptActivity extends PassphraseActivity {
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
super.onOptionsItemSelected(item);
|
super.onOptionsItemSelected(item);
|
||||||
switch (item.getItemId()) {
|
if (item.getItemId() == R.id.menu_submit_debug_logs) {
|
||||||
case R.id.menu_submit_debug_logs: handleLogSubmit(); return true;
|
handleLogSubmit();
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.menu_contact_support) {
|
||||||
|
sendEmailToSupport();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
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 {
|
private class PassphraseActionListener implements TextView.OnEditorActionListener {
|
||||||
@Override
|
@Override
|
||||||
public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent keyEvent) {
|
public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent keyEvent) {
|
||||||
|
|
|
@ -29,7 +29,9 @@ import org.thoughtcrime.securesms.pin.PinRestoreRepository.TokenData;
|
||||||
import org.thoughtcrime.securesms.registration.service.CodeVerificationRequest;
|
import org.thoughtcrime.securesms.registration.service.CodeVerificationRequest;
|
||||||
import org.thoughtcrime.securesms.registration.service.RegistrationService;
|
import org.thoughtcrime.securesms.registration.service.RegistrationService;
|
||||||
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
|
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
|
||||||
|
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||||
import org.thoughtcrime.securesms.util.ServiceUtil;
|
import org.thoughtcrime.securesms.util.ServiceUtil;
|
||||||
|
import org.thoughtcrime.securesms.util.SupportEmailUtil;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -47,6 +49,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
|
||||||
private TextView errorLabel;
|
private TextView errorLabel;
|
||||||
private TextView keyboardToggle;
|
private TextView keyboardToggle;
|
||||||
private long timeRemaining;
|
private long timeRemaining;
|
||||||
|
private boolean isV1RegistrationLock;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -68,8 +71,9 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
|
||||||
RegistrationLockFragmentArgs args = RegistrationLockFragmentArgs.fromBundle(requireArguments());
|
RegistrationLockFragmentArgs args = RegistrationLockFragmentArgs.fromBundle(requireArguments());
|
||||||
|
|
||||||
timeRemaining = args.getTimeRemaining();
|
timeRemaining = args.getTimeRemaining();
|
||||||
|
isV1RegistrationLock = args.getIsV1RegistrationLock();
|
||||||
|
|
||||||
if (args.getIsV1RegistrationLock()) {
|
if (isV1RegistrationLock) {
|
||||||
keyboardToggle.setVisibility(View.GONE);
|
keyboardToggle.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +121,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
|
||||||
.setTitle(R.string.RegistrationLockFragment__not_many_tries_left)
|
.setTitle(R.string.RegistrationLockFragment__not_many_tries_left)
|
||||||
.setMessage(getTriesRemainingDialogMessage(triesRemaining, daysRemaining))
|
.setMessage(getTriesRemainingDialogMessage(triesRemaining, daysRemaining))
|
||||||
.setPositiveButton(android.R.string.ok, null)
|
.setPositiveButton(android.R.string.ok, null)
|
||||||
|
.setNeutralButton(R.string.PinRestoreEntryFragment_contact_support, (dialog, which) -> sendEmailToSupport())
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,6 +269,7 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
|
||||||
.setTitle(R.string.RegistrationLockFragment__forgot_your_pin)
|
.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))
|
.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)
|
.setPositiveButton(android.R.string.ok, null)
|
||||||
|
.setNeutralButton(R.string.PinRestoreEntryFragment_contact_support, (dialog, which) -> sendEmailToSupport())
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,4 +326,18 @@ public final class RegistrationLockFragment extends BaseRegistrationFragment {
|
||||||
Navigation.findNavController(requireView()).navigate(RegistrationLockFragmentDirections.actionSuccessfulRegistration());
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,4 +4,7 @@
|
||||||
<item android:title="@string/preferences__submit_debug_log"
|
<item android:title="@string/preferences__submit_debug_log"
|
||||||
android:id="@+id/menu_submit_debug_logs"
|
android:id="@+id/menu_submit_debug_logs"
|
||||||
android:icon="@android:drawable/ic_menu_upload" />
|
android:icon="@android:drawable/ic_menu_upload" />
|
||||||
|
|
||||||
|
<item android:title="@string/PinRestoreEntryFragment_contact_support"
|
||||||
|
android:id="@+id/menu_contact_support" />
|
||||||
</menu>
|
</menu>
|
|
@ -1278,6 +1278,7 @@
|
||||||
<string name="PassphrasePromptActivity_ok_button_content_description">Submit passphrase</string>
|
<string name="PassphrasePromptActivity_ok_button_content_description">Submit passphrase</string>
|
||||||
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Invalid passphrase!</string>
|
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Invalid passphrase!</string>
|
||||||
<string name="PassphrasePromptActivity_unlock_signal">Unlock Signal</string>
|
<string name="PassphrasePromptActivity_unlock_signal">Unlock Signal</string>
|
||||||
|
<string name="PassphrasePromptActivity_signal_android_lock_screen">Signal Android - Lock Screen</string>
|
||||||
|
|
||||||
<!-- PlacePickerActivity -->
|
<!-- PlacePickerActivity -->
|
||||||
<string name="PlacePickerActivity_title">Map</string>
|
<string name="PlacePickerActivity_title">Map</string>
|
||||||
|
@ -2563,6 +2564,8 @@
|
||||||
<string name="RegistrationLockFragment__incorrect_pin">Incorrect PIN</string>
|
<string name="RegistrationLockFragment__incorrect_pin">Incorrect PIN</string>
|
||||||
<string name="RegistrationLockFragment__forgot_your_pin">Forgot your 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__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">
|
<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>
|
<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>
|
||||||
|
|
Ładowanie…
Reference in New Issue