Implement session-based account registration API.

This commit is contained in:
Nicholas
2023-02-21 16:04:23 -05:00
committed by Greyson Parrelli
parent 3de17fa2d0
commit a47e3900c1
40 changed files with 1215 additions and 418 deletions

View File

@@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.components.registration
import android.content.Context
import android.util.AttributeSet
import androidx.annotation.StringRes
import com.google.android.material.button.MaterialButton
import org.thoughtcrime.securesms.R
import java.util.concurrent.TimeUnit
class ActionCountDownButton @JvmOverloads constructor(
@@ -11,6 +11,12 @@ class ActionCountDownButton @JvmOverloads constructor(
attrs: AttributeSet? = null,
defStyle: Int = 0
) : MaterialButton(context, attrs, defStyle) {
@StringRes
private var enabledText = 0
@StringRes
private var disabledText = 0
private var countDownToTime: Long = 0
private var listener: Listener? = null
@@ -24,8 +30,8 @@ class ActionCountDownButton @JvmOverloads constructor(
}
}
fun setCallEnabled() {
setText(R.string.RegistrationActivity_call)
private fun setActionEnabled() {
setText(enabledText)
isEnabled = true
alpha = 1.0f
}
@@ -38,11 +44,11 @@ class ActionCountDownButton @JvmOverloads constructor(
val totalRemainingSeconds = TimeUnit.MILLISECONDS.toSeconds(remainingMillis).toInt()
val minutesRemaining = totalRemainingSeconds / 60
val secondsRemaining = totalRemainingSeconds % 60
text = resources.getString(R.string.RegistrationActivity_call_me_instead_available_in, minutesRemaining, secondsRemaining)
text = resources.getString(disabledText, minutesRemaining, secondsRemaining)
listener?.onRemaining(this, totalRemainingSeconds)
postDelayed({ updateCountDown() }, 250)
} else {
setCallEnabled()
setActionEnabled()
}
}
@@ -50,6 +56,11 @@ class ActionCountDownButton @JvmOverloads constructor(
this.listener = listener
}
fun setTextResources(@StringRes enabled: Int, @StringRes disabled: Int) {
enabledText = enabled
disabledText = disabled
}
interface Listener {
fun onRemaining(view: ActionCountDownButton, secondsRemaining: Int)
}

View File

@@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.settings.app.changenumber.ChangeNum
import org.thoughtcrime.securesms.components.settings.app.changenumber.ChangeNumberUtil.getViewModel
import org.thoughtcrime.securesms.registration.VerifyAccountRepository
import org.thoughtcrime.securesms.util.LifecycleDisposable
import org.thoughtcrime.securesms.util.dualsim.MccMncProducer
import org.thoughtcrime.securesms.util.navigation.safeNavigate
private val TAG: String = Log.tag(ChangeNumberVerifyFragment::class.java)
@@ -48,17 +49,15 @@ class ChangeNumberVerifyFragment : LoggingFragment(R.layout.fragment_change_phon
}
private fun requestCode() {
val mccMncProducer = MccMncProducer(requireContext())
lifecycleDisposable += viewModel
.ensureDecryptionsDrained()
.onErrorComplete()
.andThen(viewModel.requestVerificationCode(VerifyAccountRepository.Mode.SMS_WITHOUT_LISTENER))
.andThen(viewModel.requestVerificationCode(VerifyAccountRepository.Mode.SMS_WITHOUT_LISTENER, mccMncProducer.mcc, mccMncProducer.mnc))
.observeOn(AndroidSchedulers.mainThread())
.subscribe { processor ->
if (processor.hasResult()) {
findNavController().safeNavigate(R.id.action_changePhoneNumberVerifyFragment_to_changeNumberEnterCodeFragment)
} else if (processor.localRateLimit()) {
Log.i(TAG, "Unable to request sms code due to local rate limit")
findNavController().safeNavigate(R.id.action_changePhoneNumberVerifyFragment_to_changeNumberEnterCodeFragment)
} else if (processor.captchaRequired()) {
Log.i(TAG, "Unable to request sms code due to captcha required")
findNavController().safeNavigate(R.id.action_changePhoneNumberVerifyFragment_to_captchaFragment, getCaptchaArguments())