From ef97411fbba3c229d63718966430469cb0f334b9 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 5 Dec 2022 22:36:35 +0100 Subject: Migrate ListPreference to Material Design 3 --- .../antennapod/dialog/SkipPreferenceDialog.java | 8 ++-- .../preferences/MaterialListPreference.java | 43 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java (limited to 'app/src/main/java/de') diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SkipPreferenceDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SkipPreferenceDialog.java index 28b48963c..a5eca4bc2 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/SkipPreferenceDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/SkipPreferenceDialog.java @@ -37,9 +37,7 @@ public class SkipPreferenceDialog { MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); builder.setTitle(direction == SkipDirection.SKIP_FORWARD ? R.string.pref_fast_forward : R.string.pref_rewind); - builder.setSingleChoiceItems(choices, checked, null); - builder.setNegativeButton(R.string.cancel_label, null); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { + builder.setSingleChoiceItems(choices, checked, (dialog, which) -> { int choice = ((AlertDialog) dialog).getListView().getCheckedItemPosition(); if (choice < 0 || choice >= values.length) { System.err.printf("Choice in showSkipPreference is out of bounds %d", choice); @@ -53,9 +51,11 @@ public class SkipPreferenceDialog { if (textView != null) { textView.setText(NumberFormat.getInstance().format(seconds)); } + dialog.dismiss(); } }); - builder.create().show(); + builder.setNegativeButton(R.string.cancel_label, null); + builder.show(); } public enum SkipDirection { diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java new file mode 100644 index 000000000..3ee08f369 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java @@ -0,0 +1,43 @@ +package de.danoeh.antennapod.preferences; + +import android.content.Context; +import android.util.AttributeSet; +import androidx.preference.ListPreference; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class MaterialListPreference extends ListPreference { + + public MaterialListPreference(Context context) { + super(context); + } + + public MaterialListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onClick() { + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()); + builder.setTitle(getTitle()); + builder.setIcon(getDialogIcon()); + builder.setNegativeButton(getNegativeButtonText(), null); + + CharSequence[] values = getEntryValues(); + int selected = -1; + for (int i = 0; i < values.length; i++) { + if (values[i].toString().equals(getValue())) { + selected = i; + } + } + builder.setSingleChoiceItems(getEntries(), selected, (dialog, which) -> { + dialog.dismiss(); + if (which >= 0 && getEntryValues() != null) { + String value = getEntryValues()[which].toString(); + if (callChangeListener(value)) { + setValue(value); + } + } + }); + builder.show(); + } +} -- cgit v1.2.3 From 95eae1519a54b443f80715c19eb3ca6e0dd253f9 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 5 Dec 2022 22:44:22 +0100 Subject: Disable duration text box when checkbox is off --- .../main/java/de/danoeh/antennapod/dialog/EpisodeFilterDialog.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/src/main/java/de') diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodeFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodeFilterDialog.java index 2aa3ab31c..220650f0f 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodeFilterDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodeFilterDialog.java @@ -28,11 +28,15 @@ public abstract class EpisodeFilterDialog extends MaterialAlertDialogBuilder { setTitle(R.string.episode_filters_label); setView(viewBinding.getRoot()); + viewBinding.durationCheckBox.setOnCheckedChangeListener( + (buttonView, isChecked) -> viewBinding.episodeFilterDurationText.setEnabled(isChecked)); if (filter.hasMinimalDurationFilter()) { viewBinding.durationCheckBox.setChecked(true); // Store minimal duration in seconds, show in minutes viewBinding.episodeFilterDurationText .setText(String.valueOf(filter.getMinimalDurationFilter() / 60)); + } else { + viewBinding.episodeFilterDurationText.setEnabled(false); } if (filter.excludeOnly()) { -- cgit v1.2.3