Custom dialog style for ListPreference.

This commit is contained in:
Docile-Alligator 2025-07-08 22:29:02 -04:00
parent 6a2e59e255
commit dad626b703
4 changed files with 70 additions and 5 deletions

View File

@ -7,12 +7,13 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.preference.ListPreference;
import androidx.preference.PreferenceViewHolder;
import ml.docilealligator.infinityforreddit.CustomFontReceiver;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
public class CustomFontListPreference extends ListPreference implements CustomFontReceiver, CustomThemeWrapperReceiver {
private CustomThemeWrapper customThemeWrapper;
@ -35,7 +36,7 @@ public class CustomFontListPreference extends ListPreference implements CustomFo
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
View iconImageView = holder.findViewById(android.R.id.icon);
View titleTextView = holder.findViewById(android.R.id.title);

View File

@ -10,8 +10,9 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceViewHolder;
import ml.docilealligator.infinityforreddit.CustomFontReceiver;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
public class CustomFontPreferenceCategory extends PreferenceCategory implements CustomFontReceiver, CustomThemeWrapperReceiver {
private CustomThemeWrapper customThemeWrapper;
@ -37,6 +38,11 @@ public class CustomFontPreferenceCategory extends PreferenceCategory implements
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
View titleTextView = holder.findViewById(android.R.id.title);
holder.setDividerAllowedAbove(false);
View iconView = holder.findViewById(R.id.icon_frame);
if (iconView != null) {
iconView.setVisibility(View.GONE);
}
if (customThemeWrapper != null) {
if (titleTextView instanceof TextView) {

View File

@ -10,15 +10,20 @@ import androidx.core.graphics.Insets;
import androidx.core.view.OnApplyWindowInsetsListener;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.DialogFragment;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
import ml.docilealligator.infinityforreddit.CustomFontReceiver;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
import ml.docilealligator.infinityforreddit.activities.SettingsActivity;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapperReceiver;
public abstract class CustomFontPreferenceFragmentCompat extends PreferenceFragmentCompat implements PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
private static final String DIALOG_FRAGMENT_TAG =
"androidx.preference.PreferenceFragment.DIALOG";
public abstract class CustomFontPreferenceFragmentCompat extends PreferenceFragmentCompat {
protected SettingsActivity activity;
@Override
@ -61,6 +66,18 @@ public abstract class CustomFontPreferenceFragmentCompat extends PreferenceFragm
}
}
@Override
public boolean onPreferenceDisplayDialog(@NonNull PreferenceFragmentCompat caller, @NonNull Preference pref) {
if (pref instanceof ListPreference) {
DialogFragment f = CustomStyleListPreferenceDialogFragmentCompat.newInstance(pref.getKey());
f.setTargetFragment(this, 0);
f.show(getParentFragmentManager(), DIALOG_FRAGMENT_TAG);
return true;
}
return false;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);

View File

@ -0,0 +1,41 @@
package ml.docilealligator.infinityforreddit.customviews.preference
import android.app.Dialog
import android.os.Bundle
import androidx.preference.ListPreferenceDialogFragmentCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import ml.docilealligator.infinityforreddit.R
class CustomStyleListPreferenceDialogFragmentCompat : ListPreferenceDialogFragmentCompat() {
companion object {
@JvmStatic
fun newInstance(key: String?): CustomStyleListPreferenceDialogFragmentCompat {
val fragment = CustomStyleListPreferenceDialogFragmentCompat()
val b = Bundle(1)
b.putString(ARG_KEY, key)
fragment.arguments = b
return fragment
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = MaterialAlertDialogBuilder(requireContext(), R.style.MaterialAlertDialogTheme)
.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()
}
}