From 85c966a7aa71bfaf26d21af1a30dcd49acf211a0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:06:31 +0100 Subject: [PATCH] Use the real name of the selected export folder rather than manipulating the URI --- .../app/ui/screens/settings/SettingsRepository.kt | 8 ++++++++ .../app/ui/screens/settings/SettingsScreen.kt | 15 ++------------- .../app/ui/screens/settings/SettingsViewModel.kt | 10 ++++++---- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsRepository.kt b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsRepository.kt index 0993cbf..3158298 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsRepository.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsRepository.kt @@ -15,9 +15,11 @@ package org.fairscan.app.ui.screens.settings import android.content.Context +import androidx.core.net.toUri import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.preferencesDataStore +import androidx.documentfile.provider.DocumentFile import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import org.fairscan.app.domain.ExportQuality @@ -35,6 +37,12 @@ class SettingsRepository(private val context: Context) { prefs[EXPORT_DIR_URI] } + val exportDirName: Flow = exportDirUri.map { uriString -> + uriString?.let { + DocumentFile.fromTreeUri(context, it.toUri())?.name + } + } + val exportFormat: Flow = context.dataStore.data.map { prefs -> when (prefs[EXPORT_FORMAT]) { diff --git a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsScreen.kt index d379398..17317b2 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsScreen.kt @@ -92,10 +92,7 @@ private fun SettingsContent( onExportQualityChanged: (ExportQuality) -> Unit, modifier: Modifier = Modifier, ) { - val context = LocalContext.current - val folderName = remember(uiState.exportDirUri) { - extractFolderName(uiState.exportDirUri, context) - } + val folderName = uiState.exportDirName ?: stringResource(R.string.download_dirname) Column( modifier @@ -111,7 +108,7 @@ private fun SettingsContent( Spacer(Modifier.height(12.dp)) - if (uiState.exportDirUri != null) { + if (uiState.exportDirName != null) { OutlinedButton( onClick = onResetExportDirClick, border = BorderStroke(1.dp, MaterialTheme.colorScheme.primary), @@ -197,14 +194,6 @@ fun DirectorySettingItem( } } -private fun extractFolderName(uriString: String?, context: Context): String { - if (uriString == null) return context.getString(R.string.download_dirname) - return runCatching { - val uri = uriString.toUri() - uri.lastPathSegment?.substringAfter(':')?.substringAfter('/') ?: uriString - }.getOrElse { uriString } -} - @Preview @Composable fun SettingsScreenPreviewWithoutDir() { diff --git a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsViewModel.kt b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsViewModel.kt index e9f54b0..ea4577b 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsViewModel.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/settings/SettingsViewModel.kt @@ -16,13 +16,15 @@ package org.fairscan.app.ui.screens.settings import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import org.fairscan.app.AppContainer import org.fairscan.app.domain.ExportQuality data class SettingsUiState( - val exportDirUri: String? = null, + val exportDirName: String? = null, val exportFormat: ExportFormat = ExportFormat.PDF, val exportQuality: ExportQuality = ExportQuality.BALANCED, ) @@ -32,12 +34,12 @@ class SettingsViewModel(container: AppContainer) : ViewModel() { private val repo = container.settingsRepository val uiState = combine( - repo.exportDirUri, + repo.exportDirName, repo.exportFormat, repo.exportQuality, ) { dir, format, quality -> SettingsUiState( - exportDirUri = dir, + exportDirName = dir, exportFormat = format, exportQuality = quality, )