From a593f2874daddb8688d46741a6e33db77b4dd5e8 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 13 Dec 2024 11:15:47 -0700 Subject: [PATCH] music: fix settings update insanity For some reason StringSet updates will simply not go to the listener. Despite it working just fine in previous versions. I have to derialize all the location to a string and use that. --- .../org/oxycblt/auxio/music/MusicSettings.kt | 19 ++++++++----------- .../music/locations/MusicSourcesDialog.kt | 5 +---- .../org/oxycblt/musikr/fs/MusicLocation.kt | 9 +++++++-- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt index fccc0e1bb..7c7a66742 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt @@ -19,7 +19,6 @@ package org.oxycblt.auxio.music import android.content.Context -import android.net.Uri import androidx.core.content.edit import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject @@ -55,21 +54,19 @@ interface MusicSettings : Settings { class MusicSettingsImpl @Inject constructor(@ApplicationContext private val context: Context) : Settings.Impl(context), MusicSettings { + override var musicLocations: List get() { - val dirs = - sharedPreferences.getStringSet(getString(R.string.set_key_music_locations), null) ?: - emptySet() - return dirs.mapNotNull { - MusicLocation.existing(context, Uri.parse(it)) - } + val locations = + sharedPreferences.getString(getString(R.string.set_key_music_locations), null) + ?: return emptyList() + return MusicLocation.existing(context, locations) } set(value) { sharedPreferences.edit { - putStringSet( - getString(R.string.set_key_music_locations), - value.map { it.toString() }.toSet()) - apply() + putString( + getString(R.string.set_key_music_locations), MusicLocation.toString(value)) + this@edit.apply() } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/locations/MusicSourcesDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/locations/MusicSourcesDialog.kt index afc951c1e..74d3ec0ed 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/locations/MusicSourcesDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/locations/MusicSourcesDialog.kt @@ -59,10 +59,7 @@ class MusicSourcesDialog : .setNegativeButton(R.string.lbl_cancel, null) .setPositiveButton(R.string.lbl_save) { _, _ -> val newDirs = locationAdapter.locations - if (musicSettings.musicLocations != newDirs) { - L.d("Committing changes") - musicSettings.musicLocations = newDirs - } + musicSettings.musicLocations = newDirs } } diff --git a/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt b/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt index 73be221d7..78cb17d2c 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt @@ -60,7 +60,12 @@ class MusicLocation internal constructor(val uri: Uri, val path: Path) { val path = documentPathFactory.unpackDocumentTreeUri(uri) ?: return null return MusicLocation(uri, path) } + + fun toString(list: List) = + list.joinToString(";") { it.uri.toString().replace(";", "\\;") } + + fun existing(context: Context, string: String): List { + return string.splitEscaped { it == ';' }.mapNotNull { existing(context, Uri.parse(it)) } + } } } - -private const val VOLUME_INTERNAL = "internal"