From 0d62d35ae3d41a84c2ba1f4840e3db0951b26b34 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Sun, 29 Sep 2019 23:54:47 +0530 Subject: [PATCH] Fix option selection persistence --- .../fragments/settings/AbsSettingsFragment.kt | 6 ++--- .../preferences/MaterialListPreference.kt | 25 +++++++++++++------ .../retromusic/util/PreferenceUtil.java | 2 +- appthemehelper/build.gradle | 1 + .../supportv7/ATEPreferenceFragmentCompat.kt | 10 ++++---- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index d93b58520..73213577f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -23,8 +23,9 @@ import androidx.fragment.app.DialogFragment import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceManager -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat +import code.name.monkey.appthemehelper.util.ATHUtil +import code.name.monkey.retromusic.R import code.name.monkey.retromusic.preferences.* import code.name.monkey.retromusic.util.NavigationUtil @@ -60,7 +61,7 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setDivider(ColorDrawable(Color.TRANSPARENT)) - listView.setBackgroundColor(ThemeStore.primaryColor(requireContext())) + listView.setBackgroundColor(ATHUtil.resolveColor(requireContext(), R.attr.colorPrimary)) listView.overScrollMode = View.OVER_SCROLL_NEVER listView.setPadding(0, 0, 0, 0) listView.setPaddingRelative(0, 0, 0, 0) @@ -73,7 +74,6 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { is NowPlayingScreenPreference -> NowPlayingScreenPreferenceDialog.newInstance(preference.key) is AlbumCoverStylePreference -> AlbumCoverStylePreferenceDialog.newInstance(preference.key) is MaterialListPreference -> { - preference.entries MaterialListPreferenceDialog.newInstance(preference) } is BlacklistPreference -> BlacklistPreferenceDialog.newInstance() diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt index 3b4ca6e83..8c02e28b3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt @@ -76,18 +76,25 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val materialListPreference = preference as MaterialListPreference - position = materialListPreference.findIndexOfValue(materialListPreference.value) - val entries = arguments?.getStringArrayList(EXTRA_ENTRIES) val entriesValues = arguments?.getStringArrayList(EXTRA_ENTRIES_VALUES) + val position: Int = arguments?.getInt(EXTRA_POSITION) ?: 0 materialDialog = MaterialDialog(requireContext(), BottomSheet(LayoutMode.WRAP_CONTENT)) .title(text = materialListPreference.title.toString()) .positiveButton(R.string.set) .cornerRadius(PreferenceUtil.getInstance(requireContext()).dialogCorner) .listItemsSingleChoice(items = entries, initialSelection = position, waitForPositiveButton = true) { _, index, _ -> - materialListPreference.callChangeListener(entriesValues!![index]) - materialListPreference.setCustomValue(entriesValues[index]) - materialListPreference.summary = entries!![index] + entriesValues?.let { + materialListPreference.callChangeListener(it[index]) + materialListPreference.setCustomValue(it[index]) + } + entries?.let { + materialListPreference.summary = it[index] + val value = materialListPreference.entryValues[index].toString() + if (materialListPreference.callChangeListener(value)) { + materialListPreference.value = value + } + } dismiss() } return materialDialog @@ -107,18 +114,22 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { } companion object { - var position = 0 + private const val EXTRA_KEY = "key" private const val EXTRA_TITLE = "title" + private const val EXTRA_POSITION = "position" private const val EXTRA_ENTRIES = "extra_entries" private const val EXTRA_ENTRIES_VALUES = "extra_entries_values" fun newInstance(listPreference: ListPreference): MaterialListPreferenceDialog { val entries = listPreference.entries.toList() as ArrayList val entriesValues = listPreference.entryValues.toList() as ArrayList + println("List value: ${listPreference.value}") + val position = listPreference.findIndexOfValue(listPreference.value) val args = Bundle() - args.putString(EXTRA_KEY, listPreference.key) + args.putString(ARG_KEY, listPreference.key) args.putString(EXTRA_TITLE, listPreference.title.toString()) + args.putInt(EXTRA_POSITION, position) args.putStringArrayList(EXTRA_ENTRIES, entries) args.putStringArrayList(EXTRA_ENTRIES_VALUES, entriesValues) val fragment = MaterialListPreferenceDialog() diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java index 41444c3a8..c269e42ef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java @@ -792,7 +792,7 @@ public final class PreferenceUtil { } @LayoutRes - public int getHomeGridStyle(Context context) { + public int getHomeGridStyle(@NonNull Context context) { int pos = Integer.parseInt(mPreferences.getString(HOME_ARTIST_GRID_STYLE, "0")); TypedArray typedArray = context.getResources().obtainTypedArray(R.array.pref_home_grid_style_layout); int layoutRes = typedArray.getResourceId(pos, -1); diff --git a/appthemehelper/build.gradle b/appthemehelper/build.gradle index 046bd9a2c..4753a30a0 100644 --- a/appthemehelper/build.gradle +++ b/appthemehelper/build.gradle @@ -34,5 +34,6 @@ dependencies { implementation 'com.afollestad.material-dialogs:core:3.1.1' implementation 'com.afollestad.material-dialogs:input:3.1.1' implementation 'com.afollestad.material-dialogs:color:3.1.1' + implementation 'com.afollestad.material-dialogs:bottomsheets:3.1.1' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" } diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt index d6ba139c0..e6c8ff621 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt @@ -27,17 +27,17 @@ import code.name.monkey.appthemehelper.common.prefs.supportv7.dialogs.ATEPrefere */ abstract class ATEPreferenceFragmentCompat : PreferenceFragmentCompat() { override fun onDisplayPreferenceDialog(preference: Preference) { - if (callbackFragment is PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback) { - (callbackFragment as PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback).onPreferenceDisplayDialog(this, preference) + if (callbackFragment is OnPreferenceDisplayDialogCallback) { + (callbackFragment as OnPreferenceDisplayDialogCallback).onPreferenceDisplayDialog(this, preference) return } - if (activity is PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback) { - (activity as PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback).onPreferenceDisplayDialog(this, preference) + if (activity is OnPreferenceDisplayDialogCallback) { + (activity as OnPreferenceDisplayDialogCallback).onPreferenceDisplayDialog(this, preference) return } - if (fragmentManager!!.findFragmentByTag("android.support.v7.preference.PreferenceFragment.DIALOG") == null) { + if (fragmentManager?.findFragmentByTag("android.support.v7.preference.PreferenceFragment.DIALOG") == null) { val dialogFragment = onCreatePreferenceDialog(preference) if (dialogFragment != null) {