From 3e085eca5c8afa0a8653a34eda478f8b5e58c7a8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Fri, 10 Apr 2026 16:20:45 +0200 Subject: [PATCH] DocumentScreen: reset zoom after rotation so that all areas are reachable (#152) --- app/src/main/java/org/fairscan/app/MainViewModel.kt | 2 +- .../app/ui/screens/document/DocumentScreen.kt | 11 +++++++---- .../app/ui/screens/document/DocumentUiState.kt | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/MainViewModel.kt b/app/src/main/java/org/fairscan/app/MainViewModel.kt index db07988..f7d0516 100644 --- a/app/src/main/java/org/fairscan/app/MainViewModel.kt +++ b/app/src/main/java/org/fairscan/app/MainViewModel.kt @@ -85,7 +85,7 @@ class MainViewModel(val imageRepository: ImageRepository, launchMode: LaunchMode page?.let { val isLoading = (it.id == loadingId) val bitmap = imageRepository.jpegBytes(it.key())?.toBitmap() - CurrentPageUiState(it.id, bitmap, it.colorMode, isLoading) + CurrentPageUiState(it.key(), bitmap, it.colorMode, isLoading) } } .flowOn(Dispatchers.IO) 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 498986e..a57c266 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 @@ -73,6 +73,8 @@ import kotlinx.collections.immutable.toImmutableList import net.engawapg.lib.zoomable.ZoomState import net.engawapg.lib.zoomable.zoomable import org.fairscan.app.R +import org.fairscan.app.domain.PageViewKey +import org.fairscan.app.domain.Rotation import org.fairscan.app.ui.Navigation import org.fairscan.app.ui.components.CommonPageListState import org.fairscan.app.ui.components.ConfirmationDialog @@ -160,10 +162,10 @@ private fun DocumentPreview( modifier = Modifier.fillMaxSize() ) { val bitmap = uiState.currentPage?.bitmap - val pageId = uiState.currentPage?.id - if (bitmap != null && pageId != null) { + val pageKey = uiState.currentPage?.key + if (bitmap != null && pageKey != null) { val imageBitmap = bitmap.asImageBitmap() - val zoomState = remember(pageId) { + val zoomState = remember(pageKey) { ZoomState( contentSize = Size(bitmap.width.toFloat(), bitmap.height.toFloat()) ) @@ -344,8 +346,9 @@ fun DocumentScreenPreview() { listOf(1, 2).map { "gallica.bnf.fr-bpt6k5530456s-$it" }.toImmutableList(), LocalContext.current ) + val key = PageViewKey("123", Rotation.R0, null) DocumentScreen( - uiState = DocumentUiState(1, CurrentPageUiState("123",image, COLOR), document), + uiState = DocumentUiState(1, CurrentPageUiState(key,image, COLOR), document), navigation = dummyNavigation(), onExportClick = {}, onDeleteImage = { }, diff --git a/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentUiState.kt b/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentUiState.kt index 4d2e140..992c768 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentUiState.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/document/DocumentUiState.kt @@ -15,6 +15,7 @@ package org.fairscan.app.ui.screens.document import android.graphics.Bitmap +import org.fairscan.app.domain.PageViewKey import org.fairscan.app.ui.state.DocumentUiModel import org.fairscan.imageprocessing.ColorMode @@ -25,7 +26,7 @@ data class DocumentUiState( ) data class CurrentPageUiState( - val id: String, + val key: PageViewKey, val bitmap: Bitmap?, val colorMode: ColorMode?, val isLoading: Boolean = false,