From c49a271c39ccc270fbddc5a612f968632e022e44 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Tue, 24 Jun 2025 12:49:20 +0200 Subject: [PATCH] Refactoring: introduce CameraUiState --- .../org/mydomain/myscan/view/CameraScreen.kt | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 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 dec3ff9..d7883c3 100644 --- a/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt +++ b/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt @@ -67,6 +67,12 @@ import org.mydomain.myscan.MainViewModel.CaptureState import org.mydomain.myscan.Screen import org.mydomain.myscan.ui.theme.MyScanTheme +data class CameraUiState( + val pageCount: Int, + val liveAnalysisState: LiveAnalysisState, + val captureState: CaptureState +) + @Composable fun CameraScreen( viewModel: MainViewModel, @@ -98,14 +104,16 @@ fun CameraScreen( onImageAnalyzed = onImageAnalyzed, captureController = captureController, onPreviewViewReady = { view -> previewView = view } - ) }, - pageList = { CameraCapturedPagesRow( - pageIds = pageIds, - imageLoader = { id -> viewModel.getBitmap(id) }, - onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) } - ) }, - pageCount = pageIds.size, - liveAnalysisState = liveAnalysisState, + ) + }, + pageList = { + CameraCapturedPagesRow( + pageIds = pageIds, + imageLoader = { id -> viewModel.getBitmap(id) }, + onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) } + ) + }, + cameraUiState = CameraUiState(pageIds.size, liveAnalysisState, captureState), onCapture = { Log.i("MyScan", "Pressed ") viewModel.onCapturePressed(previewView?.bitmap) @@ -114,7 +122,6 @@ fun CameraScreen( ) }, onFinalizePressed = onFinalizePressed, - captureState = captureState ) } @@ -123,15 +130,13 @@ private fun CameraScreenContent( modifier: Modifier, cameraPreview: @Composable () -> Unit, pageList: @Composable () -> Unit, - pageCount: Int, - liveAnalysisState: LiveAnalysisState, + cameraUiState: CameraUiState, onCapture: () -> Unit, onFinalizePressed: () -> Unit, - captureState: CaptureState ) { Box(modifier = modifier.fillMaxSize()) { - CameraPreviewWithOverlay(cameraPreview, liveAnalysisState, captureState) - MessageBox(liveAnalysisState.inferenceTime) + CameraPreviewWithOverlay(cameraPreview, cameraUiState) + MessageBox(cameraUiState.liveAnalysisState.inferenceTime) Column (Modifier.align(Alignment.BottomCenter)) { CaptureButton( @@ -142,12 +147,12 @@ private fun CameraScreenContent( ) CameraScreenFooter( pageList = pageList, - pageCount = pageCount, + pageCount = cameraUiState.pageCount, onFinalizePressed = onFinalizePressed, modifier = Modifier, ) } - captureState.processedImage?.let { + cameraUiState.captureState.processedImage?.let { Surface ( color = Color.Black.copy(alpha = 0.3f), modifier = Modifier.fillMaxSize()) @@ -194,8 +199,7 @@ fun CaptureButton(onClick: () -> Unit, modifier: Modifier) { @Composable private fun CameraPreviewWithOverlay( cameraPreview: @Composable () -> Unit, - liveAnalysisState: LiveAnalysisState, - captureState: CaptureState + cameraUiState: CameraUiState ) { val width = LocalConfiguration.current.screenWidthDp val height = width / 3 * 4 @@ -205,8 +209,8 @@ private fun CameraPreviewWithOverlay( .height(height.dp) ) { cameraPreview() - AnalysisOverlay(liveAnalysisState) - captureState.frozenImage?.let { + AnalysisOverlay(cameraUiState.liveAnalysisState) + cameraUiState.captureState.frozenImage?.let { Image( bitmap = it.asImageBitmap(), contentDescription = null, @@ -346,11 +350,9 @@ private fun ScreenPreview(captureState: CaptureState) { onPageClick = {} ) }, - pageCount = 4, - liveAnalysisState = LiveAnalysisState(), + cameraUiState = CameraUiState(pageCount = 4, LiveAnalysisState(), captureState), onCapture = {}, onFinalizePressed = {}, - captureState = captureState, ) } }