diff --git a/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-1.jpg b/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-1.jpg new file mode 100644 index 0000000..93af3a0 Binary files /dev/null and b/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-1.jpg differ diff --git a/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-2.jpg b/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-2.jpg new file mode 100644 index 0000000..2f54ae0 Binary files /dev/null and b/app/src/debug/assets/gallica.bnf.fr-bpt6k5530456s-2.jpg differ diff --git a/app/src/main/assets/IMG_20250329_132414_900.jpg b/app/src/main/assets/IMG_20250329_132414_900.jpg deleted file mode 100644 index a41867f..0000000 Binary files a/app/src/main/assets/IMG_20250329_132414_900.jpg and /dev/null differ diff --git a/app/src/main/java/org/mydomain/myscan/MainActivity.kt b/app/src/main/java/org/mydomain/myscan/MainActivity.kt index 9111cd6..4f95703 100644 --- a/app/src/main/java/org/mydomain/myscan/MainActivity.kt +++ b/app/src/main/java/org/mydomain/myscan/MainActivity.kt @@ -51,6 +51,7 @@ class MainActivity : ComponentActivity() { setContent { val currentScreen by viewModel.currentScreen.collectAsStateWithLifecycle() val liveAnalysisState by viewModel.liveAnalysisState.collectAsStateWithLifecycle() + val pageIds by viewModel.pageIds.collectAsStateWithLifecycle() val context = LocalContext.current MyScanTheme { Scaffold { innerPadding -> @@ -64,10 +65,12 @@ class MainActivity : ComponentActivity() { } is Screen.FinalizeDocument -> { FinalizeDocumentScreen ( - viewModel, + pageIds, + imageLoader = { id -> viewModel.getBitmap(id) }, onBackPressed = { viewModel.navigateTo(Screen.Camera) }, onSavePressed = savePdf(viewModel, context), onSharePressed = sharePdf(viewModel, context), + onDeleteImage = { id -> viewModel.deletePage(id) } ) } } diff --git a/app/src/main/java/org/mydomain/myscan/view/FinalizeDocument.kt b/app/src/main/java/org/mydomain/myscan/view/FinalizeDocument.kt index 07361ae..0b8a441 100644 --- a/app/src/main/java/org/mydomain/myscan/view/FinalizeDocument.kt +++ b/app/src/main/java/org/mydomain/myscan/view/FinalizeDocument.kt @@ -14,6 +14,8 @@ */ package org.mydomain.myscan.view +import android.graphics.Bitmap +import android.graphics.BitmapFactory import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -47,24 +49,24 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color 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.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewmodel.compose.viewModel -import org.mydomain.myscan.MainViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable fun FinalizeDocumentScreen( - viewModel: MainViewModel = viewModel(), + pageIds: List, + imageLoader: (String) -> Bitmap, onBackPressed: () -> Unit, onSavePressed: () -> Unit, onSharePressed: () -> Unit, + onDeleteImage: (String) -> Unit, ) { Scaffold ( topBar = { @@ -96,15 +98,16 @@ fun FinalizeDocumentScreen( } } } - ) { padding -> DocumentPreview(padding, viewModel) } + ) { padding -> DocumentPreview(pageIds, padding, imageLoader, onDeleteImage) } } @Composable private fun DocumentPreview( + pageIds: List, padding: PaddingValues, - viewModel: MainViewModel + imageLoader: (String) -> Bitmap, + onDeleteImage: (String) -> Unit, ) { - val pageIds by viewModel.pageIds.collectAsStateWithLifecycle() Column( modifier = Modifier .fillMaxSize() @@ -129,7 +132,7 @@ private fun DocumentPreview( // TODO Make it possible to zoom on an image Box { Image( - bitmap = viewModel.getBitmap(id).asImageBitmap(), + bitmap = imageLoader(id).asImageBitmap(), contentDescription = "Page ${index + 1}", modifier = Modifier .size(160.dp) @@ -139,7 +142,7 @@ private fun DocumentPreview( ) IconButton( - onClick = { viewModel.deletePage(id) }, + onClick = { onDeleteImage(id) }, modifier = Modifier .align(Alignment.TopEnd) .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 = { _ -> {} } + ) +}