Rename Async to AsyncData
This commit is contained in:
parent
3b2882ce2f
commit
7b2341aec7
139 changed files with 745 additions and 745 deletions
|
|
@ -29,7 +29,7 @@ import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockMana
|
|||
import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||
import io.element.android.features.lockscreen.impl.unlock.keypad.PinKeypadModel
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||
import io.element.android.libraries.core.bool.orFalse
|
||||
|
|
@ -49,11 +49,11 @@ class PinUnlockPresenter @Inject constructor(
|
|||
@Composable
|
||||
override fun present(): PinUnlockState {
|
||||
val pinEntryState = remember {
|
||||
mutableStateOf<Async<PinEntry>>(Async.Uninitialized)
|
||||
mutableStateOf<AsyncData<PinEntry>>(AsyncData.Uninitialized)
|
||||
}
|
||||
val pinEntry by pinEntryState
|
||||
var remainingAttempts by remember {
|
||||
mutableStateOf<Async<Int>>(Async.Uninitialized)
|
||||
mutableStateOf<AsyncData<Int>>(AsyncData.Uninitialized)
|
||||
}
|
||||
var showWrongPinTitle by rememberSaveable {
|
||||
mutableStateOf(false)
|
||||
|
|
@ -62,7 +62,7 @@ class PinUnlockPresenter @Inject constructor(
|
|||
mutableStateOf(false)
|
||||
}
|
||||
val signOutAction = remember {
|
||||
mutableStateOf<Async<String?>>(Async.Uninitialized)
|
||||
mutableStateOf<AsyncData<String?>>(AsyncData.Uninitialized)
|
||||
}
|
||||
var biometricUnlockResult by remember {
|
||||
mutableStateOf<BiometricUnlock.AuthenticationResult?>(null)
|
||||
|
|
@ -91,7 +91,7 @@ class PinUnlockPresenter @Inject constructor(
|
|||
}
|
||||
}
|
||||
val remainingAttemptsNumber = pinCodeManager.getRemainingPinCodeAttemptsNumber()
|
||||
remainingAttempts = Async.Success(remainingAttemptsNumber)
|
||||
remainingAttempts = AsyncData.Success(remainingAttemptsNumber)
|
||||
if (remainingAttemptsNumber == 0) {
|
||||
showSignOutPrompt = true
|
||||
}
|
||||
|
|
@ -139,46 +139,46 @@ class PinUnlockPresenter @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.isComplete(): Boolean {
|
||||
private fun AsyncData<PinEntry>.isComplete(): Boolean {
|
||||
return dataOrNull()?.isComplete().orFalse()
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.toText(): String {
|
||||
private fun AsyncData<PinEntry>.toText(): String {
|
||||
return dataOrNull()?.toText() ?: ""
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.clear(): Async<PinEntry> {
|
||||
private fun AsyncData<PinEntry>.clear(): AsyncData<PinEntry> {
|
||||
return when (this) {
|
||||
is Async.Success -> Async.Success(data.clear())
|
||||
is AsyncData.Success -> AsyncData.Success(data.clear())
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.process(pinKeypadModel: PinKeypadModel): Async<PinEntry> {
|
||||
private fun AsyncData<PinEntry>.process(pinKeypadModel: PinKeypadModel): AsyncData<PinEntry> {
|
||||
return when (this) {
|
||||
is Async.Success -> {
|
||||
is AsyncData.Success -> {
|
||||
val pinEntry = when (pinKeypadModel) {
|
||||
PinKeypadModel.Back -> data.deleteLast()
|
||||
is PinKeypadModel.Number -> data.addDigit(pinKeypadModel.number)
|
||||
PinKeypadModel.Empty -> data
|
||||
}
|
||||
Async.Success(pinEntry)
|
||||
AsyncData.Success(pinEntry)
|
||||
}
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.process(pinEntryAsText: String): Async<PinEntry> {
|
||||
private fun AsyncData<PinEntry>.process(pinEntryAsText: String): AsyncData<PinEntry> {
|
||||
return when (this) {
|
||||
is Async.Success -> {
|
||||
is AsyncData.Success -> {
|
||||
val pinEntry = data.fillWith(pinEntryAsText)
|
||||
Async.Success(pinEntry)
|
||||
AsyncData.Success(pinEntry)
|
||||
}
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.signOut(signOutAction: MutableState<Async<String?>>) = launch {
|
||||
private fun CoroutineScope.signOut(signOutAction: MutableState<AsyncData<String?>>) = launch {
|
||||
suspend {
|
||||
matrixClient.logout(ignoreSdkError = true)
|
||||
}.runCatchingUpdatingState(signOutAction)
|
||||
|
|
|
|||
|
|
@ -19,21 +19,21 @@ package io.element.android.features.lockscreen.impl.unlock
|
|||
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlock
|
||||
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockError
|
||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
|
||||
data class PinUnlockState(
|
||||
val pinEntry: Async<PinEntry>,
|
||||
val pinEntry: AsyncData<PinEntry>,
|
||||
val showWrongPinTitle: Boolean,
|
||||
val remainingAttempts: Async<Int>,
|
||||
val remainingAttempts: AsyncData<Int>,
|
||||
val showSignOutPrompt: Boolean,
|
||||
val signOutAction: Async<String?>,
|
||||
val signOutAction: AsyncData<String?>,
|
||||
val showBiometricUnlock: Boolean,
|
||||
val isUnlocked: Boolean,
|
||||
val biometricUnlockResult: BiometricUnlock.AuthenticationResult?,
|
||||
val eventSink: (PinUnlockEvents) -> Unit
|
||||
) {
|
||||
val isSignOutPromptCancellable = when (remainingAttempts) {
|
||||
is Async.Success -> remainingAttempts.data > 0
|
||||
is AsyncData.Success -> remainingAttempts.data > 0
|
||||
else -> true
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ package io.element.android.features.lockscreen.impl.unlock
|
|||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlock
|
||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
|
||||
open class PinUnlockStateProvider : PreviewParameterProvider<PinUnlockState> {
|
||||
override val values: Sequence<PinUnlockState>
|
||||
|
|
@ -30,7 +30,7 @@ open class PinUnlockStateProvider : PreviewParameterProvider<PinUnlockState> {
|
|||
aPinUnlockState(showSignOutPrompt = true),
|
||||
aPinUnlockState(showBiometricUnlock = false),
|
||||
aPinUnlockState(showSignOutPrompt = true, remainingAttempts = 0),
|
||||
aPinUnlockState(signOutAction = Async.Loading()),
|
||||
aPinUnlockState(signOutAction = AsyncData.Loading()),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -42,11 +42,11 @@ fun aPinUnlockState(
|
|||
showBiometricUnlock: Boolean = true,
|
||||
biometricUnlockResult: BiometricUnlock.AuthenticationResult? = null,
|
||||
isUnlocked: Boolean = false,
|
||||
signOutAction: Async<String?> = Async.Uninitialized,
|
||||
signOutAction: AsyncData<String?> = AsyncData.Uninitialized,
|
||||
) = PinUnlockState(
|
||||
pinEntry = Async.Success(pinEntry),
|
||||
pinEntry = AsyncData.Success(pinEntry),
|
||||
showWrongPinTitle = showWrongPinTitle,
|
||||
remainingAttempts = Async.Success(remainingAttempts),
|
||||
remainingAttempts = AsyncData.Success(remainingAttempts),
|
||||
showSignOutPrompt = showSignOutPrompt,
|
||||
showBiometricUnlock = showBiometricUnlock,
|
||||
signOutAction = signOutAction,
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ import io.element.android.features.lockscreen.impl.components.PinEntryTextField
|
|||
import io.element.android.features.lockscreen.impl.pin.model.PinDigit
|
||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||
import io.element.android.features.lockscreen.impl.unlock.keypad.PinKeypad
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.designsystem.atomic.atoms.RoundedIconAtom
|
||||
import io.element.android.libraries.designsystem.components.ProgressDialog
|
||||
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
|
||||
|
|
@ -92,7 +92,7 @@ fun PinUnlockView(
|
|||
onDismiss = { state.eventSink(PinUnlockEvents.ClearSignOutPrompt) },
|
||||
)
|
||||
}
|
||||
if (state.signOutAction is Async.Loading) {
|
||||
if (state.signOutAction is AsyncData.Loading) {
|
||||
ProgressDialog(text = stringResource(id = R.string.screen_signout_in_progress_dialog_content))
|
||||
}
|
||||
if (state.showBiometricUnlockError) {
|
||||
|
|
@ -335,7 +335,7 @@ private fun PinUnlockHeader(
|
|||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
color = subtitleColor,
|
||||
)
|
||||
if (!isInAppUnlock && state.pinEntry is Async.Success) {
|
||||
if (!isInAppUnlock && state.pinEntry is AsyncData.Success) {
|
||||
Spacer(Modifier.height(24.dp))
|
||||
PinDotsRow(state.pinEntry.data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
|||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||
import io.element.android.features.lockscreen.impl.pin.model.assertText
|
||||
import io.element.android.features.lockscreen.impl.unlock.keypad.PinKeypadModel
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
import io.element.android.tests.testutils.awaitLastSequentialItem
|
||||
import io.element.android.tests.testutils.consumeItemsUntilPredicate
|
||||
|
|
@ -48,15 +48,15 @@ class PinUnlockPresenterTest {
|
|||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.pinEntry).isInstanceOf(Async.Uninitialized::class.java)
|
||||
assertThat(state.pinEntry).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
assertThat(state.showWrongPinTitle).isFalse()
|
||||
assertThat(state.showSignOutPrompt).isFalse()
|
||||
assertThat(state.isUnlocked).isFalse()
|
||||
assertThat(state.signOutAction).isInstanceOf(Async.Uninitialized::class.java)
|
||||
assertThat(state.remainingAttempts).isInstanceOf(Async.Uninitialized::class.java)
|
||||
assertThat(state.signOutAction).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
assertThat(state.remainingAttempts).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
}
|
||||
consumeItemsUntilPredicate {
|
||||
it.pinEntry is Async.Success && it.remainingAttempts is Async.Success
|
||||
it.pinEntry is AsyncData.Success && it.remainingAttempts is AsyncData.Success
|
||||
}.last().also { state ->
|
||||
state.eventSink(PinUnlockEvents.OnPinKeypadPressed(PinKeypadModel.Number('1')))
|
||||
state.eventSink(PinUnlockEvents.OnPinKeypadPressed(PinKeypadModel.Number('2')))
|
||||
|
|
@ -83,7 +83,7 @@ class PinUnlockPresenterTest {
|
|||
presenter.present()
|
||||
}.test {
|
||||
val initialState = consumeItemsUntilPredicate {
|
||||
it.pinEntry is Async.Success && it.remainingAttempts is Async.Success
|
||||
it.pinEntry is AsyncData.Success && it.remainingAttempts is AsyncData.Success
|
||||
}.last()
|
||||
val numberOfAttempts = initialState.remainingAttempts.dataOrNull() ?: 0
|
||||
repeat(numberOfAttempts) {
|
||||
|
|
@ -107,7 +107,7 @@ class PinUnlockPresenterTest {
|
|||
presenter.present()
|
||||
}.test {
|
||||
consumeItemsUntilPredicate {
|
||||
it.pinEntry is Async.Success && it.remainingAttempts is Async.Success
|
||||
it.pinEntry is AsyncData.Success && it.remainingAttempts is AsyncData.Success
|
||||
}.last().also { state ->
|
||||
state.eventSink(PinUnlockEvents.OnForgetPin)
|
||||
}
|
||||
|
|
@ -125,12 +125,12 @@ class PinUnlockPresenterTest {
|
|||
state.eventSink(PinUnlockEvents.SignOut)
|
||||
}
|
||||
consumeItemsUntilPredicate { state ->
|
||||
state.signOutAction is Async.Success
|
||||
state.signOutAction is AsyncData.Success
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Async<PinEntry>.assertText(text: String) {
|
||||
private fun AsyncData<PinEntry>.assertText(text: String) {
|
||||
dataOrNull()?.assertText(text)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue