@@ -36,10 +36,11 @@ import androidx.compose.foundation.lazy.itemsIndexed
3636import androidx.compose.material.icons.Icons
3737import androidx.compose.material.icons.automirrored.filled.ArrowBack
3838import androidx.compose.material.icons.filled.Add
39- import androidx.compose.material.icons.filled.Close
4039import androidx.compose.material.icons.filled.Download
40+ import androidx.compose.material.icons.filled.RestartAlt
4141import androidx.compose.material.icons.filled.Share
4242import androidx.compose.material.icons.outlined.Delete
43+ import androidx.compose.material3.AlertDialog
4344import androidx.compose.material3.BottomAppBar
4445import androidx.compose.material3.Button
4546import androidx.compose.material3.ExperimentalMaterial3Api
@@ -50,13 +51,15 @@ import androidx.compose.material3.MaterialTheme
5051import androidx.compose.material3.Scaffold
5152import androidx.compose.material3.SmallFloatingActionButton
5253import androidx.compose.material3.Text
54+ import androidx.compose.material3.TextButton
5355import androidx.compose.material3.TopAppBar
5456import androidx.compose.material3.TopAppBarDefaults
5557import androidx.compose.runtime.Composable
5658import androidx.compose.runtime.LaunchedEffect
5759import androidx.compose.runtime.MutableIntState
5860import androidx.compose.runtime.MutableState
5961import androidx.compose.runtime.mutableIntStateOf
62+ import androidx.compose.runtime.mutableStateOf
6063import androidx.compose.runtime.saveable.rememberSaveable
6164import androidx.compose.ui.Alignment
6265import androidx.compose.ui.Modifier
@@ -78,9 +81,11 @@ fun DocumentScreen(
7881 toCameraScreen : () -> Unit ,
7982 onSavePressed : () -> Unit ,
8083 onSharePressed : () -> Unit ,
84+ onStartNew : () -> Unit ,
8185 onDeleteImage : (String ) -> Unit ,
8286) {
8387 // TODO Check how often images are loaded
88+ var showDialog = rememberSaveable { mutableStateOf(false ) }
8489 val currentPageIndex = rememberSaveable { mutableIntStateOf(0 ) }
8590 if (currentPageIndex.intValue >= pageIds.size) {
8691 currentPageIndex.intValue = pageIds.size - 1
@@ -122,14 +127,19 @@ fun DocumentScreen(
122127 }
123128 },
124129 floatingActionButton = {
125- FloatingActionButton (onClick = toCameraScreen ) {
126- Icon (Icons .Default .Close , contentDescription = " Close" )
130+ FloatingActionButton (onClick = { showDialog.value = true } ) {
131+ Icon (Icons .Default .RestartAlt , contentDescription = " Close" )
127132 }
128133 }
129134 )
130135 }
131136 }
132- ) { padding -> DocumentPreview (pageIds, imageLoader, currentPageIndex, onDeleteImage, padding) }
137+ ) { padding ->
138+ DocumentPreview (pageIds, imageLoader, currentPageIndex, onDeleteImage, padding)
139+ if (showDialog.value) {
140+ NewDocumentDialog (onConfirm = onStartNew, showDialog)
141+ }
142+ }
133143}
134144
135145@Composable
@@ -171,13 +181,16 @@ private fun DocumentPreview(
171181 }
172182 SmallFloatingActionButton (
173183 onClick = { onDeleteImage(imageId) },
174- modifier = Modifier .align(Alignment .TopEnd ).padding(4 .dp)
184+ modifier = Modifier
185+ .align(Alignment .TopEnd )
186+ .padding(4 .dp)
175187 ) {
176188 Icon (imageVector = Icons .Outlined .Delete , contentDescription = " Delete page" )
177189 }
178190 Text (" ${currentPageIndex.value + 1 } / ${pageIds.size} " ,
179191 color = MaterialTheme .colorScheme.inverseOnSurface,
180- modifier = Modifier .align(Alignment .BottomEnd )
192+ modifier = Modifier
193+ .align(Alignment .BottomEnd )
181194 .padding(all = 8 .dp)
182195 .background(MaterialTheme .colorScheme.inverseSurface.copy(alpha = 0.5f ))
183196 .padding(all = 4 .dp)
@@ -238,6 +251,28 @@ private fun PageList(
238251 }
239252}
240253
254+ @Composable
255+ fun NewDocumentDialog (onConfirm : () -> Unit , showDialog : MutableState <Boolean >) {
256+ AlertDialog (
257+ title = { Text (" New document" ) },
258+ text = { Text (" The current document will be lost if you haven't saved it. Do you want to continue?" ) },
259+ confirmButton = {
260+ TextButton (onClick = {
261+ showDialog.value = false
262+ onConfirm()
263+ }) {
264+ Text (" Yes" )
265+ }
266+ },
267+ dismissButton = {
268+ TextButton (onClick = { showDialog.value = false }) {
269+ Text (" Cancel" )
270+ }
271+ },
272+ onDismissRequest = { showDialog.value = false },
273+ )
274+ }
275+
241276@Composable
242277@Preview
243278fun DocumentScreenPreview () {
@@ -253,6 +288,7 @@ fun DocumentScreenPreview() {
253288 toCameraScreen = {},
254289 onSavePressed = {},
255290 onSharePressed = {},
291+ onStartNew = {},
256292 onDeleteImage = { _ -> {} }
257293 )
258294 }
0 commit comments