Refactoring: introduce CameraUiState
This commit is contained in:
@@ -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,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user