diff --git a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryScreen.kt b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryScreen.kt index 7219360b4c..129fcc9080 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryScreen.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryScreen.kt @@ -59,7 +59,6 @@ import org.signal.core.ui.compose.DropdownMenus import org.signal.core.ui.compose.IconButtons.IconButton import org.signal.core.ui.compose.Previews import org.signal.core.ui.rememberWindowBreakpoint -import org.signal.core.util.E164Util import org.signal.registration.R import org.signal.registration.screens.RegistrationScreen import org.signal.registration.screens.phonenumber.PhoneNumberEntryState.OneTimeEvent @@ -81,7 +80,7 @@ fun PhoneNumberScreen( if (state.showDialog) { Dialogs.SimpleAlertDialog( title = stringResource(R.string.RegistrationActivity_is_the_phone_number), - body = "${E164Util.formatAsE164WithCountryCodeForDisplay(state.countryCode, state.nationalNumber)}\n\n${stringResource(R.string.RegistrationActivity_a_verification_code)}", + body = "+${state.countryCode} ${state.formattedNumber}\n\n${stringResource(R.string.RegistrationActivity_a_verification_code)}", confirm = stringResource(id = android.R.string.ok), dismiss = stringResource(R.string.RegistrationActivity_edit_number), onConfirm = { onEvent(PhoneNumberEntryScreenEvents.PhoneNumberSubmitted) }, @@ -397,7 +396,7 @@ private fun NextButton( } else { Buttons.LargeTonal( onClick = { onEvent(PhoneNumberEntryScreenEvents.PhoneNumberEntered) }, - enabled = state.countryCode.isNotEmpty() && state.nationalNumber.isNotEmpty(), + enabled = state.isNumberPossible, modifier = Modifier.testTag(TestTags.PHONE_NUMBER_NEXT_BUTTON) ) { Text(stringResource(R.string.RegistrationActivity_next)) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryState.kt b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryState.kt index f76202ae86..3b339c6a4d 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryState.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryState.kt @@ -5,6 +5,8 @@ package org.signal.registration.screens.phonenumber +import com.google.i18n.phonenumbers.NumberParseException +import com.google.i18n.phonenumbers.PhoneNumberUtil import org.signal.registration.NetworkController import org.signal.registration.NetworkController.SessionMetadata import org.signal.registration.PendingRestoreOption @@ -36,4 +38,15 @@ data class PhoneNumberEntryState( data object UnableToSendSms : OneTimeEvent data object CouldNotRequestCodeWithSelectedTransport : OneTimeEvent } + + val isNumberPossible: Boolean + get() { + if (countryCode.isEmpty() || nationalNumber.isEmpty()) return false + return try { + val number = PhoneNumberUtil.getInstance().parse("+$countryCode$nationalNumber", null) + PhoneNumberUtil.getInstance().isPossibleNumber(number) + } catch (_: NumberParseException) { + false + } + } }