Fix: Folder recognition and UI update for sync folder selection

This commit is contained in:
2025-10-31 15:11:09 +01:00
parent 684fdb290a
commit 5a64db4149

View File

@@ -388,10 +388,22 @@ fun AppShell(
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
val syncFolderUri = remember {
sharedPrefs.getString("sync_folder_uri", null)?.toUri()
var syncFolderUriString by rememberSaveable { mutableStateOf(sharedPrefs.getString("sync_folder_uri", null)) }
DisposableEffect(sharedPrefs) {
val listener = android.content.SharedPreferences.OnSharedPreferenceChangeListener { prefs, key ->
if (key == "sync_folder_uri") {
syncFolderUriString = prefs.getString(key, null)
}
}
sharedPrefs.registerOnSharedPreferenceChangeListener(listener)
onDispose {
sharedPrefs.unregisterOnSharedPreferenceChangeListener(listener)
}
}
val syncFolderUri = syncFolderUriString?.toUri()
val keyManager = remember { KeyManager(context, canUseBiometrics) }
val fileEncryptor = remember { FileEncryptor() }
@@ -984,8 +996,10 @@ fun AppShell(
sharedPrefs.edit {
putString("sync_folder_uri", it.toString())
}
val parentFolder = DocumentFile.fromTreeUri(context, it)
parentFolder?.findFile("Noteshop") ?: parentFolder?.createDirectory("Noteshop")
val selectedFolder = DocumentFile.fromTreeUri(context, it)
if (selectedFolder?.name != "Noteshop") {
selectedFolder?.findFile("Noteshop") ?: selectedFolder?.createDirectory("Noteshop")
}
android.widget.Toast.makeText(context, R.string.sync_folder_selected, android.widget.Toast.LENGTH_SHORT).show()
} catch (e: Exception) {
Log.e("MainActivity", "Error setting up sync folder", e)
@@ -1118,7 +1132,6 @@ fun AppShell(
Row(verticalAlignment = Alignment.CenterVertically) {
Column(modifier = Modifier.weight(1f)) {
Text(stringResource(id = R.string.select_sync_folder))
val syncFolderUriString = sharedPrefs.getString("sync_folder_uri", null)
val displayPath = if (syncFolderUriString.isNullOrBlank()) {
stringResource(id = R.string.no_folder_selected)
} else {
@@ -1126,12 +1139,20 @@ fun AppShell(
try {
val uri = android.net.Uri.parse(syncFolderUriString)
val docFile = DocumentFile.fromTreeUri(context, uri)
val noteshopDir = docFile?.findFile("Noteshop")
val parentName = docFile?.name
if (parentName != null && noteshopDir != null) {
"$parentName / ${noteshopDir.name}"
if (docFile?.name == "Noteshop") {
val parent = docFile.parentFile
if (parent != null) {
"${parent.name} / ${docFile.name}"
} else {
docFile.name
}
} else {
parentName
val parentName = docFile?.name
if (parentName != null) {
"$parentName / Noteshop"
} else {
null
}
}
} catch (e: Exception) {
null
@@ -1151,7 +1172,6 @@ fun AppShell(
overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis
)
}
val syncFolderUriString = sharedPrefs.getString("sync_folder_uri", null)
if (!syncFolderUriString.isNullOrBlank()) {
IconButton(onClick = { showDeleteConfirmationDialog = true }) {
Icon(Icons.Default.Delete, contentDescription = stringResource(R.string.delete_folder))