Refactoring: introduce CameraUiState

This commit is contained in:
Pierre-Yves Nicolas
2025-06-24 12:49:20 +02:00
parent dcb48b8cc8
commit c49a271c39

View File

@@ -67,6 +67,12 @@ import org.mydomain.myscan.MainViewModel.CaptureState
import org.mydomain.myscan.Screen import org.mydomain.myscan.Screen
import org.mydomain.myscan.ui.theme.MyScanTheme import org.mydomain.myscan.ui.theme.MyScanTheme
data class CameraUiState(
val pageCount: Int,
val liveAnalysisState: LiveAnalysisState,
val captureState: CaptureState
)
@Composable @Composable
fun CameraScreen( fun CameraScreen(
viewModel: MainViewModel, viewModel: MainViewModel,
@@ -98,14 +104,16 @@ fun CameraScreen(
onImageAnalyzed = onImageAnalyzed, onImageAnalyzed = onImageAnalyzed,
captureController = captureController, captureController = captureController,
onPreviewViewReady = { view -> previewView = view } onPreviewViewReady = { view -> previewView = view }
) }, )
pageList = { CameraCapturedPagesRow( },
pageIds = pageIds, pageList = {
imageLoader = { id -> viewModel.getBitmap(id) }, CameraCapturedPagesRow(
onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) } pageIds = pageIds,
) }, imageLoader = { id -> viewModel.getBitmap(id) },
pageCount = pageIds.size, onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) }
liveAnalysisState = liveAnalysisState, )
},
cameraUiState = CameraUiState(pageIds.size, liveAnalysisState, captureState),
onCapture = { onCapture = {
Log.i("MyScan", "Pressed <Capture>") Log.i("MyScan", "Pressed <Capture>")
viewModel.onCapturePressed(previewView?.bitmap) viewModel.onCapturePressed(previewView?.bitmap)
@@ -114,7 +122,6 @@ fun CameraScreen(
) )
}, },
onFinalizePressed = onFinalizePressed, onFinalizePressed = onFinalizePressed,
captureState = captureState
) )
} }
@@ -123,15 +130,13 @@ private fun CameraScreenContent(
modifier: Modifier, modifier: Modifier,
cameraPreview: @Composable () -> Unit, cameraPreview: @Composable () -> Unit,
pageList: @Composable () -> Unit, pageList: @Composable () -> Unit,
pageCount: Int, cameraUiState: CameraUiState,
liveAnalysisState: LiveAnalysisState,
onCapture: () -> Unit, onCapture: () -> Unit,
onFinalizePressed: () -> Unit, onFinalizePressed: () -> Unit,
captureState: CaptureState
) { ) {
Box(modifier = modifier.fillMaxSize()) { Box(modifier = modifier.fillMaxSize()) {
CameraPreviewWithOverlay(cameraPreview, liveAnalysisState, captureState) CameraPreviewWithOverlay(cameraPreview, cameraUiState)
MessageBox(liveAnalysisState.inferenceTime) MessageBox(cameraUiState.liveAnalysisState.inferenceTime)
Column (Modifier.align(Alignment.BottomCenter)) { Column (Modifier.align(Alignment.BottomCenter)) {
CaptureButton( CaptureButton(
@@ -142,12 +147,12 @@ private fun CameraScreenContent(
) )
CameraScreenFooter( CameraScreenFooter(
pageList = pageList, pageList = pageList,
pageCount = pageCount, pageCount = cameraUiState.pageCount,
onFinalizePressed = onFinalizePressed, onFinalizePressed = onFinalizePressed,
modifier = Modifier, modifier = Modifier,
) )
} }
captureState.processedImage?.let { cameraUiState.captureState.processedImage?.let {
Surface ( Surface (
color = Color.Black.copy(alpha = 0.3f), color = Color.Black.copy(alpha = 0.3f),
modifier = Modifier.fillMaxSize()) modifier = Modifier.fillMaxSize())
@@ -194,8 +199,7 @@ fun CaptureButton(onClick: () -> Unit, modifier: Modifier) {
@Composable @Composable
private fun CameraPreviewWithOverlay( private fun CameraPreviewWithOverlay(
cameraPreview: @Composable () -> Unit, cameraPreview: @Composable () -> Unit,
liveAnalysisState: LiveAnalysisState, cameraUiState: CameraUiState
captureState: CaptureState
) { ) {
val width = LocalConfiguration.current.screenWidthDp val width = LocalConfiguration.current.screenWidthDp
val height = width / 3 * 4 val height = width / 3 * 4
@@ -205,8 +209,8 @@ private fun CameraPreviewWithOverlay(
.height(height.dp) .height(height.dp)
) { ) {
cameraPreview() cameraPreview()
AnalysisOverlay(liveAnalysisState) AnalysisOverlay(cameraUiState.liveAnalysisState)
captureState.frozenImage?.let { cameraUiState.captureState.frozenImage?.let {
Image( Image(
bitmap = it.asImageBitmap(), bitmap = it.asImageBitmap(),
contentDescription = null, contentDescription = null,
@@ -346,11 +350,9 @@ private fun ScreenPreview(captureState: CaptureState) {
onPageClick = {} onPageClick = {}
) )
}, },
pageCount = 4, cameraUiState = CameraUiState(pageCount = 4, LiveAnalysisState(), captureState),
liveAnalysisState = LiveAnalysisState(),
onCapture = {}, onCapture = {},
onFinalizePressed = {}, onFinalizePressed = {},
captureState = captureState,
) )
} }
} }