@@ -49,6 +49,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
4949import androidx.lifecycle.lifecycleScope
5050import kotlinx.coroutines.Dispatchers
5151import kotlinx.coroutines.launch
52+ import org.fairscan.app.data.FileLogger
5253import org.fairscan.app.ui.Navigation
5354import org.fairscan.app.ui.Screen
5455import org.fairscan.app.ui.components.rememberCameraPermissionState
@@ -195,7 +196,7 @@ class MainActivity : ComponentActivity() {
195196 LibrariesScreen (onBack = navigation.back)
196197 }
197198 is Screen .Overlay .Settings -> {
198- SettingsScreenWrapper (settingsViewModel, navigation)
199+ SettingsScreenWrapper (settingsViewModel, navigation, appContainer.logger )
199200 }
200201 }
201202 }
@@ -217,21 +218,39 @@ class MainActivity : ComponentActivity() {
217218 }
218219
219220 @Composable
220- private fun SettingsScreenWrapper (settingsViewModel : SettingsViewModel , nav : Navigation ) {
221+ private fun SettingsScreenWrapper (
222+ settingsViewModel : SettingsViewModel ,
223+ nav : Navigation ,
224+ logger : FileLogger ,
225+ ) {
221226 val launcher = rememberLauncherForActivityResult(
222227 contract = ActivityResultContracts .OpenDocumentTree ()
223228 ) { uri ->
224229 if (uri != null ) {
225230 val flags = Intent .FLAG_GRANT_READ_URI_PERMISSION or
226231 Intent .FLAG_GRANT_WRITE_URI_PERMISSION
227- contentResolver.takePersistableUriPermission(uri, flags)
228- settingsViewModel.setExportDirUri(uri.toString())
232+ try {
233+ contentResolver.takePersistableUriPermission(uri, flags)
234+ settingsViewModel.setExportDirUri(uri.toString())
235+ } catch (e: Exception ) {
236+ logger.e(" Settings" , " Failed to set export dir to $uri " , e)
237+ val text = getString(R .string.error_file_picker_result)
238+ Toast .makeText(this , text, Toast .LENGTH_SHORT ).show()
239+ }
229240 }
230241 }
231242 val settingsUiState by settingsViewModel.uiState.collectAsStateWithLifecycle()
232243 SettingsScreen (
233244 settingsUiState,
234- onChooseDirectoryClick = { launcher.launch(null ) },
245+ onChooseDirectoryClick = {
246+ try {
247+ launcher.launch(null )
248+ } catch (e: Exception ) {
249+ val message = getString(R .string.error_file_picker_launch)
250+ logger.e(" Settings" , message, e)
251+ Toast .makeText(this , message, Toast .LENGTH_SHORT ).show()
252+ }
253+ },
235254 onResetExportDirClick = { settingsViewModel.setExportDirUri(null ) },
236255 onExportFormatChanged = { format -> settingsViewModel.setExportFormat(format) },
237256 onBack = nav.back,
0 commit comments