Skip to content

Commit b617770

Browse files
committed
Improve style of PdfGenerationBottomSheet
1 parent 97b4d33 commit b617770

File tree

2 files changed

+59
-24
lines changed

2 files changed

+59
-24
lines changed

app/src/main/java/org/mydomain/myscan/view/DocumentScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ fun DocumentScreen(
136136
NewDocumentDialog(onConfirm = onStartNew, showNewDocDialog)
137137
}
138138
if (showPdfDialog.value) {
139-
PdfGenerationDialogWrapper(
139+
PdfGenerationBottomSheetWrapper(
140140
onDismiss = { showPdfDialog.value = false },
141141
pdfActions = pdfActions,
142142
)

app/src/main/java/org/mydomain/myscan/view/PdfGenerationBottomSheet.kt

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,23 @@ package org.mydomain.myscan.view
1717
import android.content.Context
1818
import android.text.format.Formatter
1919
import androidx.compose.foundation.layout.Arrangement
20+
import androidx.compose.foundation.layout.Box
2021
import androidx.compose.foundation.layout.Column
2122
import androidx.compose.foundation.layout.Row
2223
import androidx.compose.foundation.layout.Spacer
2324
import androidx.compose.foundation.layout.fillMaxWidth
2425
import androidx.compose.foundation.layout.height
2526
import androidx.compose.foundation.layout.padding
27+
import androidx.compose.foundation.layout.size
2628
import androidx.compose.foundation.layout.width
2729
import androidx.compose.material.icons.Icons
2830
import androidx.compose.material.icons.automirrored.filled.OpenInNew
31+
import androidx.compose.material.icons.filled.Close
32+
import androidx.compose.material.icons.filled.PictureAsPdf
2933
import androidx.compose.material3.Button
3034
import androidx.compose.material3.ExperimentalMaterial3Api
3135
import androidx.compose.material3.Icon
36+
import androidx.compose.material3.IconButton
3237
import androidx.compose.material3.LinearProgressIndicator
3338
import androidx.compose.material3.MaterialTheme
3439
import androidx.compose.material3.ModalBottomSheet
@@ -42,6 +47,7 @@ import androidx.compose.runtime.getValue
4247
import androidx.compose.runtime.mutableStateOf
4348
import androidx.compose.runtime.remember
4449
import androidx.compose.runtime.setValue
50+
import androidx.compose.ui.Alignment
4551
import androidx.compose.ui.Modifier
4652
import androidx.compose.ui.platform.LocalContext
4753
import androidx.compose.ui.tooling.preview.Preview
@@ -57,7 +63,7 @@ import java.util.Locale
5763

5864
@OptIn(ExperimentalMaterial3Api::class)
5965
@Composable
60-
fun PdfGenerationDialogWrapper(
66+
fun PdfGenerationBottomSheetWrapper(
6167
onDismiss: () -> Unit,
6268
pdfActions: PdfGenerationActions,
6369
modifier: Modifier = Modifier,
@@ -105,9 +111,17 @@ fun PdfGenerationBottomSheet(
105111
Column(
106112
modifier = Modifier
107113
.fillMaxWidth()
108-
.padding(24.dp)
114+
.padding(top = 0.dp, start = 16.dp, end = 16.dp, bottom = 16.dp)
109115
) {
110-
Text("Generate PDF", style = MaterialTheme.typography.headlineSmall)
116+
CloseButton(onDismiss)
117+
118+
Row {
119+
Icon(Icons.Default.PictureAsPdf, contentDescription = "PDF",
120+
modifier = Modifier
121+
.size(34.dp)
122+
.padding(end = 8.dp))
123+
Text("Generate PDF", style = MaterialTheme.typography.headlineSmall)
124+
}
111125

112126
Spacer(Modifier.height(16.dp))
113127

@@ -135,11 +149,6 @@ fun PdfGenerationBottomSheet(
135149
horizontalArrangement = Arrangement.spacedBy(8.dp),
136150
modifier = Modifier.fillMaxWidth()
137151
) {
138-
OutlinedButton(
139-
onClick = onDismiss,
140-
modifier = Modifier.weight(1f)
141-
) { Text("Close") }
142-
143152
OutlinedButton(
144153
onClick = onShare,
145154
enabled = pdf != null,
@@ -169,6 +178,21 @@ fun PdfGenerationBottomSheet(
169178
}
170179
}
171180

181+
@Composable
182+
private fun CloseButton(onDismiss: () -> Unit) {
183+
Box(Modifier.fillMaxWidth()) {
184+
IconButton(
185+
onClick = onDismiss,
186+
modifier = Modifier.align(Alignment.TopEnd)
187+
) {
188+
Icon(
189+
imageVector = Icons.Default.Close,
190+
contentDescription = "Close"
191+
)
192+
}
193+
}
194+
}
195+
172196
fun defaultFilename(): String {
173197
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
174198
return "scan_$timestamp.pdf"
@@ -182,29 +206,40 @@ fun formatFileSize(sizeInBytes: Long?, context: Context): String {
182206
@Preview(showBackground = true)
183207
@Composable
184208
fun PreviewPdfGenerationDialogDuringGeneration() {
185-
MyScanTheme {
186-
PdfGenerationBottomSheet(
187-
filename = "scan_20250702_174042.pdf",
188-
uiState = PdfGenerationUiState(isGenerating = true),
189-
onFilenameChange = {},
190-
onDismiss = {},
191-
onShare = {},
192-
onSave = {},
193-
onOpen = {},
194-
)
195-
}
209+
PreviewToCustomize(
210+
uiState = PdfGenerationUiState(isGenerating = true)
211+
)
196212
}
197213

198214
@Preview(showBackground = true)
199215
@Composable
200216
fun PreviewPdfGenerationDialogAfterGeneration() {
217+
PreviewToCustomize(
218+
uiState = PdfGenerationUiState(
219+
isGenerating = false,
220+
generatedPdf = GeneratedPdf("file://fake.pdf".toUri(), 442897L, 3)
221+
)
222+
)
223+
}
224+
225+
@Preview(showBackground = true)
226+
@Composable
227+
fun PreviewPdfGenerationDialogAfterSave() {
228+
PreviewToCustomize(
229+
uiState = PdfGenerationUiState(
230+
isGenerating = false,
231+
generatedPdf = GeneratedPdf("file://fake.pdf".toUri(), 442897L, 3),
232+
savedFileUri = "file:///fake".toUri()
233+
)
234+
)
235+
}
236+
237+
@Composable
238+
fun PreviewToCustomize(uiState: PdfGenerationUiState) {
201239
MyScanTheme {
202240
PdfGenerationBottomSheet(
203241
filename = "scan_20250702_174042.pdf",
204-
uiState = PdfGenerationUiState(
205-
isGenerating = false,
206-
generatedPdf = GeneratedPdf("file://fake.pdf".toUri(), 42897L, 3)
207-
),
242+
uiState = uiState,
208243
onFilenameChange = {},
209244
onDismiss = {},
210245
onShare = {},

0 commit comments

Comments
 (0)