Refactoring: move Scaffold into CameraScreen

This commit is contained in:
Pierre-Yves Nicolas
2025-06-24 15:05:15 +02:00
parent 1159b77c6e
commit 46e84da804
2 changed files with 58 additions and 65 deletions

View File

@@ -26,10 +26,7 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -54,19 +51,16 @@ class MainActivity : ComponentActivity() {
val pageIds by viewModel.pageIds.collectAsStateWithLifecycle() val pageIds by viewModel.pageIds.collectAsStateWithLifecycle()
val context = LocalContext.current val context = LocalContext.current
MyScanTheme { MyScanTheme {
Column { Column {
when (val screen = currentScreen) { when (val screen = currentScreen) {
is Screen.Camera -> { is Screen.Camera -> {
Scaffold { innerPadding->
CameraScreen( CameraScreen(
viewModel, liveAnalysisState, viewModel,
liveAnalysisState,
onImageAnalyzed = { image -> viewModel.liveAnalysis(image) }, onImageAnalyzed = { image -> viewModel.liveAnalysis(image) },
onFinalizePressed = { viewModel.navigateTo(Screen.FinalizeDocument()) }, onFinalizePressed = { viewModel.navigateTo(Screen.FinalizeDocument()) },
modifier = Modifier.padding(innerPadding)
) )
} }
}
is Screen.FinalizeDocument -> { is Screen.FinalizeDocument -> {
DocumentScreen ( DocumentScreen (
pageIds, pageIds,

View File

@@ -40,6 +40,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
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.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -77,7 +78,6 @@ fun CameraScreen(
liveAnalysisState: LiveAnalysisState, liveAnalysisState: LiveAnalysisState,
onImageAnalyzed: (ImageProxy) -> Unit, onImageAnalyzed: (ImageProxy) -> Unit,
onFinalizePressed: () -> Unit, onFinalizePressed: () -> Unit,
modifier: Modifier,
) { ) {
var previewView by remember { mutableStateOf<PreviewView?>(null) } var previewView by remember { mutableStateOf<PreviewView?>(null) }
val pageIds by viewModel.pageIds.collectAsStateWithLifecycle() val pageIds by viewModel.pageIds.collectAsStateWithLifecycle()
@@ -101,9 +101,7 @@ fun CameraScreen(
listState.animateScrollToItem(pageIds.lastIndex) listState.animateScrollToItem(pageIds.lastIndex)
} }
} }
CameraScreenScaffold(
CameraScreenContent(
modifier,
cameraPreview = { cameraPreview = {
CameraPreview( CameraPreview(
onImageAnalyzed = onImageAnalyzed, onImageAnalyzed = onImageAnalyzed,
@@ -132,15 +130,15 @@ fun CameraScreen(
} }
@Composable @Composable
private fun CameraScreenContent( private fun CameraScreenScaffold(
modifier: Modifier,
cameraPreview: @Composable () -> Unit, cameraPreview: @Composable () -> Unit,
pageList: @Composable () -> Unit, pageList: @Composable () -> Unit,
cameraUiState: CameraUiState, cameraUiState: CameraUiState,
onCapture: () -> Unit, onCapture: () -> Unit,
onFinalizePressed: () -> Unit, onFinalizePressed: () -> Unit,
) { ) {
Box(modifier = modifier.fillMaxSize()) { Scaffold { innerPadding ->
Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) {
CameraPreviewWithOverlay(cameraPreview, cameraUiState) CameraPreviewWithOverlay(cameraPreview, cameraUiState)
MessageBox(cameraUiState.liveAnalysisState.inferenceTime) MessageBox(cameraUiState.liveAnalysisState.inferenceTime)
@@ -161,7 +159,8 @@ private fun CameraScreenContent(
cameraUiState.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()
)
{} {}
Image( Image(
bitmap = it.asImageBitmap(), bitmap = it.asImageBitmap(),
@@ -171,6 +170,7 @@ private fun CameraScreenContent(
} }
} }
} }
}
@Composable @Composable
fun CaptureButton(onClick: () -> Unit, modifier: Modifier) { fun CaptureButton(onClick: () -> Unit, modifier: Modifier) {
@@ -292,8 +292,7 @@ fun CameraScreenPreviewWithProcessedImage() {
private fun ScreenPreview(captureState: CaptureState) { private fun ScreenPreview(captureState: CaptureState) {
val context = LocalContext.current val context = LocalContext.current
MyScanTheme { MyScanTheme {
CameraScreenContent( CameraScreenScaffold(
modifier = Modifier,
cameraPreview = { cameraPreview = {
Box( Box(
modifier = Modifier modifier = Modifier