Skip to content

Commit 25c47a5

Browse files
committed
DocumentScreen layout: big image + miniatures
1 parent b8492b5 commit 25c47a5

File tree

1 file changed

+74
-30
lines changed

1 file changed

+74
-30
lines changed

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

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,34 @@ import androidx.compose.foundation.Image
2020
import androidx.compose.foundation.background
2121
import androidx.compose.foundation.layout.Arrangement
2222
import androidx.compose.foundation.layout.Box
23+
import androidx.compose.foundation.layout.Column
2324
import androidx.compose.foundation.layout.PaddingValues
2425
import androidx.compose.foundation.layout.Row
2526
import androidx.compose.foundation.layout.Spacer
2627
import androidx.compose.foundation.layout.fillMaxSize
2728
import androidx.compose.foundation.layout.fillMaxWidth
29+
import androidx.compose.foundation.layout.height
2830
import androidx.compose.foundation.layout.padding
2931
import androidx.compose.foundation.layout.size
3032
import androidx.compose.foundation.layout.width
3133
import androidx.compose.foundation.lazy.LazyColumn
34+
import androidx.compose.foundation.lazy.LazyRow
3235
import androidx.compose.foundation.lazy.items
3336
import androidx.compose.material.icons.Icons
3437
import androidx.compose.material.icons.automirrored.filled.ArrowBack
38+
import androidx.compose.material.icons.filled.Add
39+
import androidx.compose.material.icons.filled.Clear
40+
import androidx.compose.material.icons.filled.Close
3541
import androidx.compose.material.icons.filled.Share
3642
import androidx.compose.material3.BottomAppBar
3743
import androidx.compose.material3.Button
3844
import androidx.compose.material3.ExperimentalMaterial3Api
45+
import androidx.compose.material3.FloatingActionButton
3946
import androidx.compose.material3.Icon
4047
import androidx.compose.material3.IconButton
4148
import androidx.compose.material3.MaterialTheme
4249
import androidx.compose.material3.Scaffold
50+
import androidx.compose.material3.SmallFloatingActionButton
4351
import androidx.compose.material3.Text
4452
import androidx.compose.material3.TopAppBar
4553
import androidx.compose.material3.TopAppBarDefaults
@@ -78,22 +86,26 @@ fun DocumentScreen(
7886
)
7987
},
8088
bottomBar = {
81-
BottomAppBar(
82-
containerColor = Color.Transparent
83-
) {
84-
Row(
85-
modifier = Modifier.fillMaxWidth(),
86-
horizontalArrangement = Arrangement.SpaceEvenly
87-
) {
88-
Button(onClick = onSharePressed) {
89-
Icon(Icons.Default.Share, contentDescription = "Share")
90-
Spacer(Modifier.width(8.dp))
91-
Text("Share")
89+
Column {
90+
PageList(pageIds, imageLoader)
91+
BottomAppBar(
92+
actions = {
93+
Button(onClick = onSharePressed) {
94+
Icon(Icons.Default.Share, contentDescription = "Share")
95+
Spacer(Modifier.width(8.dp))
96+
Text("Share")
97+
}
98+
Spacer(modifier = Modifier.size(8.dp))
99+
Button(onClick = onSavePressed) {
100+
Text("Save")
101+
}
102+
},
103+
floatingActionButton = {
104+
FloatingActionButton(onClick = onBackPressed) {
105+
Icon(Icons.Default.Close, contentDescription = "Close")
106+
}
92107
}
93-
Button(onClick = onSavePressed) {
94-
Text("Save")
95-
}
96-
}
108+
)
97109
}
98110
}
99111
) { padding -> DocumentPreview(pageIds, padding, imageLoader, onDeleteImage) }
@@ -106,37 +118,69 @@ private fun DocumentPreview(
106118
imageLoader: (String) -> Bitmap,
107119
onDeleteImage: (String) -> Unit,
108120
) {
109-
Box(
121+
Column (
110122
modifier = Modifier
111123
.fillMaxSize()
112124
.background(MaterialTheme.colorScheme.surfaceContainer)
113-
.padding(PaddingValues(top = padding.calculateTopPadding()))
125+
.padding(padding)
114126
) {
115-
Text(
116-
"${pageIds.size} pages",
117-
modifier = Modifier.padding(start = 16.dp, top = 16.dp).align(Alignment.TopStart),
118-
style = MaterialTheme.typography.titleMedium
119-
)
120-
LazyColumn (
121-
contentPadding = PaddingValues(20.dp),
127+
128+
Box (
129+
modifier = Modifier.fillMaxSize()
130+
) {
131+
// TODO Make it possible to zoom on the image
132+
Image(
133+
bitmap = imageLoader(pageIds[0]).asImageBitmap(),
134+
contentDescription = null,
135+
modifier = Modifier
136+
.padding(4.dp)
137+
.align(Alignment.Center)
138+
)
139+
Text("1 / ${pageIds.size}",
140+
color = MaterialTheme.colorScheme.inverseOnSurface,
141+
modifier = Modifier.align(Alignment.BottomEnd)
142+
.padding(all = 8.dp)
143+
.background(MaterialTheme.colorScheme.inverseSurface.copy(alpha = 0.5f))
144+
.padding(all = 4.dp)
145+
)
146+
}
147+
}
148+
}
149+
150+
@Composable
151+
private fun PageList(
152+
pageIds: List<String>,
153+
imageLoader: (String) -> Bitmap
154+
) {
155+
Box {
156+
LazyRow(
157+
contentPadding = PaddingValues(8.dp),
122158
modifier = Modifier
123-
.padding(horizontal = 16.dp)
124-
.align(Alignment.Center),
125-
verticalArrangement = Arrangement.spacedBy(12.dp)
159+
.fillMaxWidth()
160+
.padding(vertical = 4.dp)
161+
.background(MaterialTheme.colorScheme.secondaryContainer),
162+
horizontalArrangement = Arrangement.spacedBy(8.dp)
126163
) {
127164
items(pageIds) { id ->
128-
// TODO Display small images rather than big ones
129-
// TODO Make it possible to zoom on an image
165+
// TODO Use small images rather than big ones
130166
val bitmap = imageLoader(id).asImageBitmap()
131167
Image(
132168
bitmap = bitmap,
133169
contentDescription = null,
134170
modifier = Modifier
135-
.size(200.dp)
171+
.height(120.dp)
136172
.padding(4.dp)
137173
)
138174
}
139175
}
176+
SmallFloatingActionButton(
177+
onClick = {},
178+
modifier = Modifier
179+
.align(Alignment.CenterEnd)
180+
.padding(8.dp)
181+
) {
182+
Icon(imageVector = Icons.Default.Add, contentDescription = "Add page")
183+
}
140184
}
141185
}
142186

0 commit comments

Comments
 (0)