Create preview for DocumentScreen

This commit is contained in:
Pierre-Yves Nicolas
2025-06-06 17:49:50 +02:00
committed by pynicolas
parent 276209a74a
commit b3d13d98bc
5 changed files with 35 additions and 11 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -51,6 +51,7 @@ class MainActivity : ComponentActivity() {
setContent { setContent {
val currentScreen by viewModel.currentScreen.collectAsStateWithLifecycle() val currentScreen by viewModel.currentScreen.collectAsStateWithLifecycle()
val liveAnalysisState by viewModel.liveAnalysisState.collectAsStateWithLifecycle() val liveAnalysisState by viewModel.liveAnalysisState.collectAsStateWithLifecycle()
val pageIds by viewModel.pageIds.collectAsStateWithLifecycle()
val context = LocalContext.current val context = LocalContext.current
MyScanTheme { MyScanTheme {
Scaffold { innerPadding -> Scaffold { innerPadding ->
@@ -64,10 +65,12 @@ class MainActivity : ComponentActivity() {
} }
is Screen.FinalizeDocument -> { is Screen.FinalizeDocument -> {
FinalizeDocumentScreen ( FinalizeDocumentScreen (
viewModel, pageIds,
imageLoader = { id -> viewModel.getBitmap(id) },
onBackPressed = { viewModel.navigateTo(Screen.Camera) }, onBackPressed = { viewModel.navigateTo(Screen.Camera) },
onSavePressed = savePdf(viewModel, context), onSavePressed = savePdf(viewModel, context),
onSharePressed = sharePdf(viewModel, context), onSharePressed = sharePdf(viewModel, context),
onDeleteImage = { id -> viewModel.deletePage(id) }
) )
} }
} }

View File

@@ -14,6 +14,8 @@
*/ */
package org.mydomain.myscan.view package org.mydomain.myscan.view
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@@ -47,24 +49,24 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import org.mydomain.myscan.MainViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun FinalizeDocumentScreen( fun FinalizeDocumentScreen(
viewModel: MainViewModel = viewModel(), pageIds: List<String>,
imageLoader: (String) -> Bitmap,
onBackPressed: () -> Unit, onBackPressed: () -> Unit,
onSavePressed: () -> Unit, onSavePressed: () -> Unit,
onSharePressed: () -> Unit, onSharePressed: () -> Unit,
onDeleteImage: (String) -> Unit,
) { ) {
Scaffold ( Scaffold (
topBar = { topBar = {
@@ -96,15 +98,16 @@ fun FinalizeDocumentScreen(
} }
} }
} }
) { padding -> DocumentPreview(padding, viewModel) } ) { padding -> DocumentPreview(pageIds, padding, imageLoader, onDeleteImage) }
} }
@Composable @Composable
private fun DocumentPreview( private fun DocumentPreview(
pageIds: List<String>,
padding: PaddingValues, padding: PaddingValues,
viewModel: MainViewModel imageLoader: (String) -> Bitmap,
onDeleteImage: (String) -> Unit,
) { ) {
val pageIds by viewModel.pageIds.collectAsStateWithLifecycle()
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@@ -129,7 +132,7 @@ private fun DocumentPreview(
// TODO Make it possible to zoom on an image // TODO Make it possible to zoom on an image
Box { Box {
Image( Image(
bitmap = viewModel.getBitmap(id).asImageBitmap(), bitmap = imageLoader(id).asImageBitmap(),
contentDescription = "Page ${index + 1}", contentDescription = "Page ${index + 1}",
modifier = Modifier modifier = Modifier
.size(160.dp) .size(160.dp)
@@ -139,7 +142,7 @@ private fun DocumentPreview(
) )
IconButton( IconButton(
onClick = { viewModel.deletePage(id) }, onClick = { onDeleteImage(id) },
modifier = Modifier modifier = Modifier
.align(Alignment.TopEnd) .align(Alignment.TopEnd)
.size(24.dp) .size(24.dp)
@@ -153,3 +156,21 @@ private fun DocumentPreview(
} }
} }
} }
@Composable
@Preview
fun DocumentScreenPreview() {
val context = LocalContext.current
FinalizeDocumentScreen(
pageIds = listOf(1, 2, 2, 2).map { "gallica.bnf.fr-bpt6k5530456s-$it.jpg" },
imageLoader = { id ->
context.assets.open(id).use { input ->
BitmapFactory.decodeStream(input)
}
},
onBackPressed = {},
onSavePressed = {},
onSharePressed = {},
onDeleteImage = { _ -> {} }
)
}