@@ -11,6 +11,7 @@ import androidx.compose.animation.animateContentSize
1111import androidx.compose.foundation.background
1212import androidx.compose.foundation.clickable
1313import androidx.compose.foundation.layout.Arrangement
14+ import androidx.compose.foundation.layout.Arrangement.spacedBy
1415import androidx.compose.foundation.layout.Box
1516import androidx.compose.foundation.layout.Column
1617import androidx.compose.foundation.layout.PaddingValues
@@ -72,7 +73,6 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold
7273import io.element.android.libraries.designsystem.theme.components.Text
7374import io.element.android.libraries.designsystem.theme.components.TextButton
7475import io.element.android.libraries.designsystem.theme.components.TopAppBar
75- import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
7676import io.element.android.libraries.ui.strings.CommonStrings
7777import 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
207270private fun KnockRequestsList (
208271 knockRequests : ImmutableList <KnockRequestPresentable >,
0 commit comments