From 428749d8a810df88c895a1ed3d2cdb7e949fa814 Mon Sep 17 00:00:00 2001 From: OneWay Date: Thu, 15 Oct 2026 13:42:57 +0800 Subject: [PATCH] Show the gallery folder name from the first frame - Carry the folder name through GalleryRoute into the ViewModel's SavedStateHandle, so the TopBar title is correct immediately on navigation, before any directory listing completes - Seed a provisional name from the SAF URI segment in loadPhotos as a fallback for entry points without a name (after-camera navigation) - Drop the 'Gallery' fallback title and the unused gallery_title string --- .../onecamera/navigation/OneCameraNavGraph.kt | 13 ++++++++----- .../example/onecamera/ui/folders/FoldersScreen.kt | 4 ++-- .../example/onecamera/ui/gallery/GalleryScreen.kt | 8 +++----- .../onecamera/ui/gallery/GalleryViewModel.kt | 8 +++++++- app/src/main/res/values/strings.xml | 1 - 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/example/onecamera/navigation/OneCameraNavGraph.kt b/app/src/main/java/com/example/onecamera/navigation/OneCameraNavGraph.kt index 1e3f925..ed1af65 100644 --- a/app/src/main/java/com/example/onecamera/navigation/OneCameraNavGraph.kt +++ b/app/src/main/java/com/example/onecamera/navigation/OneCameraNavGraph.kt @@ -32,7 +32,10 @@ import kotlinx.serialization.Serializable object FoldersRoute @Serializable -data class GalleryRoute(val folderUri: String) +data class GalleryRoute( + val folderUri: String, + val folderName: String = "", +) @Serializable data class CameraRoute( @@ -70,8 +73,8 @@ fun OneCameraNavGraph(navController: NavHostController) { ) { composable { FoldersScreen( - onNavigateToGallery = { folderUri -> - navController.navigate(GalleryRoute(folderUri)) + onNavigateToGallery = { folderUri, folderName -> + navController.navigate(GalleryRoute(folderUri, folderName)) }, onNavigateToCamera = { folderUri -> navController.navigate( @@ -93,8 +96,8 @@ fun OneCameraNavGraph(navController: NavHostController) { onNavigateToCamera = { folderUri -> navController.navigate(CameraRoute(folderUri)) }, - onNavigateToSubfolder = { folderUri -> - navController.navigate(GalleryRoute(folderUri)) + onNavigateToSubfolder = { folderUri, folderName -> + navController.navigate(GalleryRoute(folderUri, folderName)) }, onNavigateBack = { navController.popBackStack() }, ) diff --git a/app/src/main/java/com/example/onecamera/ui/folders/FoldersScreen.kt b/app/src/main/java/com/example/onecamera/ui/folders/FoldersScreen.kt index adef61e..72bc837 100644 --- a/app/src/main/java/com/example/onecamera/ui/folders/FoldersScreen.kt +++ b/app/src/main/java/com/example/onecamera/ui/folders/FoldersScreen.kt @@ -57,7 +57,7 @@ import com.example.onecamera.ui.components.oneCameraTopAppBarColors @OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) @Composable fun FoldersScreen( - onNavigateToGallery: (String) -> Unit, + onNavigateToGallery: (folderUri: String, folderName: String) -> Unit, onNavigateToCamera: (String) -> Unit, onNavigateToSettings: () -> Unit, viewModel: FoldersViewModel = hiltViewModel(), @@ -230,7 +230,7 @@ fun FoldersScreen( onClick = { viewModel.prefetchFolderForNavigation(folder.uri.toString()) - onNavigateToGallery(folder.uri.toString()) + onNavigateToGallery(folder.uri.toString(), folder.name) }, onCompress = { viewModel.zipFolderAndShare(folder) }, onCompressJpeg85 = { diff --git a/app/src/main/java/com/example/onecamera/ui/gallery/GalleryScreen.kt b/app/src/main/java/com/example/onecamera/ui/gallery/GalleryScreen.kt index e97a852..07482ac 100644 --- a/app/src/main/java/com/example/onecamera/ui/gallery/GalleryScreen.kt +++ b/app/src/main/java/com/example/onecamera/ui/gallery/GalleryScreen.kt @@ -93,7 +93,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged fun GalleryScreen( folderUri: String, onNavigateToCamera: (String) -> Unit, - onNavigateToSubfolder: (String) -> Unit, + onNavigateToSubfolder: (folderUri: String, folderName: String) -> Unit, onNavigateBack: () -> Unit, viewModel: GalleryViewModel = hiltViewModel(), ) { @@ -281,9 +281,7 @@ fun GalleryScreen( title = { Column { Text( - uiState.folderName.ifEmpty { - stringResource(R.string.gallery_title) - }, + uiState.folderName, maxLines = 1, overflow = TextOverflow.Ellipsis, ) @@ -434,7 +432,7 @@ fun GalleryScreen( onFolderClick = { viewModel.prefetchFolderForNavigation(it.uri.toString()) - onNavigateToSubfolder(it.uri.toString()) + onNavigateToSubfolder(it.uri.toString(), it.name) }, onFolderCompress = { viewModel.zipFolderAndShare(it) }, onFolderCompressJpeg85 = { viewModel.zipFolderCompressedJpegsAndShare(it) }, diff --git a/app/src/main/java/com/example/onecamera/ui/gallery/GalleryViewModel.kt b/app/src/main/java/com/example/onecamera/ui/gallery/GalleryViewModel.kt index 031f15e..e52d029 100644 --- a/app/src/main/java/com/example/onecamera/ui/gallery/GalleryViewModel.kt +++ b/app/src/main/java/com/example/onecamera/ui/gallery/GalleryViewModel.kt @@ -4,6 +4,7 @@ import android.content.Context import android.net.Uri import androidx.compose.runtime.Immutable import androidx.core.net.toUri +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import coil3.SingletonImageLoader @@ -113,6 +114,7 @@ data class GalleryUiState( @HiltViewModel class GalleryViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, private val preferencesRepository: UserPreferencesRepository, private val listGalleryUseCase: ListGalleryUseCase, private val listFolderTreeUseCase: ListFolderTreeUseCase, @@ -128,7 +130,11 @@ class GalleryViewModel @Inject constructor( ) : ViewModel() { val uiState: StateFlow - field: MutableStateFlow = MutableStateFlow(GalleryUiState()) + field: MutableStateFlow = MutableStateFlow( + // Navigation puts type-safe route args into the SavedStateHandle, so the + // title is correct from the very first frame, before any listing completes. + GalleryUiState(folderName = savedStateHandle.get("folderName").orEmpty()), + ) private var forceReload = false diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c34f91d..1a55239 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,7 +46,6 @@ %d photos - Gallery Create subfolder Sort ascending Sort descending