Change type of SecureBackupEnableState.enableAction from AsyncData to AsyncAction
This commit is contained in:
parent
3cb75c3f31
commit
fa09b70411
5 changed files with 24 additions and 31 deletions
|
|
@ -22,7 +22,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import io.element.android.features.securebackup.impl.loggerTagDisable
|
import io.element.android.features.securebackup.impl.loggerTagDisable
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
|
|
@ -36,14 +36,14 @@ class SecureBackupEnablePresenter @Inject constructor(
|
||||||
) : Presenter<SecureBackupEnableState> {
|
) : Presenter<SecureBackupEnableState> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): SecureBackupEnableState {
|
override fun present(): SecureBackupEnableState {
|
||||||
val enableAction = remember { mutableStateOf<AsyncData<Unit>>(AsyncData.Uninitialized) }
|
val enableAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
fun handleEvents(event: SecureBackupEnableEvents) {
|
fun handleEvents(event: SecureBackupEnableEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is SecureBackupEnableEvents.EnableBackup ->
|
is SecureBackupEnableEvents.EnableBackup ->
|
||||||
coroutineScope.enableBackup(enableAction)
|
coroutineScope.enableBackup(enableAction)
|
||||||
SecureBackupEnableEvents.DismissDialog -> {
|
SecureBackupEnableEvents.DismissDialog -> {
|
||||||
enableAction.value = AsyncData.Uninitialized
|
enableAction.value = AsyncAction.Uninitialized
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -54,7 +54,7 @@ class SecureBackupEnablePresenter @Inject constructor(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CoroutineScope.enableBackup(action: MutableState<AsyncData<Unit>>) = launch {
|
private fun CoroutineScope.enableBackup(action: MutableState<AsyncAction<Unit>>) = launch {
|
||||||
suspend {
|
suspend {
|
||||||
Timber.tag(loggerTagDisable.value).d("Calling encryptionService.enableBackups()")
|
Timber.tag(loggerTagDisable.value).d("Calling encryptionService.enableBackups()")
|
||||||
encryptionService.enableBackups().getOrThrow()
|
encryptionService.enableBackups().getOrThrow()
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@
|
||||||
|
|
||||||
package io.element.android.features.securebackup.impl.enable
|
package io.element.android.features.securebackup.impl.enable
|
||||||
|
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
data class SecureBackupEnableState(
|
data class SecureBackupEnableState(
|
||||||
val enableAction: AsyncData<Unit>,
|
val enableAction: AsyncAction<Unit>,
|
||||||
val eventSink: (SecureBackupEnableEvents) -> Unit
|
val eventSink: (SecureBackupEnableEvents) -> Unit
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -17,20 +17,20 @@
|
||||||
package io.element.android.features.securebackup.impl.enable
|
package io.element.android.features.securebackup.impl.enable
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
open class SecureBackupEnableStateProvider : PreviewParameterProvider<SecureBackupEnableState> {
|
open class SecureBackupEnableStateProvider : PreviewParameterProvider<SecureBackupEnableState> {
|
||||||
override val values: Sequence<SecureBackupEnableState>
|
override val values: Sequence<SecureBackupEnableState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aSecureBackupEnableState(),
|
aSecureBackupEnableState(),
|
||||||
aSecureBackupEnableState(enableAction = AsyncData.Loading()),
|
aSecureBackupEnableState(enableAction = AsyncAction.Loading),
|
||||||
aSecureBackupEnableState(enableAction = AsyncData.Failure(Exception("Failed to enable"))),
|
aSecureBackupEnableState(enableAction = AsyncAction.Failure(Exception("Failed to enable"))),
|
||||||
// Add other states here
|
// Add other states here
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aSecureBackupEnableState(
|
fun aSecureBackupEnableState(
|
||||||
enableAction: AsyncData<Unit> = AsyncData.Uninitialized,
|
enableAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
|
||||||
) = SecureBackupEnableState(
|
) = SecureBackupEnableState(
|
||||||
enableAction = enableAction,
|
enableAction = enableAction,
|
||||||
eventSink = {}
|
eventSink = {}
|
||||||
|
|
|
||||||
|
|
@ -19,16 +19,14 @@ package io.element.android.features.securebackup.impl.enable
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
import androidx.compose.foundation.layout.ColumnScope
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.res.vectorResource
|
import androidx.compose.ui.res.vectorResource
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import io.element.android.features.securebackup.impl.R
|
import io.element.android.features.securebackup.impl.R
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
|
||||||
import io.element.android.libraries.designsystem.atomic.pages.FlowStepPage
|
import io.element.android.libraries.designsystem.atomic.pages.FlowStepPage
|
||||||
import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog
|
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.theme.components.Button
|
import io.element.android.libraries.designsystem.theme.components.Button
|
||||||
|
|
@ -41,11 +39,6 @@ fun SecureBackupEnableView(
|
||||||
onBackClicked: () -> Unit,
|
onBackClicked: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
LaunchedEffect(state.enableAction) {
|
|
||||||
if (state.enableAction is AsyncData.Success) {
|
|
||||||
onDone()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FlowStepPage(
|
FlowStepPage(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
onBackClicked = onBackClicked,
|
onBackClicked = onBackClicked,
|
||||||
|
|
@ -53,12 +46,12 @@ fun SecureBackupEnableView(
|
||||||
iconVector = ImageVector.vectorResource(CommonDrawables.ic_key),
|
iconVector = ImageVector.vectorResource(CommonDrawables.ic_key),
|
||||||
buttons = { Buttons(state = state) }
|
buttons = { Buttons(state = state) }
|
||||||
)
|
)
|
||||||
if (state.enableAction is AsyncData.Failure) {
|
AsyncActionView(
|
||||||
ErrorDialog(
|
async = state.enableAction,
|
||||||
content = state.enableAction.error.let { it.message ?: it.toString() },
|
progressDialog = { },
|
||||||
onDismiss = { state.eventSink.invoke(SecureBackupEnableEvents.DismissDialog) },
|
onSuccess = { onDone() },
|
||||||
)
|
onErrorDismiss = { state.eventSink.invoke(SecureBackupEnableEvents.DismissDialog) }
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import app.cash.molecule.RecompositionMode
|
||||||
import app.cash.molecule.moleculeFlow
|
import app.cash.molecule.moleculeFlow
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
import io.element.android.libraries.matrix.test.AN_EXCEPTION
|
import io.element.android.libraries.matrix.test.AN_EXCEPTION
|
||||||
import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService
|
import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService
|
||||||
|
|
@ -40,7 +40,7 @@ class SecureBackupEnablePresenterTest {
|
||||||
presenter.present()
|
presenter.present()
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.enableAction).isEqualTo(AsyncData.Uninitialized)
|
assertThat(initialState.enableAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,9 +53,9 @@ class SecureBackupEnablePresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(SecureBackupEnableEvents.EnableBackup)
|
initialState.eventSink(SecureBackupEnableEvents.EnableBackup)
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.enableAction).isInstanceOf(AsyncData.Loading::class.java)
|
assertThat(loadingState.enableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.enableAction).isEqualTo(AsyncData.Success(Unit))
|
assertThat(finalState.enableAction).isEqualTo(AsyncAction.Success(Unit))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,12 +70,12 @@ class SecureBackupEnablePresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(SecureBackupEnableEvents.EnableBackup)
|
initialState.eventSink(SecureBackupEnableEvents.EnableBackup)
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.enableAction).isInstanceOf(AsyncData.Loading::class.java)
|
assertThat(loadingState.enableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
val errorState = awaitItem()
|
val errorState = awaitItem()
|
||||||
assertThat(errorState.enableAction).isEqualTo(AsyncData.Failure<Unit>(AN_EXCEPTION))
|
assertThat(errorState.enableAction).isEqualTo(AsyncAction.Failure(AN_EXCEPTION))
|
||||||
errorState.eventSink(SecureBackupEnableEvents.DismissDialog)
|
errorState.eventSink(SecureBackupEnableEvents.DismissDialog)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.enableAction).isEqualTo(AsyncData.Uninitialized)
|
assertThat(finalState.enableAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue