@@ -67,6 +67,12 @@ import org.mydomain.myscan.MainViewModel.CaptureState
6767import org.mydomain.myscan.Screen
6868import org.mydomain.myscan.ui.theme.MyScanTheme
6969
70+ data class CameraUiState (
71+ val pageCount : Int ,
72+ val liveAnalysisState : LiveAnalysisState ,
73+ val captureState : CaptureState
74+ )
75+
7076@Composable
7177fun CameraScreen (
7278 viewModel : MainViewModel ,
@@ -98,14 +104,16 @@ fun CameraScreen(
98104 onImageAnalyzed = onImageAnalyzed,
99105 captureController = captureController,
100106 onPreviewViewReady = { view -> previewView = view }
101- ) },
102- pageList = { CameraCapturedPagesRow (
103- pageIds = pageIds,
104- imageLoader = { id -> viewModel.getBitmap(id) },
105- onPageClick = { index -> viewModel.navigateTo(Screen .FinalizeDocument (index)) }
106- ) },
107- pageCount = pageIds.size,
108- liveAnalysisState = liveAnalysisState,
107+ )
108+ },
109+ pageList = {
110+ CameraCapturedPagesRow (
111+ pageIds = pageIds,
112+ imageLoader = { id -> viewModel.getBitmap(id) },
113+ onPageClick = { index -> viewModel.navigateTo(Screen .FinalizeDocument (index)) }
114+ )
115+ },
116+ cameraUiState = CameraUiState (pageIds.size, liveAnalysisState, captureState),
109117 onCapture = {
110118 Log .i(" MyScan" , " Pressed <Capture>" )
111119 viewModel.onCapturePressed(previewView?.bitmap)
@@ -114,7 +122,6 @@ fun CameraScreen(
114122 )
115123 },
116124 onFinalizePressed = onFinalizePressed,
117- captureState = captureState
118125 )
119126}
120127
@@ -123,15 +130,13 @@ private fun CameraScreenContent(
123130 modifier : Modifier ,
124131 cameraPreview : @Composable () -> Unit ,
125132 pageList : @Composable () -> Unit ,
126- pageCount : Int ,
127- liveAnalysisState : LiveAnalysisState ,
133+ cameraUiState : CameraUiState ,
128134 onCapture : () -> Unit ,
129135 onFinalizePressed : () -> Unit ,
130- captureState : CaptureState
131136) {
132137 Box (modifier = modifier.fillMaxSize()) {
133- CameraPreviewWithOverlay (cameraPreview, liveAnalysisState, captureState )
134- MessageBox (liveAnalysisState.inferenceTime)
138+ CameraPreviewWithOverlay (cameraPreview, cameraUiState )
139+ MessageBox (cameraUiState. liveAnalysisState.inferenceTime)
135140
136141 Column (Modifier .align(Alignment .BottomCenter )) {
137142 CaptureButton (
@@ -142,12 +147,12 @@ private fun CameraScreenContent(
142147 )
143148 CameraScreenFooter (
144149 pageList = pageList,
145- pageCount = pageCount,
150+ pageCount = cameraUiState. pageCount,
146151 onFinalizePressed = onFinalizePressed,
147152 modifier = Modifier ,
148153 )
149154 }
150- captureState.processedImage?.let {
155+ cameraUiState. captureState.processedImage?.let {
151156 Surface (
152157 color = Color .Black .copy(alpha = 0.3f ),
153158 modifier = Modifier .fillMaxSize())
@@ -194,8 +199,7 @@ fun CaptureButton(onClick: () -> Unit, modifier: Modifier) {
194199@Composable
195200private fun CameraPreviewWithOverlay (
196201 cameraPreview : @Composable () -> Unit ,
197- liveAnalysisState : LiveAnalysisState ,
198- captureState : CaptureState
202+ cameraUiState : CameraUiState
199203) {
200204 val width = LocalConfiguration .current.screenWidthDp
201205 val height = width / 3 * 4
@@ -205,8 +209,8 @@ private fun CameraPreviewWithOverlay(
205209 .height(height.dp)
206210 ) {
207211 cameraPreview()
208- AnalysisOverlay (liveAnalysisState)
209- captureState.frozenImage?.let {
212+ AnalysisOverlay (cameraUiState. liveAnalysisState)
213+ cameraUiState. captureState.frozenImage?.let {
210214 Image (
211215 bitmap = it.asImageBitmap(),
212216 contentDescription = null ,
@@ -346,11 +350,9 @@ private fun ScreenPreview(captureState: CaptureState) {
346350 onPageClick = {}
347351 )
348352 },
349- pageCount = 4 ,
350- liveAnalysisState = LiveAnalysisState (),
353+ cameraUiState = CameraUiState (pageCount = 4 , LiveAnalysisState (), captureState),
351354 onCapture = {},
352355 onFinalizePressed = {},
353- captureState = captureState,
354356 )
355357 }
356358}
0 commit comments