diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java index 634ceb1dd3..3695acc880 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java @@ -315,6 +315,7 @@ public abstract class BaseEnterSmsCodeFragment handleCodeCallRequestAfterConfirm(VerifyAccountRepository.Mode.PHONE_CALL), @@ -323,7 +324,8 @@ public abstract class BaseEnterSmsCodeFragment handleCodeCallRequestAfterConfirm(VerifyAccountRepository.Mode.SMS_WITH_LISTENER), this::returnToPhoneEntryScreen); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java index 06de0ed761..85e275a277 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java @@ -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()); + })) + ); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationViewDelegate.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationViewDelegate.kt index 1c8de9f4c3..b92f56cc7d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationViewDelegate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationViewDelegate.kt @@ -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() } } diff --git a/app/src/main/res/layout/fragment_registration_enter_phone_number.xml b/app/src/main/res/layout/fragment_registration_enter_phone_number.xml index a48420eea3..abdb736594 100644 --- a/app/src/main/res/layout/fragment_registration_enter_phone_number.xml +++ b/app/src/main/res/layout/fragment_registration_enter_phone_number.xml @@ -23,9 +23,8 @@ android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="12dp" - android:layout_marginTop="16dp" - android:layout_marginEnd="12dp" + android:layout_marginHorizontal="24dp" + android:layout_marginTop="32dp" android:layoutDirection="ltr" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" @@ -83,9 +82,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginStart="32dp" - android:layout_marginEnd="32dp" - android:text="@string/RegistrationActivity_enter_your_phone_number" + android:layout_marginHorizontal="24dp" + android:text="@string/RegistrationActivity_phone_number" android:textAppearance="@style/Signal.Text.HeadlineMedium" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" @@ -97,10 +95,9 @@ style="@style/Signal.Text.BodyLarge" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="32dp" + android:layout_marginHorizontal="24dp" android:layout_marginTop="16dp" - android:layout_marginEnd="32dp" - android:text="@string/RegistrationActivity_you_will_receive_a_verification_code" + android:text="@string/RegistrationActivity_enter_your_phone_number_to_get_started" android:textColor="@color/signal_colorOnSurfaceVariant" app:layout_constraintTop_toBottomOf="@+id/verify_header" tools:layout_editor_absoluteX="0dp" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b75dc4d59f..5559b0c139 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1808,7 +1808,13 @@ The number you specified (%s) is invalid. - A verification code will be sent to: + + + Is the phone number below correct? + + Additional verification required + + A verification code will be sent to this number. Carrier rates may apply. You\'ll receive a call to verify this number. Is your phone number above correct? Edit number @@ -1843,8 +1849,10 @@ Next Continue Take privacy with you.\nBe yourself in every message. - Enter your phone number - You will receive a verification code.\nCarrier rates may apply. + + Phone number + + Enter your phone number to get started. Enter the code we sent to %s Make sure your phone has a cellular signal to receive your SMS or call diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4fa2d6f871..32574ab0fe 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -500,7 +500,7 @@