Save national number when using country picker.

This commit is contained in:
Michelle Tang
2025-02-10 12:00:22 -05:00
committed by GitHub
parent 28cc0f2534
commit 125093a2ce
6 changed files with 30 additions and 0 deletions

View File

@@ -26,6 +26,7 @@ data class RegistrationState(
val sessionId: String? = null,
val enteredCode: String = "",
val phoneNumber: Phonenumber.PhoneNumber? = fetchExistingE164FromValues(),
val nationalNumber: String = "",
val inProgress: Boolean = false,
val isReRegister: Boolean = false,
val canSkipSms: Boolean = false,

View File

@@ -112,6 +112,14 @@ class RegistrationViewModel : ViewModel() {
val phoneNumber: Phonenumber.PhoneNumber?
get() = store.value.phoneNumber
var nationalNumber: String
get() = store.value.nationalNumber
set(value) {
store.update {
it.copy(nationalNumber = value)
}
}
fun maybePrefillE164(context: Context) {
Log.v(TAG, "maybePrefillE164()")
if (Permissions.hasAll(context, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS)) {

View File

@@ -182,6 +182,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
fragmentViewModel.uiState.observe(viewLifecycleOwner) { fragmentState ->
if (fragmentViewModel.isEnteredNumberPossible(fragmentState)) {
sharedViewModel.setPhoneNumber(fragmentViewModel.parsePhoneNumber(fragmentState))
sharedViewModel.nationalNumber = ""
} else {
sharedViewModel.setPhoneNumber(null)
}
@@ -196,12 +197,16 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
initializeInputFields()
val existingPhoneNumber = sharedViewModel.phoneNumber
val existingNationalNumber = sharedViewModel.nationalNumber
if (existingPhoneNumber != null) {
fragmentViewModel.restoreState(existingPhoneNumber)
spinnerView.setText(existingPhoneNumber.countryCode.toString())
phoneNumberInputLayout.setText(existingPhoneNumber.nationalNumber.toString())
} else if (spinnerView.text?.isEmpty() == true) {
spinnerView.setText(fragmentViewModel.getDefaultCountryCode(requireContext()).toString())
phoneNumberInputLayout.setText(existingNationalNumber)
} else {
phoneNumberInputLayout.setText(existingNationalNumber)
}
ViewUtil.focusAndShowKeyboard(phoneNumberInputLayout)
@@ -269,6 +274,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
afterTextChanged = {
reformatText(it)
fragmentViewModel.setPhoneNumber(it?.toString())
sharedViewModel.nationalNumber = it?.toString() ?: ""
}
)

View File

@@ -26,6 +26,7 @@ data class RegistrationState(
val sessionId: String? = null,
val enteredCode: String = "",
val phoneNumber: Phonenumber.PhoneNumber? = fetchExistingE164FromValues(),
val nationalNumber: String = "",
val inProgress: Boolean = false,
val isReRegister: Boolean = false,
val recoveryPassword: String? = null,

View File

@@ -128,6 +128,14 @@ class RegistrationViewModel : ViewModel() {
val phoneNumber: Phonenumber.PhoneNumber?
get() = store.value.phoneNumber
var nationalNumber: String
get() = store.value.nationalNumber
set(value) {
store.update {
it.copy(nationalNumber = value)
}
}
fun maybePrefillE164(context: Context) {
Log.v(TAG, "maybePrefillE164()")
if (Permissions.hasAll(context, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS)) {

View File

@@ -187,6 +187,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
fragmentViewModel.uiState.observe(viewLifecycleOwner) { fragmentState ->
if (fragmentViewModel.isEnteredNumberPossible(fragmentState)) {
sharedViewModel.setPhoneNumber(fragmentViewModel.parsePhoneNumber(fragmentState))
sharedViewModel.nationalNumber = ""
} else {
sharedViewModel.setPhoneNumber(null)
}
@@ -201,12 +202,16 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
initializeInputFields()
val existingPhoneNumber = sharedViewModel.phoneNumber
val existingNationalNumber = sharedViewModel.nationalNumber
if (existingPhoneNumber != null) {
fragmentViewModel.restoreState(existingPhoneNumber)
spinnerView.setText(existingPhoneNumber.countryCode.toString())
phoneNumberInputLayout.setText(existingPhoneNumber.nationalNumber.toString())
} else if (spinnerView.text?.isEmpty() == true) {
spinnerView.setText(fragmentViewModel.getDefaultCountryCode(requireContext()).toString())
phoneNumberInputLayout.setText(existingNationalNumber)
} else {
phoneNumberInputLayout.setText(existingNationalNumber)
}
if (enterPhoneNumberMode == EnterPhoneNumberMode.RESTART_AFTER_COLLECTION && (savedInstanceState == null && !processedResumeMode)) {
@@ -279,6 +284,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
afterTextChanged = {
reformatText(it)
fragmentViewModel.setPhoneNumber(it?.toString())
sharedViewModel.nationalNumber = it?.toString() ?: ""
}
)