Update copy/dialogs for registration flow.

This commit is contained in:
Cody Henthorne
2023-04-19 16:58:45 -04:00
parent b3974d6e64
commit 203b16e5a9
6 changed files with 71 additions and 57 deletions

View File

@@ -315,6 +315,7 @@ public abstract class BaseEnterSmsCodeFragment<ViewModel extends BaseRegistratio
private void handlePhoneCallRequest() {
showConfirmNumberDialogIfTranslated(requireContext(),
R.string.RegistrationActivity_phone_number_verification_dialog_title,
R.string.RegistrationActivity_you_will_receive_a_call_to_verify_this_number,
viewModel.getNumber().getE164Number(),
() -> handleCodeCallRequestAfterConfirm(VerifyAccountRepository.Mode.PHONE_CALL),
@@ -323,7 +324,8 @@ public abstract class BaseEnterSmsCodeFragment<ViewModel extends BaseRegistratio
private void handleSmsRequest() {
showConfirmNumberDialogIfTranslated(requireContext(),
R.string.RegistrationActivity_a_verification_code_will_be_sent_to,
R.string.RegistrationActivity_phone_number_verification_dialog_title,
R.string.RegistrationActivity_a_verification_code_will_be_sent_to_this_number,
viewModel.getNumber().getE164Number(),
() -> handleCodeCallRequestAfterConfirm(VerifyAccountRepository.Mode.SMS_WITH_LISTENER),
this::returnToPhoneEntryScreen);

View File

@@ -202,8 +202,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
}
private void onE164EnteredSuccessfully(@NonNull Context context, boolean fcmSupported) {
register.setSpinning();
disableAllEntries();
enterInProgressUiState();
Disposable disposable = viewModel.canEnterSkipSmsFlow()
.observeOn(AndroidSchedulers.mainThread())
@@ -259,13 +258,15 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
}
}
private void disableAllEntries() {
private void enterInProgressUiState() {
register.setSpinning();
countryCode.setEnabled(false);
number.setEnabled(false);
cancel.setVisibility(View.GONE);
}
private void enableAllEntries() {
private void exitInProgressUiState() {
register.cancelSpinning();
countryCode.setEnabled(true);
number.setEnabled(true);
if (viewModel.isReregister()) {
@@ -303,7 +304,8 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
Log.i(TAG, "The server did not accept the information.", processor.getError());
showErrorDialog(register.getContext(), getString(R.string.RegistrationActivity_we_need_to_verify_that_youre_human));
} else if (processor instanceof RegistrationSessionProcessor.RegistrationSessionProcessorForVerification
&& ((RegistrationSessionProcessor.RegistrationSessionProcessorForVerification) processor).externalServiceFailure()) {
&& ((RegistrationSessionProcessor.RegistrationSessionProcessorForVerification) processor).externalServiceFailure())
{
Log.w(TAG, "The server reported a failure with an external service.", processor.getError());
showErrorDialog(register.getContext(), getString(R.string.RegistrationActivity_external_service_error));
} else {
@@ -311,8 +313,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
showErrorDialog(register.getContext(), getString(R.string.RegistrationActivity_unable_to_connect_to_service));
}
register.cancelSpinning();
enableAllEntries();
exitInProgressUiState();
});
disposables.add(request);
@@ -324,9 +325,9 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
private String formatMillisecondsToString(long milliseconds) {
long totalSeconds = milliseconds / 1000;
long HH = totalSeconds / 3600;
long MM = (totalSeconds % 3600) / 60;
long SS = totalSeconds % 60;
long HH = totalSeconds / 3600;
long MM = (totalSeconds % 3600) / 60;
long SS = totalSeconds % 60;
return String.format(Locale.getDefault(), "%02d:%02d:%02d", HH, MM, SS);
}
@@ -365,7 +366,7 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
}
private void checkIfSessionIsInProgressAndAdvance(@NonNull String sessionE164) {
NavController navController = NavHostFragment.findNavController(this);
NavController navController = NavHostFragment.findNavController(this);
Disposable request = viewModel.validateSession(sessionE164)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(processor -> {
@@ -428,13 +429,26 @@ public final class EnterPhoneNumberFragment extends LoggingFragment implements R
@NonNull String e164number,
@NonNull Runnable onConfirmed)
{
showConfirmNumberDialogIfTranslated(context,
R.string.RegistrationActivity_a_verification_code_will_be_sent_to,
e164number,
() -> {
ViewUtil.hideKeyboard(context, number.getEditText());
onConfirmed.run();
},
() -> ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(this.number.getEditText()));
enterInProgressUiState();
disposables.add(
viewModel.canEnterSkipSmsFlow()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(canSkipSms -> showConfirmNumberDialogIfTranslated(context,
viewModel.hasUserSkippedReRegisterFlow() ? R.string.RegistrationActivity_additional_verification_required
: R.string.RegistrationActivity_phone_number_verification_dialog_title,
canSkipSms ? null
: R.string.RegistrationActivity_a_verification_code_will_be_sent_to_this_number,
e164number,
() -> {
exitInProgressUiState();
ViewUtil.hideKeyboard(context, number.getEditText());
onConfirmed.run();
},
() -> {
exitInProgressUiState();
ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(this.number.getEditText());
}))
);
}
}

View File

@@ -7,7 +7,6 @@ import android.view.View
import android.widget.Toast
import androidx.annotation.StringRes
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.signal.core.util.TranslationDetection
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
@@ -38,33 +37,27 @@ object RegistrationViewDelegate {
@JvmStatic
fun showConfirmNumberDialogIfTranslated(
context: Context,
@StringRes firstMessageLine: Int,
@StringRes title: Int?,
@StringRes firstMessageLine: Int?,
e164number: String,
onConfirmed: Runnable,
onEditNumber: Runnable
) {
val translationDetection = TranslationDetection(context)
if (translationDetection.textExistsInUsersLanguage(
firstMessageLine,
R.string.RegistrationActivity_is_your_phone_number_above_correct,
R.string.RegistrationActivity_edit_number
)
) {
val message: CharSequence = SpannableStringBuilder()
.append(context.getString(firstMessageLine))
.append("\n\n")
.append(SpanUtil.bold(PhoneNumberFormatter.prettyPrint(e164number)))
.append("\n\n")
.append(context.getString(R.string.RegistrationActivity_is_your_phone_number_above_correct))
MaterialAlertDialogBuilder(context)
.setMessage(message)
.setPositiveButton(android.R.string.ok) { _, _ -> onConfirmed.run() }
.setNegativeButton(R.string.RegistrationActivity_edit_number) { _, _ -> onEditNumber.run() }
.show()
} else {
onConfirmed.run()
val message: CharSequence = SpannableStringBuilder().apply {
append(SpanUtil.bold(PhoneNumberFormatter.prettyPrint(e164number)))
if (firstMessageLine != null) {
append("\n\n")
append(context.getString(firstMessageLine))
}
}
MaterialAlertDialogBuilder(context).apply {
if (title != null) {
setTitle(title)
}
setMessage(message)
setPositiveButton(android.R.string.ok) { _, _ -> onConfirmed.run() }
setNegativeButton(R.string.RegistrationActivity_edit_number) { _, _ -> onEditNumber.run() }
}.show()
}
}