Skip to content

Commit 759cd0f

Browse files
committed
knock requests : manage remaining ui states
1 parent 33c02c1 commit 759cd0f

File tree

2 files changed

+78
-16
lines changed

2 files changed

+78
-16
lines changed

features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ class KnockRequestsListPresenter @Inject constructor(
5858
actionTarget = KnockRequestsActionTarget.DeclineAndBan(event.knockRequest)
5959
}
6060
KnockRequestsListEvents.ResetCurrentAction -> {
61+
asyncAction.value = AsyncAction.Uninitialized
6162
actionTarget = KnockRequestsActionTarget.None
63+
targetActionConfirmed = false
6264
}
6365
KnockRequestsListEvents.RetryCurrentAction -> {
6466
retryCount++
@@ -103,10 +105,7 @@ class KnockRequestsListPresenter @Inject constructor(
103105
asyncAction.value = AsyncAction.ConfirmingNoParams
104106
}
105107
}
106-
KnockRequestsActionTarget.None -> {
107-
targetActionConfirmed = false
108-
asyncAction.value = AsyncAction.Uninitialized
109-
}
108+
KnockRequestsActionTarget.None -> Unit
110109
}
111110
}
112111

features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.animation.animateContentSize
1111
import androidx.compose.foundation.background
1212
import androidx.compose.foundation.clickable
1313
import androidx.compose.foundation.layout.Arrangement
14+
import androidx.compose.foundation.layout.Arrangement.spacedBy
1415
import androidx.compose.foundation.layout.Box
1516
import androidx.compose.foundation.layout.Column
1617
import androidx.compose.foundation.layout.PaddingValues
@@ -72,7 +73,6 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold
7273
import io.element.android.libraries.designsystem.theme.components.Text
7374
import io.element.android.libraries.designsystem.theme.components.TextButton
7475
import io.element.android.libraries.designsystem.theme.components.TopAppBar
75-
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
7676
import io.element.android.libraries.ui.strings.CommonStrings
7777
import kotlinx.collections.immutable.ImmutableList
7878

@@ -137,10 +137,18 @@ private fun KnockRequestsListContent(
137137
}
138138
}
139139
is AsyncData.Loading -> {
140-
CircularProgressIndicator(
141-
modifier = Modifier.align(Alignment.Center),
142-
color = ElementTheme.colors.iconPrimary,
143-
)
140+
Column(
141+
horizontalAlignment = Alignment.CenterHorizontally,
142+
verticalArrangement = spacedBy(16.dp),
143+
modifier = Modifier.align(Alignment.Center)
144+
) {
145+
CircularProgressIndicator(color = ElementTheme.colors.iconPrimary)
146+
Text(
147+
text = stringResource(R.string.screen_knock_requests_list_initial_loading_title),
148+
style = ElementTheme.typography.fontBodyLgRegular,
149+
color = ElementTheme.colors.textPrimary,
150+
)
151+
}
144152
}
145153
else -> Unit
146154
}
@@ -186,23 +194,78 @@ private fun KnockRequestsActionsView(
186194
onSuccess = { onDismiss() },
187195
onErrorDismiss = onDismiss,
188196
confirmationDialog = {
189-
ConfirmationDialog(
190-
title = "Confirmation",
191-
content = "Are you sure?",
192-
onSubmitClick = onConfirm,
197+
KnockRequestActionConfirmation(
198+
actionTarget = actionTarget,
199+
onSubmit = onConfirm,
193200
onDismiss = onDismiss,
194201
)
195202
},
196203
progressDialog = {
197-
ProgressDialog(
198-
text = "Loading",
199-
)
204+
KnockRequestActionProgress(target = actionTarget)
205+
},
206+
errorMessage = {
207+
when (actionTarget) {
208+
is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
209+
is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
210+
is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
211+
KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
212+
else -> ""
213+
}
200214
},
201215
onRetry = onRetry,
202216
)
203217
}
204218
}
205219

220+
@Composable
221+
private fun KnockRequestActionConfirmation(
222+
actionTarget: KnockRequestsActionTarget,
223+
onSubmit: () -> Unit,
224+
onDismiss: () -> Unit,
225+
modifier: Modifier = Modifier,
226+
) {
227+
val (title, content) = when (actionTarget) {
228+
KnockRequestsActionTarget.AcceptAll -> Pair(
229+
stringResource(R.string.screen_knock_requests_list_accept_all_alert_title),
230+
stringResource(R.string.screen_knock_requests_list_accept_all_alert_description),
231+
)
232+
is KnockRequestsActionTarget.Decline -> Pair(
233+
stringResource(R.string.screen_knock_requests_list_decline_alert_title),
234+
stringResource(R.string.screen_knock_requests_list_decline_alert_description, actionTarget.knockRequest.getBestName()),
235+
)
236+
is KnockRequestsActionTarget.DeclineAndBan -> Pair(
237+
stringResource(R.string.screen_knock_requests_list_ban_alert_title),
238+
stringResource(R.string.screen_knock_requests_list_ban_alert_description, actionTarget.knockRequest.getBestName()),
239+
)
240+
else -> return
241+
}
242+
ConfirmationDialog(
243+
title = title,
244+
content = content,
245+
onSubmitClick = onSubmit,
246+
onDismiss = onDismiss,
247+
modifier = modifier,
248+
)
249+
}
250+
251+
@Composable
252+
private fun KnockRequestActionProgress(
253+
target: KnockRequestsActionTarget,
254+
modifier: Modifier = Modifier,
255+
) {
256+
val progressText = when (target) {
257+
is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_loading_title)
258+
is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_decline_loading_title)
259+
is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_ban_loading_title)
260+
KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_loading_title)
261+
else -> return
262+
}
263+
ProgressDialog(
264+
text = progressText,
265+
modifier = modifier,
266+
)
267+
}
268+
206269
@Composable
207270
private fun KnockRequestsList(
208271
knockRequests: ImmutableList<KnockRequestPresentable>,

0 commit comments

Comments
 (0)