Skip to content

Commit e68ceb0

Browse files
committed
add sync folder picker to KeeShare settings
SAF-based folder picker with persistent URI permissions. Shows selected folder in preference summary.
1 parent ae7070f commit e68ceb0

File tree

4 files changed

+49
-0
lines changed

4 files changed

+49
-0
lines changed

app/src/main/java/com/kunzisoft/keepass/settings/NestedAppSettingsFragment.kt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,37 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
367367
warningAlertDialog?.show()
368368
}
369369

370+
private val keeShareFolderPickerLauncher = registerForActivityResult(
371+
androidx.activity.result.contract.ActivityResultContracts.OpenDocumentTree()
372+
) { treeUri ->
373+
if (treeUri != null) {
374+
val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
375+
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
376+
requireContext().contentResolver.takePersistableUriPermission(treeUri, takeFlags)
377+
378+
PreferencesUtil.setKeeShareSyncFolderUri(requireContext(), treeUri.toString())
379+
380+
// Update the preference summary to show the selected path
381+
findPreference<Preference>(getString(R.string.keeshare_sync_folder_key))?.summary =
382+
treeUri.lastPathSegment ?: treeUri.toString()
383+
}
384+
}
385+
370386
private fun onCreateKeeSharePreferences(rootKey: String?) {
371387
setPreferencesFromResource(R.xml.preferences_keeshare, rootKey)
388+
389+
// Show current sync folder URI in summary
390+
val syncFolderPref = findPreference<Preference>(getString(R.string.keeshare_sync_folder_key))
391+
val savedUri = PreferencesUtil.getKeeShareSyncFolderUri(requireContext())
392+
if (!savedUri.isNullOrEmpty()) {
393+
val uri = android.net.Uri.parse(savedUri)
394+
syncFolderPref?.summary = uri.lastPathSegment ?: savedUri
395+
}
396+
397+
syncFolderPref?.setOnPreferenceClickListener {
398+
keeShareFolderPickerLauncher.launch(null)
399+
true
400+
}
372401
}
373402

374403
private fun onCreateAppearancePreferences(rootKey: String?) {

app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,18 @@ object PreferencesUtil {
866866
}
867867
}
868868

869+
fun getKeeShareSyncFolderUri(context: Context): String? {
870+
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
871+
return prefs.getString(context.getString(R.string.keeshare_sync_folder_key), null)
872+
}
873+
874+
fun setKeeShareSyncFolderUri(context: Context, uri: String?) {
875+
PreferenceManager.getDefaultSharedPreferences(context).edit().apply {
876+
putString(context.getString(R.string.keeshare_sync_folder_key), uri)
877+
apply()
878+
}
879+
}
880+
869881
fun getKeeShareStaleDays(context: Context): Int {
870882
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
871883
return prefs.getInt(context.getString(R.string.keeshare_stale_days_key), 90)

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,10 @@
810810
<string name="keeshare_device_id_key" translatable="false">keeshare_device_id</string>
811811
<string name="keeshare_device_id_title">Device ID</string>
812812
<string name="keeshare_device_id_summary">Short identifier for this device (auto-generated, or set manually)</string>
813+
<string name="keeshare_sync_folder_key" translatable="false">keeshare_sync_folder</string>
814+
<string name="keeshare_sync_folder_title">Sync folder</string>
815+
<string name="keeshare_sync_folder_summary">Select the shared folder where KeeShare containers are stored</string>
816+
<string name="keeshare_sync_folder_not_set">Not configured</string>
813817
<string name="keeshare_last_sync_time_key" translatable="false">keeshare_last_sync_time</string>
814818
<string name="keeshare_stale_days_key" translatable="false">keeshare_stale_days</string>
815819
</resources>

app/src/main/res/xml/preferences_keeshare.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,9 @@
2323
android:key="@string/keeshare_device_id_key"
2424
android:title="@string/keeshare_device_id_title"
2525
android:summary="@string/keeshare_device_id_summary" />
26+
<Preference
27+
android:key="@string/keeshare_sync_folder_key"
28+
android:title="@string/keeshare_sync_folder_title"
29+
android:summary="@string/keeshare_sync_folder_not_set" />
2630
</PreferenceCategory>
2731
</PreferenceScreen>

0 commit comments

Comments
 (0)