Avoid crashing when the selection of the export directory fails (#86)
This commit is contained in:
@@ -49,6 +49,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import org.fairscan.app.data.FileLogger
|
||||||
import org.fairscan.app.ui.Navigation
|
import org.fairscan.app.ui.Navigation
|
||||||
import org.fairscan.app.ui.Screen
|
import org.fairscan.app.ui.Screen
|
||||||
import org.fairscan.app.ui.components.rememberCameraPermissionState
|
import org.fairscan.app.ui.components.rememberCameraPermissionState
|
||||||
@@ -195,7 +196,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
LibrariesScreen(onBack = navigation.back)
|
LibrariesScreen(onBack = navigation.back)
|
||||||
}
|
}
|
||||||
is Screen.Overlay.Settings -> {
|
is Screen.Overlay.Settings -> {
|
||||||
SettingsScreenWrapper(settingsViewModel, navigation)
|
SettingsScreenWrapper(settingsViewModel, navigation, appContainer.logger)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,21 +218,39 @@ class MainActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun SettingsScreenWrapper(settingsViewModel: SettingsViewModel, nav: Navigation) {
|
private fun SettingsScreenWrapper(
|
||||||
|
settingsViewModel: SettingsViewModel,
|
||||||
|
nav: Navigation,
|
||||||
|
logger: FileLogger,
|
||||||
|
) {
|
||||||
val launcher = rememberLauncherForActivityResult(
|
val launcher = rememberLauncherForActivityResult(
|
||||||
contract = ActivityResultContracts.OpenDocumentTree()
|
contract = ActivityResultContracts.OpenDocumentTree()
|
||||||
) { uri ->
|
) { uri ->
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||||
contentResolver.takePersistableUriPermission(uri, flags)
|
try {
|
||||||
settingsViewModel.setExportDirUri(uri.toString())
|
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()
|
val settingsUiState by settingsViewModel.uiState.collectAsStateWithLifecycle()
|
||||||
SettingsScreen(
|
SettingsScreen(
|
||||||
settingsUiState,
|
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) },
|
onResetExportDirClick = { settingsViewModel.setExportDirUri(null) },
|
||||||
onExportFormatChanged = { format -> settingsViewModel.setExportFormat(format) },
|
onExportFormatChanged = { format -> settingsViewModel.setExportFormat(format) },
|
||||||
onBack = nav.back,
|
onBack = nav.back,
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
<string name="download_dirname">Downloads</string>
|
<string name="download_dirname">Downloads</string>
|
||||||
<string name="end_scan">End scan</string>
|
<string name="end_scan">End scan</string>
|
||||||
<string name="error">Error: %1$s</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_app">No app found to open this file</string>
|
||||||
<string name="error_no_document">No document detected</string>
|
<string name="error_no_document">No document detected</string>
|
||||||
<string name="error_save">Failed to save file</string>
|
<string name="error_save">Failed to save file</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user