diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt index 13c63d2d02..6ea13f16a1 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt @@ -30,7 +30,7 @@ class KnockRequestsListPresenter @Inject constructor( @Composable override fun present(): KnockRequestsListState { val asyncAction = remember { mutableStateOf>(AsyncAction.Uninitialized) } - var actionTarget by remember { mutableStateOf(KnockRequestsActionTarget.None) } + var currentAction by remember { mutableStateOf(KnockRequestsAction.None) } val permissions by knockRequestsService.permissionsFlow.collectAsState() val knockRequests by knockRequestsService.knockRequestsFlow.collectAsState() @@ -40,36 +40,36 @@ class KnockRequestsListPresenter @Inject constructor( fun handleEvents(event: KnockRequestsListEvents) { when (event) { KnockRequestsListEvents.AcceptAll -> { - actionTarget = KnockRequestsActionTarget.AcceptAll + currentAction = KnockRequestsAction.AcceptAll } is KnockRequestsListEvents.Accept -> { - actionTarget = KnockRequestsActionTarget.Accept(event.knockRequest) + currentAction = KnockRequestsAction.Accept(event.knockRequest) } is KnockRequestsListEvents.Decline -> { - actionTarget = KnockRequestsActionTarget.Decline(event.knockRequest) + currentAction = KnockRequestsAction.Decline(event.knockRequest) } is KnockRequestsListEvents.DeclineAndBan -> { - actionTarget = KnockRequestsActionTarget.DeclineAndBan(event.knockRequest) + currentAction = KnockRequestsAction.DeclineAndBan(event.knockRequest) } KnockRequestsListEvents.ResetCurrentAction -> { asyncAction.value = AsyncAction.Uninitialized - actionTarget = KnockRequestsActionTarget.None + currentAction = KnockRequestsAction.None } KnockRequestsListEvents.RetryCurrentAction -> { - coroutineScope.executeAction(actionTarget, asyncAction, isActionConfirmed = true) + coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true) } KnockRequestsListEvents.ConfirmCurrentAction -> { - coroutineScope.executeAction(actionTarget, asyncAction, isActionConfirmed = true) + coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true) } } } - LaunchedEffect(actionTarget) { - executeAction(actionTarget, asyncAction, isActionConfirmed = false) + LaunchedEffect(currentAction) { + executeAction(currentAction, asyncAction, isActionConfirmed = false) } return KnockRequestsListState( knockRequests = knockRequests, - actionTarget = actionTarget, + currentAction = currentAction, permissions = permissions, asyncAction = asyncAction.value, eventSink = ::handleEvents @@ -77,35 +77,35 @@ class KnockRequestsListPresenter @Inject constructor( } private fun CoroutineScope.executeAction( - actionTarget: KnockRequestsActionTarget, + currentAction: KnockRequestsAction, asyncAction: MutableState>, isActionConfirmed: Boolean, ) = launch { - when (actionTarget) { - is KnockRequestsActionTarget.Accept -> { + when (currentAction) { + is KnockRequestsAction.Accept -> { runUpdatingState(asyncAction) { - knockRequestsService.acceptKnockRequest(actionTarget.knockRequest) + knockRequestsService.acceptKnockRequest(currentAction.knockRequest) } } - is KnockRequestsActionTarget.Decline -> { + is KnockRequestsAction.Decline -> { if (isActionConfirmed) { runUpdatingState(asyncAction) { - knockRequestsService.declineKnockRequest(actionTarget.knockRequest) + knockRequestsService.declineKnockRequest(currentAction.knockRequest) } } else { asyncAction.value = AsyncAction.ConfirmingNoParams } } - is KnockRequestsActionTarget.DeclineAndBan -> { + is KnockRequestsAction.DeclineAndBan -> { if (isActionConfirmed) { runUpdatingState(asyncAction) { - knockRequestsService.declineAndBanKnockRequest(actionTarget.knockRequest) + knockRequestsService.declineAndBanKnockRequest(currentAction.knockRequest) } } else { asyncAction.value = AsyncAction.ConfirmingNoParams } } - is KnockRequestsActionTarget.AcceptAll -> { + is KnockRequestsAction.AcceptAll -> { if (isActionConfirmed) { runUpdatingState(asyncAction) { knockRequestsService.acceptAllKnockRequests() @@ -114,7 +114,7 @@ class KnockRequestsListPresenter @Inject constructor( asyncAction.value = AsyncAction.ConfirmingNoParams } } - KnockRequestsActionTarget.None -> Unit + KnockRequestsAction.None -> Unit } } } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt index 3447034afd..fa33b074a5 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt @@ -16,7 +16,7 @@ import kotlinx.collections.immutable.ImmutableList data class KnockRequestsListState( val knockRequests: AsyncData>, - val actionTarget: KnockRequestsActionTarget, + val currentAction: KnockRequestsAction, val asyncAction: AsyncAction, val permissions: KnockRequestPermissions, val eventSink: (KnockRequestsListEvents) -> Unit, @@ -25,10 +25,10 @@ data class KnockRequestsListState( } @Immutable -sealed interface KnockRequestsActionTarget { - data object None : KnockRequestsActionTarget - data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget - data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget - data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget - data object AcceptAll : KnockRequestsActionTarget +sealed interface KnockRequestsAction { + data object None : KnockRequestsAction + data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsAction + data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsAction + data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsAction + data object AcceptAll : KnockRequestsAction } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStateProvider.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStateProvider.kt index 7b5ee23353..a8d898b08e 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStateProvider.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStateProvider.kt @@ -65,7 +65,7 @@ open class KnockRequestsListStateProvider : PreviewParameterProvider> = AsyncData.Success(persistentListOf()), - actionTarget: KnockRequestsActionTarget = KnockRequestsActionTarget.None, + currentAction: KnockRequestsAction = KnockRequestsAction.None, asyncAction: AsyncAction = AsyncAction.Uninitialized, permissions: KnockRequestPermissions = KnockRequestPermissions( canAccept = true, @@ -142,7 +142,7 @@ fun aKnockRequestsListState( eventSink: (KnockRequestsListEvents) -> Unit = {}, ) = KnockRequestsListState( knockRequests = knockRequests, - actionTarget = actionTarget, + currentAction = currentAction, asyncAction = asyncAction, permissions = permissions, eventSink = eventSink, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt index 2606bf26c4..09f916ae09 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt @@ -153,7 +153,7 @@ private fun KnockRequestsListContent( else -> Unit } KnockRequestsActionsView( - actionTarget = state.actionTarget, + currentAction = state.currentAction, asyncAction = state.asyncAction, onConfirm = { state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) @@ -181,7 +181,7 @@ private fun KnockRequestsListContent( @Composable private fun KnockRequestsActionsView( - actionTarget: KnockRequestsActionTarget, + currentAction: KnockRequestsAction, asyncAction: AsyncAction, onConfirm: () -> Unit, onDismiss: () -> Unit, @@ -195,20 +195,20 @@ private fun KnockRequestsActionsView( onErrorDismiss = onDismiss, confirmationDialog = { KnockRequestActionConfirmation( - actionTarget = actionTarget, + currentAction = currentAction, onSubmit = onConfirm, onDismiss = onDismiss, ) }, progressDialog = { - KnockRequestActionProgress(target = actionTarget) + KnockRequestActionProgress(target = currentAction) }, errorMessage = { - when (actionTarget) { - is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description) - is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description) - is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description) - KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_failed_alert_description) + when (currentAction) { + is KnockRequestsAction.Accept -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description) + is KnockRequestsAction.Decline -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description) + is KnockRequestsAction.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description) + KnockRequestsAction.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_failed_alert_description) else -> "" } }, @@ -219,25 +219,25 @@ private fun KnockRequestsActionsView( @Composable private fun KnockRequestActionConfirmation( - actionTarget: KnockRequestsActionTarget, + currentAction: KnockRequestsAction, onSubmit: () -> Unit, onDismiss: () -> Unit, modifier: Modifier = Modifier, ) { - val (title, content, submitText) = when (actionTarget) { - KnockRequestsActionTarget.AcceptAll -> Triple( + val (title, content, submitText) = when (currentAction) { + KnockRequestsAction.AcceptAll -> Triple( stringResource(R.string.screen_knock_requests_list_accept_all_alert_title), stringResource(R.string.screen_knock_requests_list_accept_all_alert_description), stringResource(R.string.screen_knock_requests_list_accept_all_alert_confirm_button_title), ) - is KnockRequestsActionTarget.Decline -> Triple( + is KnockRequestsAction.Decline -> Triple( stringResource(R.string.screen_knock_requests_list_decline_alert_title), - stringResource(R.string.screen_knock_requests_list_decline_alert_description, actionTarget.knockRequest.getBestName()), + stringResource(R.string.screen_knock_requests_list_decline_alert_description, currentAction.knockRequest.getBestName()), stringResource(R.string.screen_knock_requests_list_decline_alert_confirm_button_title), ) - is KnockRequestsActionTarget.DeclineAndBan -> Triple( + is KnockRequestsAction.DeclineAndBan -> Triple( stringResource(R.string.screen_knock_requests_list_ban_alert_title), - stringResource(R.string.screen_knock_requests_list_ban_alert_description, actionTarget.knockRequest.getBestName()), + stringResource(R.string.screen_knock_requests_list_ban_alert_description, currentAction.knockRequest.getBestName()), stringResource(R.string.screen_knock_requests_list_ban_alert_confirm_button_title), ) else -> return @@ -254,14 +254,14 @@ private fun KnockRequestActionConfirmation( @Composable private fun KnockRequestActionProgress( - target: KnockRequestsActionTarget, + target: KnockRequestsAction, modifier: Modifier = Modifier, ) { val progressText = when (target) { - is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_loading_title) - is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_decline_loading_title) - is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_ban_loading_title) - KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_loading_title) + is KnockRequestsAction.Accept -> stringResource(R.string.screen_knock_requests_list_accept_loading_title) + is KnockRequestsAction.Decline -> stringResource(R.string.screen_knock_requests_list_decline_loading_title) + is KnockRequestsAction.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_ban_loading_title) + KnockRequestsAction.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_loading_title) else -> return } ProgressDialog( diff --git a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt index 010a921515..d74155ead1 100644 --- a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt +++ b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt @@ -69,7 +69,7 @@ class KnockRequestsListPresenterTest { skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Accept(knockRequestPresentable)) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Accept(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> @@ -79,7 +79,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty() } assert(acceptLambda).isCalledOnce() @@ -103,7 +103,7 @@ class KnockRequestsListPresenterTest { skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Accept(knockRequestPresentable)) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Accept(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> @@ -120,7 +120,7 @@ class KnockRequestsListPresenterTest { skipItems(1) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull()).hasSize(1) } assert(acceptLambda).isCalledExactly(2) @@ -144,7 +144,7 @@ class KnockRequestsListPresenterTest { skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Decline(knockRequestPresentable)) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Decline(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) } @@ -158,7 +158,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty() } } @@ -182,7 +182,7 @@ class KnockRequestsListPresenterTest { skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.DeclineAndBan(knockRequestPresentable)) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.DeclineAndBan(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) } @@ -196,7 +196,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty() } } @@ -223,7 +223,7 @@ class KnockRequestsListPresenterTest { } skipItems(1) awaitItem().also { state -> - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.AcceptAll) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) } @@ -237,7 +237,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty() } } @@ -265,7 +265,7 @@ class KnockRequestsListPresenterTest { } skipItems(1) awaitItem().also { state -> - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.AcceptAll) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) } @@ -279,7 +279,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java) - assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None) + assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None) assertThat(state.knockRequests.dataOrNull()).hasSize(1) } } diff --git a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt index 2de89aef58..af2bfefd16 100644 --- a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt +++ b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt @@ -109,7 +109,7 @@ class KnockRequestsListViewTest { aKnockRequestsListState( knockRequests = AsyncData.Success(knockRequests), asyncAction = AsyncAction.Failure(Throwable("Failed to accept all")), - actionTarget = KnockRequestsActionTarget.AcceptAll, + currentAction = KnockRequestsAction.AcceptAll, eventSink = eventsRecorder, ), ) @@ -125,7 +125,7 @@ class KnockRequestsListViewTest { aKnockRequestsListState( knockRequests = AsyncData.Success(knockRequests), asyncAction = AsyncAction.Failure(Throwable("Failed to accept all")), - actionTarget = KnockRequestsActionTarget.AcceptAll, + currentAction = KnockRequestsAction.AcceptAll, eventSink = eventsRecorder, ), ) @@ -141,7 +141,7 @@ class KnockRequestsListViewTest { aKnockRequestsListState( knockRequests = AsyncData.Success(knockRequests), asyncAction = AsyncAction.ConfirmingNoParams, - actionTarget = KnockRequestsActionTarget.AcceptAll, + currentAction = KnockRequestsAction.AcceptAll, eventSink = eventsRecorder, ), )