diff --git a/app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt b/app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt new file mode 100644 index 000000000..cd624ffd0 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/custom/preference/ListPreferenceMaterialDialogFragmentCompat.kt @@ -0,0 +1,40 @@ +package com.aurora.store.view.custom.preference + +import android.app.Dialog +import android.os.Bundle +import androidx.preference.ListPreferenceDialogFragmentCompat +import com.google.android.material.dialog.MaterialAlertDialogBuilder + +class ListPreferenceMaterialDialogFragmentCompat : ListPreferenceDialogFragmentCompat() { + + companion object { + const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG" + + fun newInstance(key: String?): ListPreferenceMaterialDialogFragmentCompat { + val fragment = ListPreferenceMaterialDialogFragmentCompat() + val bundle = Bundle(1) + bundle.putString(ARG_KEY, key) + fragment.arguments = bundle + return fragment + } + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val builder = MaterialAlertDialogBuilder(requireContext()) + .setTitle(preference.dialogTitle) + .setIcon(preference.dialogIcon) + .setPositiveButton(preference.positiveButtonText, this) + .setNegativeButton(preference.negativeButtonText, this) + + val contentView = onCreateDialogView(requireContext()) + if (contentView != null) { + onBindDialogView(contentView) + builder.setView(contentView) + } else { + builder.setMessage(preference.dialogMessage) + } + + onPrepareDialogBuilder(builder) + return builder.create() + } +} diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt index bb2fcb89c..d58dcceba 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/InstallationPreference.kt @@ -24,6 +24,7 @@ import android.os.Bundle import android.view.View import androidx.appcompat.widget.Toolbar import androidx.navigation.fragment.findNavController +import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.aurora.extensions.isOAndAbove @@ -42,6 +43,8 @@ import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences import com.aurora.store.util.save import com.aurora.store.view.custom.preference.AuroraListPreference +import com.aurora.store.view.custom.preference.ListPreferenceMaterialDialogFragmentCompat +import com.aurora.store.view.custom.preference.ListPreferenceMaterialDialogFragmentCompat.Companion.PREFERENCE_DIALOG_FRAGMENT_TAG import com.topjohnwu.superuser.Shell import rikka.shizuku.Shizuku @@ -74,6 +77,16 @@ class InstallationPreference : PreferenceFragmentCompat() { setPreferencesFromResource(R.xml.preferences_installation, rootKey) } + override fun onDisplayPreferenceDialog(preference: Preference) { + if (preference is ListPreference) { + val dialogFragment = ListPreferenceMaterialDialogFragmentCompat.newInstance(preference.getKey()) + dialogFragment.setTargetFragment(this, 0) + dialogFragment.show(parentFragmentManager, PREFERENCE_DIALOG_FRAGMENT_TAG) + } else { + super.onDisplayPreferenceDialog(preference) + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/UIPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/UIPreference.kt index 75e58fdc8..e28654598 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/UIPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/UIPreference.kt @@ -33,6 +33,8 @@ import com.aurora.extensions.isTAndAbove import com.aurora.store.R import com.aurora.store.util.Preferences import com.aurora.store.util.save +import com.aurora.store.view.custom.preference.ListPreferenceMaterialDialogFragmentCompat +import com.aurora.store.view.custom.preference.ListPreferenceMaterialDialogFragmentCompat.Companion.PREFERENCE_DIALOG_FRAGMENT_TAG import java.util.Locale @@ -56,6 +58,16 @@ class UIPreference : PreferenceFragmentCompat() { } } + override fun onDisplayPreferenceDialog(preference: Preference) { + if (preference is ListPreference) { + val dialogFragment = ListPreferenceMaterialDialogFragmentCompat.newInstance(preference.getKey()) + dialogFragment.setTargetFragment(this, 0) + dialogFragment.show(parentFragmentManager, PREFERENCE_DIALOG_FRAGMENT_TAG) + } else { + super.onDisplayPreferenceDialog(preference) + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState)