diff --git a/app/src/main/java/org/fairscan/app/MainActivity.kt b/app/src/main/java/org/fairscan/app/MainActivity.kt index 033606c..1d3dc9f 100644 --- a/app/src/main/java/org/fairscan/app/MainActivity.kt +++ b/app/src/main/java/org/fairscan/app/MainActivity.kt @@ -182,7 +182,6 @@ class MainActivity : ComponentActivity() { is Screen.Main.EditImage -> { EditPageScreen( pageId = documentUiState.currentPage?.key?.pageId ?: "", - onLoad = { id -> viewModel.loadCropInitialState(id)}, initState = cropInitialState, navigation = navigation, onUpdatePageQuad = { quad -> viewModel.setCurrentPageUserQuad(quad) }, @@ -196,6 +195,7 @@ class MainActivity : ComponentActivity() { onDeleteImage = { viewModel.deleteCurrentPage() }, onRotateImage = { clockwise -> viewModel.rotateCurrentPage(clockwise) }, onToggleColorMode = { viewModel.toggleCurrentPageColorMode() }, + onCropClick = { viewModel.onClickOnCropButton() }, onPageReorder = { id, newIndex -> viewModel.movePage(id, newIndex) }, onPageSelected = viewModel::onPageSelected ) diff --git a/app/src/main/java/org/fairscan/app/MainViewModel.kt b/app/src/main/java/org/fairscan/app/MainViewModel.kt index c42b749..b27d424 100644 --- a/app/src/main/java/org/fairscan/app/MainViewModel.kt +++ b/app/src/main/java/org/fairscan/app/MainViewModel.kt @@ -242,13 +242,12 @@ class MainViewModel(val imageRepository: ImageRepository): ViewModel() { val cropInitState: StateFlow = _cropInitState private var cropInitialStateJob: Job? = null - fun loadCropInitialState(pageId: String) { + fun onClickOnCropButton() { cropInitialStateJob?.cancel() cropInitialStateJob = viewModelScope.launch { _cropInitState.value = CropInitState.Loading - val page = _pages.value.find { it.id == pageId } - ?: return@launch + val page = currentPage() val metadata = page.metadata val rotation = page.totalRotation() @@ -277,6 +276,8 @@ class MainViewModel(val imageRepository: ImageRepository): ViewModel() { CropInitState.Error else CropInitState.Ready(page.id, bitmap, quad) + navigateTo(Screen.Main.EditImage) } + } } diff --git a/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentScreen.kt b/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentScreen.kt index 34dec8e..a8542f9 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentScreen.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentScreen.kt @@ -99,6 +99,7 @@ fun DocumentScreen( onDeleteImage: () -> Unit, onRotateImage: (Boolean) -> Unit, onToggleColorMode: () -> Unit, + onCropClick: () -> Unit, onPageReorder: (String, Int) -> Unit, onPageSelected: (Int) -> Unit, ) { @@ -132,7 +133,7 @@ fun DocumentScreen( { showDeletePageDialog.value = true }, onRotateImage, onToggleColorMode, - navigation, + onCropClick, modifier ) if (showDeletePageDialog.value) { @@ -151,7 +152,7 @@ private fun DocumentPreview( onDeleteImage: () -> Unit, onRotateImage: (Boolean) -> Unit, onToggleColorMode: () -> Unit, - navigation: Navigation, + onCropClick: () -> Unit, modifier: Modifier, ) { val currentPageIndex = uiState.currentPageIndex @@ -199,7 +200,7 @@ private fun DocumentPreview( EditButtons( uiState, onToggleColorMode, - navigation, + onCropClick, modifier = Modifier.align(Alignment.BottomStart) ) RotationButtons(onRotateImage, Modifier.align(Alignment.BottomCenter)) @@ -256,7 +257,7 @@ fun RotationButtons( fun EditButtons( uiState: DocumentUiState, onToggleColorMode: () -> Unit, - navigation: Navigation, + onCropClick: () -> Unit, modifier: Modifier ) { Row(modifier = modifier.padding(8.dp)) { @@ -271,7 +272,7 @@ fun EditButtons( SecondaryActionButton( icon = Icons.Default.Crop, contentDescription = "Crop", // TODO externalize string - onClick = navigation.toEditImageScreen, + onClick = onCropClick, ) } } @@ -378,6 +379,7 @@ fun DocumentScreenPreview() { onDeleteImage = { }, onRotateImage = { _ -> }, onToggleColorMode = { }, + onCropClick = { }, onPageReorder = { _,_ -> }, onPageSelected = { _ -> }, ) diff --git a/app/src/main/java/org/fairscan/app/ui/screens/edit/EditPageScreen.kt b/app/src/main/java/org/fairscan/app/ui/screens/edit/EditPageScreen.kt index 6d14261..46f552f 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/edit/EditPageScreen.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/edit/EditPageScreen.kt @@ -66,25 +66,20 @@ import org.fairscan.imageprocessing.Quad @Composable fun EditPageScreen( pageId: String, - onLoad: (String) -> Unit, initState: CropInitState, navigation: Navigation, onUpdatePageQuad: (Quad) -> Unit, ) { - val state = remember { EditPageScreenState() } + val state = remember(pageId) { EditPageScreenState() } val quadHandler = remember { QuadEditingHandler() } - if (initState is CropInitState.Ready && initState.pageId == pageId) { + if (initState is CropInitState.Ready && initState.pageId == pageId && state.bitmap == null) { state.bitmap = initState.bitmap state.setInitialQuad(initState.quad) } BackHandler { navigation.back() } - LaunchedEffect(pageId) { - onLoad(pageId) - } - val isLandscape = isLandscape(LocalConfiguration.current) MyScaffold( @@ -321,7 +316,6 @@ fun EditPageScreenPreview() { val quad = Quad(Point(.1, .1), Point(.9, .1), Point(.9, .9), Point(.1, .9)) EditPageScreen( pageId = "123", - onLoad = {}, initState = CropInitState.Ready("123",dummyImage, quad), navigation = dummyNavigation(), onUpdatePageQuad = { _ -> },