Refactoring: move Scaffold into CameraScreen
This commit is contained in:
@@ -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,35 +51,32 @@ 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 -> {
|
CameraScreen(
|
||||||
Scaffold { innerPadding->
|
viewModel,
|
||||||
CameraScreen(
|
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 -> {
|
||||||
}
|
DocumentScreen (
|
||||||
}
|
pageIds,
|
||||||
is Screen.FinalizeDocument -> {
|
initialPage = screen.initialPage,
|
||||||
DocumentScreen (
|
imageLoader = { id -> viewModel.getBitmap(id) },
|
||||||
pageIds,
|
toCameraScreen = { viewModel.navigateTo(Screen.Camera) },
|
||||||
initialPage = screen.initialPage,
|
onSavePressed = savePdf(viewModel, context),
|
||||||
imageLoader = { id -> viewModel.getBitmap(id) },
|
onSharePressed = sharePdf(viewModel, context),
|
||||||
toCameraScreen = { viewModel.navigateTo(Screen.Camera) },
|
onStartNew = {
|
||||||
onSavePressed = savePdf(viewModel, context),
|
viewModel.startNewDocument()
|
||||||
onSharePressed = sharePdf(viewModel, context),
|
viewModel.navigateTo(Screen.Camera) },
|
||||||
onStartNew = {
|
onDeleteImage = { id -> viewModel.deletePage(id) }
|
||||||
viewModel.startNewDocument()
|
)
|
||||||
viewModel.navigateTo(Screen.Camera) },
|
|
||||||
onDeleteImage = { id -> viewModel.deletePage(id) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,42 +130,44 @@ 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 ->
|
||||||
CameraPreviewWithOverlay(cameraPreview, cameraUiState)
|
Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) {
|
||||||
MessageBox(cameraUiState.liveAnalysisState.inferenceTime)
|
CameraPreviewWithOverlay(cameraPreview, cameraUiState)
|
||||||
|
MessageBox(cameraUiState.liveAnalysisState.inferenceTime)
|
||||||
|
|
||||||
Column (Modifier.align(Alignment.BottomCenter)) {
|
Column(Modifier.align(Alignment.BottomCenter)) {
|
||||||
CaptureButton(
|
CaptureButton(
|
||||||
onClick = onCapture,
|
onClick = onCapture,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.CenterHorizontally)
|
.align(Alignment.CenterHorizontally)
|
||||||
.padding(16.dp)
|
.padding(16.dp)
|
||||||
)
|
)
|
||||||
CameraScreenFooter(
|
CameraScreenFooter(
|
||||||
pageList = pageList,
|
pageList = pageList,
|
||||||
pageCount = cameraUiState.pageCount,
|
pageCount = cameraUiState.pageCount,
|
||||||
onFinalizePressed = onFinalizePressed,
|
onFinalizePressed = onFinalizePressed,
|
||||||
modifier = Modifier,
|
modifier = Modifier,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
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(
|
{}
|
||||||
bitmap = it.asImageBitmap(),
|
Image(
|
||||||
contentDescription = null,
|
bitmap = it.asImageBitmap(),
|
||||||
modifier = Modifier.fillMaxSize().padding(24.dp)
|
contentDescription = null,
|
||||||
)
|
modifier = Modifier.fillMaxSize().padding(24.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user