Show missing FCM dialog in registration V2.

This commit is contained in:
Nicholas Tinsley
2024-05-06 16:24:08 -04:00
committed by Alex Hart
parent 9af73b1409
commit 78bbab37fb

View File

@@ -202,7 +202,7 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
EnterPhoneNumberV2State.Error.INVALID_PHONE_NUMBER -> { EnterPhoneNumberV2State.Error.INVALID_PHONE_NUMBER -> {
MaterialAlertDialogBuilder(requireContext()).apply { MaterialAlertDialogBuilder(requireContext()).apply {
setTitle(getString(R.string.RegistrationActivity_invalid_number)) setTitle(R.string.RegistrationActivity_invalid_number)
setMessage( setMessage(
String.format( String.format(
getString(R.string.RegistrationActivity_the_number_you_specified_s_is_invalid), getString(R.string.RegistrationActivity_the_number_you_specified_s_is_invalid),
@@ -225,7 +225,14 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
} }
EnterPhoneNumberV2State.Error.PLAY_SERVICES_TRANSIENT -> { EnterPhoneNumberV2State.Error.PLAY_SERVICES_TRANSIENT -> {
Log.w(TAG, "Not yet implemented!", NotImplementedError()) // TODO [regv2] MaterialAlertDialogBuilder(requireContext()).apply {
setTitle(R.string.RegistrationActivity_play_services_error)
setMessage(R.string.RegistrationActivity_google_play_services_is_updating_or_unavailable)
setPositiveButton(android.R.string.ok) { _, _ -> fragmentViewModel.clearError() }
setOnCancelListener { fragmentViewModel.clearError() }
setOnDismissListener { fragmentViewModel.clearError() }
show()
}
} }
} }
} }
@@ -247,8 +254,14 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
sharedViewModel.uiState.observe(viewLifecycleOwner, FcmTokenRetrievedObserver()) sharedViewModel.uiState.observe(viewLifecycleOwner, FcmTokenRetrievedObserver())
sharedViewModel.fetchFcmToken(requireContext()) sharedViewModel.fetchFcmToken(requireContext())
} else { } else {
sharedViewModel.setInProgress(false) sharedViewModel.uiState.value?.let { value ->
// TODO [regv2]: handle if FCM isn't available if (value.phoneNumber == null) {
fragmentViewModel.setError(EnterPhoneNumberV2State.Error.INVALID_PHONE_NUMBER)
sharedViewModel.setInProgress(false)
} else {
presentConfirmNumberDialog(value.phoneNumber, value.isReRegister, value.canSkipSms, missingFcmConsentRequired = true)
}
}
} }
} }
@@ -257,7 +270,7 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
fragmentViewModel.setError(EnterPhoneNumberV2State.Error.INVALID_PHONE_NUMBER) fragmentViewModel.setError(EnterPhoneNumberV2State.Error.INVALID_PHONE_NUMBER)
sharedViewModel.setInProgress(false) sharedViewModel.setInProgress(false)
} else { } else {
presentConfirmNumberDialog(value.phoneNumber, value.isReRegister, value.canSkipSms) presentConfirmNumberDialog(value.phoneNumber, value.isReRegister, value.canSkipSms, missingFcmConsentRequired = false)
} }
} }
@@ -309,7 +322,7 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(phoneNumberInputLayout) ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(phoneNumberInputLayout)
} }
private fun presentConfirmNumberDialog(phoneNumber: PhoneNumber, isReRegister: Boolean, canSkipSms: Boolean) { private fun presentConfirmNumberDialog(phoneNumber: PhoneNumber, isReRegister: Boolean, canSkipSms: Boolean, missingFcmConsentRequired: Boolean) {
val title = if (isReRegister) { val title = if (isReRegister) {
R.string.RegistrationActivity_additional_verification_required R.string.RegistrationActivity_additional_verification_required
} else { } else {
@@ -329,13 +342,33 @@ class EnterPhoneNumberV2Fragment : LoggingFragment(R.layout.fragment_registratio
setMessage(message) setMessage(message)
setPositiveButton(android.R.string.ok) { _, _ -> setPositiveButton(android.R.string.ok) { _, _ ->
Log.d(TAG, "User confirmed number.") Log.d(TAG, "User confirmed number.")
sharedViewModel.onUserConfirmedPhoneNumber(requireContext()) if (missingFcmConsentRequired) {
handlePromptForNoPlayServices()
} else {
sharedViewModel.onUserConfirmedPhoneNumber(requireContext())
}
} }
setNegativeButton(R.string.RegistrationActivity_edit_number) { _, _ -> onConfirmNumberDialogCanceled() } setNegativeButton(R.string.RegistrationActivity_edit_number) { _, _ -> onConfirmNumberDialogCanceled() }
setOnCancelListener { _ -> onConfirmNumberDialogCanceled() } setOnCancelListener { _ -> onConfirmNumberDialogCanceled() }
}.show() }.show()
} }
private fun handlePromptForNoPlayServices() {
Log.d(TAG, "Device does not have Play Services, showing consent dialog.")
MaterialAlertDialogBuilder(requireContext()).apply {
setTitle(R.string.RegistrationActivity_missing_google_play_services)
setMessage(R.string.RegistrationActivity_this_device_is_missing_google_play_services)
setPositiveButton(R.string.RegistrationActivity_i_understand) { _, _ ->
Log.d(TAG, "User confirmed number.")
sharedViewModel.onUserConfirmedPhoneNumber(requireContext())
}
setNegativeButton(android.R.string.cancel, null)
setOnCancelListener { fragmentViewModel.clearError() }
setOnDismissListener { fragmentViewModel.clearError() }
show()
}
}
private fun moveToEnterPinScreen() { private fun moveToEnterPinScreen() {
sharedViewModel.setInProgress(false) sharedViewModel.setInProgress(false)
findNavController().safeNavigate(EnterPhoneNumberV2FragmentDirections.actionReRegisterWithPinV2Fragment()) findNavController().safeNavigate(EnterPhoneNumberV2FragmentDirections.actionReRegisterWithPinV2Fragment())