From 5ba634070fbce1a4eac4a8b809fcfccf86afbd67 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Tue, 24 Jun 2025 20:39:04 +0200 Subject: [PATCH] CameraScreen: use a BottomAppBar --- .../org/mydomain/myscan/view/CameraScreen.kt | 51 +++++++++---------- .../java/org/mydomain/myscan/view/PageList.kt | 12 +++-- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt b/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt index 69fa4f8..862f51c 100644 --- a/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt +++ b/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt @@ -38,6 +38,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.BottomAppBar import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -137,25 +138,24 @@ private fun CameraScreenScaffold( onCapture: () -> Unit, onFinalizePressed: () -> Unit, ) { - Scaffold { innerPadding -> - Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { + Scaffold( + bottomBar = { + CameraScreenFooter( + pageList = pageList, + pageCount = cameraUiState.pageCount, + onFinalizePressed = onFinalizePressed, + ) + } + ) { innerPadding -> + Box(modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()).fillMaxSize()) { CameraPreviewWithOverlay(cameraPreview, cameraUiState) MessageBox(cameraUiState.liveAnalysisState.inferenceTime) - - Column(Modifier.align(Alignment.BottomCenter)) { - CaptureButton( - onClick = onCapture, - modifier = Modifier - .align(Alignment.CenterHorizontally) - .padding(16.dp) - ) - CameraScreenFooter( - pageList = pageList, - pageCount = cameraUiState.pageCount, - onFinalizePressed = onFinalizePressed, - modifier = Modifier, - ) - } + CaptureButton( + onClick = onCapture, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(16.dp) + ) cameraUiState.captureState.processedImage?.let { Surface( color = Color.Black.copy(alpha = 0.3f), @@ -242,20 +242,15 @@ fun CameraScreenFooter( pageList: @Composable () -> Unit, pageCount: Int, onFinalizePressed: () -> Unit, - modifier: Modifier, ) { - Surface ( - color = MaterialTheme.colorScheme.inverseOnSurface, - tonalElevation = 4.dp, - modifier = modifier - .fillMaxWidth() - .height(180.dp) - ) { - Column { - pageList() + Column (modifier = Modifier.background(MaterialTheme.colorScheme.primaryContainer)) { + pageList() + BottomAppBar( + tonalElevation = 4.dp, + ) { Row ( modifier = Modifier - .padding(horizontal = 16.dp, vertical = 8.dp) + .padding(horizontal = 16.dp, vertical = 1.dp) .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween diff --git a/app/src/main/java/org/mydomain/myscan/view/PageList.kt b/app/src/main/java/org/mydomain/myscan/view/PageList.kt index 124aae9..3481e0f 100644 --- a/app/src/main/java/org/mydomain/myscan/view/PageList.kt +++ b/app/src/main/java/org/mydomain/myscan/view/PageList.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -45,13 +46,12 @@ fun CommonPageList( listState: LazyListState = rememberLazyListState(), currentPageIndex: Int? = null, ) { - if (pageIds.isEmpty()) return LazyRow ( state = listState, contentPadding = PaddingValues(4.dp), modifier = Modifier .fillMaxWidth() - .background(MaterialTheme.colorScheme.secondaryContainer), + .background(MaterialTheme.colorScheme.surfaceContainerLow), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically ) { @@ -63,11 +63,12 @@ fun CommonPageList( val isSelected = index == currentPageIndex val borderColor = if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent + val maxImageSize = 120.dp val modifier = if (bitmap.height > bitmap.width) - Modifier.height(120.dp) + Modifier.height(maxImageSize) else - Modifier.width(120.dp) + Modifier.width(maxImageSize) Image( bitmap = bitmap, contentDescription = null, @@ -79,4 +80,7 @@ fun CommonPageList( } } } + if (pageIds.isEmpty()) { + Box(modifier = Modifier.height(120.dp)) {} + } }