Prevent ISE with view binding in registration.
This commit is contained in:
parent
fb43a8257c
commit
c134c3033e
4 changed files with 41 additions and 4 deletions
|
@ -5,6 +5,8 @@
|
|||
|
||||
package org.thoughtcrime.securesms.registration.data.network
|
||||
|
||||
import org.signal.core.util.logging.Log
|
||||
|
||||
/**
|
||||
* This is a merging of the NetworkResult pattern and the Processor pattern of registration v1.
|
||||
* The goal is to enumerate all possible responses as sealed classes, which means the consumer will be able to handle them in an exhaustive when clause
|
||||
|
@ -24,4 +26,10 @@ abstract class RegistrationResult(private val errorCause: Throwable?) {
|
|||
|
||||
return errorCause
|
||||
}
|
||||
|
||||
fun logCause() {
|
||||
errorCause?.let {
|
||||
Log.w(Log.tag(this::class), "Cause:", it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,9 +5,15 @@
|
|||
|
||||
package org.thoughtcrime.securesms.registration.ui
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
||||
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber
|
||||
|
||||
fun PhoneNumber.toE164(): String {
|
||||
return PhoneNumberUtil.getInstance().format(this, PhoneNumberUtil.PhoneNumberFormat.E164)
|
||||
}
|
||||
|
||||
fun Fragment.isBindingInvalid(): Boolean {
|
||||
return viewLifecycleOwner.lifecycle.currentState.isAtLeast(Lifecycle.State.INITIALIZED)
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegat
|
|||
import org.thoughtcrime.securesms.registration.fragments.SignalStrengthPhoneStateListener
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationCheckpoint
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.registration.ui.isBindingInvalid
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
|
@ -128,11 +129,16 @@ class EnterCodeFragment : LoggingFragment(R.layout.fragment_registration_enter_c
|
|||
super.onResume()
|
||||
sharedViewModel.phoneNumber?.let {
|
||||
val formatted = PhoneNumberUtil.getInstance().format(it, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
|
||||
binding.verificationSubheader.setText(requireContext().getString(R.string.RegistrationActivity_enter_the_code_we_sent_to_s, formatted))
|
||||
binding.verificationSubheader.text = requireContext().getString(R.string.RegistrationActivity_enter_the_code_we_sent_to_s, formatted)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSessionErrorResponse(result: RegistrationResult) {
|
||||
if (isBindingInvalid()) {
|
||||
Log.w(TAG, "Binding not valid, aborting! Result: $result")
|
||||
result.logCause()
|
||||
return
|
||||
}
|
||||
when (result) {
|
||||
is VerificationCodeRequestResult.Success -> binding.keyboard.displaySuccess()
|
||||
is VerificationCodeRequestResult.RateLimited -> presentRateLimitedDialog()
|
||||
|
@ -143,6 +149,11 @@ class EnterCodeFragment : LoggingFragment(R.layout.fragment_registration_enter_c
|
|||
}
|
||||
|
||||
private fun handleRegistrationErrorResponse(result: RegisterAccountResult) {
|
||||
if (isBindingInvalid()) {
|
||||
Log.w(TAG, "Binding not valid, aborting! Result: $result")
|
||||
result.logCause()
|
||||
return
|
||||
}
|
||||
when (result) {
|
||||
is RegisterAccountResult.Success -> binding.keyboard.displaySuccess()
|
||||
is RegisterAccountResult.RegistrationLocked -> presentRegistrationLocked(result.timeRemaining)
|
||||
|
@ -199,11 +210,17 @@ class EnterCodeFragment : LoggingFragment(R.layout.fragment_registration_enter_c
|
|||
sharedViewModel.incrementIncorrectCodeAttempts()
|
||||
|
||||
Toast.makeText(requireContext(), R.string.RegistrationActivity_incorrect_code, Toast.LENGTH_LONG).show()
|
||||
|
||||
if (isBindingInvalid()) {
|
||||
Log.w(TAG, "Binding not valid, aborting updating keyboard!")
|
||||
return
|
||||
}
|
||||
|
||||
binding.keyboard.displayFailure().addListener(object : AssertedSuccessListener<Boolean?>() {
|
||||
override fun onSuccess(result: Boolean?) {
|
||||
binding.callMeCountDown.setVisibility(View.VISIBLE)
|
||||
binding.resendSmsCountDown.setVisibility(View.VISIBLE)
|
||||
binding.wrongNumber.setVisibility(View.VISIBLE)
|
||||
binding.callMeCountDown.visibility = View.VISIBLE
|
||||
binding.resendSmsCountDown.visibility = View.VISIBLE
|
||||
binding.wrongNumber.visibility = View.VISIBLE
|
||||
binding.code.clear()
|
||||
binding.keyboard.displayKeyboard()
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ import org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegat
|
|||
import org.thoughtcrime.securesms.registration.ui.RegistrationCheckpoint
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationState
|
||||
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
|
||||
import org.thoughtcrime.securesms.registration.ui.isBindingInvalid
|
||||
import org.thoughtcrime.securesms.registration.ui.toE164
|
||||
import org.thoughtcrime.securesms.registration.util.CountryPrefix
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions
|
||||
|
@ -299,6 +300,11 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
|
|||
}
|
||||
|
||||
private fun handleErrorResponse(result: RegistrationResult) {
|
||||
if (isBindingInvalid()) {
|
||||
Log.w(TAG, "Binding not valid, aborting! Result: $result")
|
||||
result.logCause()
|
||||
return
|
||||
}
|
||||
if (!result.isSuccess()) {
|
||||
Log.i(TAG, "Handling error response.", result.getCause())
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue