Avoid crashing when the selection of the export directory fails (#86)

This commit is contained in:
Pierre-Yves Nicolas
2026-01-05 20:53:35 +01:00
parent d48d2784cd
commit 402b25b791
2 changed files with 27 additions and 5 deletions

View File

@@ -49,6 +49,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.fairscan.app.data.FileLogger
import org.fairscan.app.ui.Navigation
import org.fairscan.app.ui.Screen
import org.fairscan.app.ui.components.rememberCameraPermissionState
@@ -195,7 +196,7 @@ class MainActivity : ComponentActivity() {
LibrariesScreen(onBack = navigation.back)
}
is Screen.Overlay.Settings -> {
SettingsScreenWrapper(settingsViewModel, navigation)
SettingsScreenWrapper(settingsViewModel, navigation, appContainer.logger)
}
}
}
@@ -217,21 +218,39 @@ class MainActivity : ComponentActivity() {
}
@Composable
private fun SettingsScreenWrapper(settingsViewModel: SettingsViewModel, nav: Navigation) {
private fun SettingsScreenWrapper(
settingsViewModel: SettingsViewModel,
nav: Navigation,
logger: FileLogger,
) {
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.OpenDocumentTree()
) { uri ->
if (uri != null) {
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
try {
contentResolver.takePersistableUriPermission(uri, flags)
settingsViewModel.setExportDirUri(uri.toString())
} catch (e: Exception) {
logger.e("Settings", "Failed to set export dir to $uri", e)
val text = getString(R.string.error_file_picker_result)
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
}
}
val settingsUiState by settingsViewModel.uiState.collectAsStateWithLifecycle()
SettingsScreen(
settingsUiState,
onChooseDirectoryClick = { launcher.launch(null) },
onChooseDirectoryClick = {
try {
launcher.launch(null)
} catch (e: Exception) {
val message = getString(R.string.error_file_picker_launch)
logger.e("Settings", message, e)
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
},
onResetExportDirClick = { settingsViewModel.setExportDirUri(null) },
onExportFormatChanged = { format -> settingsViewModel.setExportFormat(format) },
onBack = nav.back,

View File

@@ -20,6 +20,9 @@
<string name="download_dirname">Downloads</string>
<string name="end_scan">End scan</string>
<string name="error">Error: %1$s</string>
<!-- Rare error messages should not be translated -->
<string name="error_file_picker_launch" translatable="false">Failed to launch system file picker on this device</string>
<string name="error_file_picker_result" translatable="false">Failed to set export directory</string>
<string name="error_no_app">No app found to open this file</string>
<string name="error_no_document">No document detected</string>
<string name="error_save">Failed to save file</string>