CameraScreen: use a BottomAppBar

This commit is contained in:
Pierre-Yves Nicolas
2025-06-24 20:39:04 +02:00
parent 46e84da804
commit 5ba634070f
2 changed files with 31 additions and 32 deletions

View File

@@ -38,6 +38,7 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
@@ -137,25 +138,24 @@ private fun CameraScreenScaffold(
onCapture: () -> Unit, onCapture: () -> Unit,
onFinalizePressed: () -> Unit, onFinalizePressed: () -> Unit,
) { ) {
Scaffold { innerPadding -> Scaffold(
Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { bottomBar = {
CameraScreenFooter(
pageList = pageList,
pageCount = cameraUiState.pageCount,
onFinalizePressed = onFinalizePressed,
)
}
) { innerPadding ->
Box(modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()).fillMaxSize()) {
CameraPreviewWithOverlay(cameraPreview, cameraUiState) CameraPreviewWithOverlay(cameraPreview, cameraUiState)
MessageBox(cameraUiState.liveAnalysisState.inferenceTime) MessageBox(cameraUiState.liveAnalysisState.inferenceTime)
CaptureButton(
Column(Modifier.align(Alignment.BottomCenter)) { onClick = onCapture,
CaptureButton( modifier = Modifier
onClick = onCapture, .align(Alignment.BottomCenter)
modifier = Modifier .padding(16.dp)
.align(Alignment.CenterHorizontally) )
.padding(16.dp)
)
CameraScreenFooter(
pageList = pageList,
pageCount = cameraUiState.pageCount,
onFinalizePressed = onFinalizePressed,
modifier = Modifier,
)
}
cameraUiState.captureState.processedImage?.let { cameraUiState.captureState.processedImage?.let {
Surface( Surface(
color = Color.Black.copy(alpha = 0.3f), color = Color.Black.copy(alpha = 0.3f),
@@ -242,20 +242,15 @@ fun CameraScreenFooter(
pageList: @Composable () -> Unit, pageList: @Composable () -> Unit,
pageCount: Int, pageCount: Int,
onFinalizePressed: () -> Unit, onFinalizePressed: () -> Unit,
modifier: Modifier,
) { ) {
Surface ( Column (modifier = Modifier.background(MaterialTheme.colorScheme.primaryContainer)) {
color = MaterialTheme.colorScheme.inverseOnSurface, pageList()
tonalElevation = 4.dp, BottomAppBar(
modifier = modifier tonalElevation = 4.dp,
.fillMaxWidth() ) {
.height(180.dp)
) {
Column {
pageList()
Row ( Row (
modifier = Modifier modifier = Modifier
.padding(horizontal = 16.dp, vertical = 8.dp) .padding(horizontal = 16.dp, vertical = 1.dp)
.fillMaxWidth(), .fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween horizontalArrangement = Arrangement.SpaceBetween

View File

@@ -20,6 +20,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@@ -45,13 +46,12 @@ fun CommonPageList(
listState: LazyListState = rememberLazyListState(), listState: LazyListState = rememberLazyListState(),
currentPageIndex: Int? = null, currentPageIndex: Int? = null,
) { ) {
if (pageIds.isEmpty()) return
LazyRow ( LazyRow (
state = listState, state = listState,
contentPadding = PaddingValues(4.dp), contentPadding = PaddingValues(4.dp),
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.background(MaterialTheme.colorScheme.secondaryContainer), .background(MaterialTheme.colorScheme.surfaceContainerLow),
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
@@ -63,11 +63,12 @@ fun CommonPageList(
val isSelected = index == currentPageIndex val isSelected = index == currentPageIndex
val borderColor = val borderColor =
if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent
val maxImageSize = 120.dp
val modifier = val modifier =
if (bitmap.height > bitmap.width) if (bitmap.height > bitmap.width)
Modifier.height(120.dp) Modifier.height(maxImageSize)
else else
Modifier.width(120.dp) Modifier.width(maxImageSize)
Image( Image(
bitmap = bitmap, bitmap = bitmap,
contentDescription = null, contentDescription = null,
@@ -79,4 +80,7 @@ fun CommonPageList(
} }
} }
} }
if (pageIds.isEmpty()) {
Box(modifier = Modifier.height(120.dp)) {}
}
} }