Override ListPreferenceDialogs to use MaterialAlertDialog

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-11-22 16:30:28 +05:30
parent a644dd397c
commit b8a1495726
3 changed files with 65 additions and 0 deletions

View File

@@ -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()
}
}

View File

@@ -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)

View File

@@ -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)