@@ -20,14 +20,17 @@ import androidx.compose.foundation.background
2020import androidx.compose.foundation.layout.Box
2121import androidx.compose.foundation.layout.Column
2222import androidx.compose.foundation.layout.Spacer
23+ import androidx.compose.foundation.layout.fillMaxWidth
2324import androidx.compose.foundation.layout.height
2425import androidx.compose.foundation.layout.padding
2526import androidx.compose.foundation.shape.RoundedCornerShape
2627import androidx.compose.material3.MaterialTheme
2728import androidx.compose.runtime.Composable
29+ import androidx.compose.runtime.DisposableEffect
2830import androidx.compose.runtime.Immutable
2931import androidx.compose.ui.Alignment
3032import androidx.compose.ui.Modifier
33+ import androidx.compose.ui.res.stringResource
3134import androidx.compose.ui.tooling.preview.Preview
3235import androidx.compose.ui.unit.dp
3336import androidx.compose.ui.window.Dialog
@@ -37,21 +40,32 @@ import io.element.android.libraries.designsystem.preview.ElementThemedPreview
3740import io.element.android.libraries.designsystem.preview.PreviewGroup
3841import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
3942import io.element.android.libraries.designsystem.theme.components.Text
43+ import io.element.android.libraries.designsystem.theme.components.TextButton
44+ import io.element.android.libraries.ui.strings.CommonStrings
45+ import timber.log.Timber
4046
4147@Composable
4248fun ProgressDialog (
4349 modifier : Modifier = Modifier ,
4450 text : String? = null,
4551 type : ProgressDialogType = ProgressDialogType .Indeterminate ,
46- onDismiss : () -> Unit = {},
52+ isCancellable : Boolean = false,
53+ onDismissRequest : () -> Unit = {},
4754) {
55+ DisposableEffect (Unit ) {
56+ onDispose {
57+ Timber .v(" OnDispose progressDialog" )
58+ }
59+ }
4860 Dialog (
49- onDismissRequest = onDismiss ,
61+ onDismissRequest = onDismissRequest ,
5062 properties = DialogProperties (dismissOnBackPress = false , dismissOnClickOutside = false )
5163 ) {
5264 ProgressDialogContent (
5365 modifier = modifier,
5466 text = text,
67+ isCancellable = isCancellable,
68+ onCancelClicked = onDismissRequest,
5569 progressIndicator = {
5670 when (type) {
5771 is ProgressDialogType .Indeterminate -> {
@@ -81,6 +95,8 @@ sealed interface ProgressDialogType {
8195private fun ProgressDialogContent (
8296 modifier : Modifier = Modifier ,
8397 text : String? = null,
98+ isCancellable : Boolean = true,
99+ onCancelClicked : () -> Unit = {},
84100 progressIndicator : @Composable () -> Unit = {
85101 CircularProgressIndicator (
86102 color = MaterialTheme .colorScheme.primary
@@ -107,6 +123,17 @@ private fun ProgressDialogContent(
107123 color = MaterialTheme .colorScheme.primary,
108124 )
109125 }
126+ if (isCancellable) {
127+ Spacer (modifier = Modifier .height(24 .dp))
128+ Box (
129+ modifier = Modifier .fillMaxWidth(),
130+ contentAlignment = Alignment .BottomEnd
131+ ) {
132+ TextButton (onClick = onCancelClicked) {
133+ Text (stringResource(id = CommonStrings .action_cancel))
134+ }
135+ }
136+ }
110137 }
111138 }
112139}
0 commit comments