summaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java
new file mode 100644
index 000000000..9bc148bc6
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java
@@ -0,0 +1,47 @@
+package de.danoeh.antennapod.preferences;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.util.AttributeSet;
+import androidx.preference.MultiSelectListPreference;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class MaterialMultiSelectListPreference extends MultiSelectListPreference {
+
+ public MaterialMultiSelectListPreference(Context context) {
+ super(context);
+ }
+
+ public MaterialMultiSelectListPreference(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);
+
+ boolean[] selected = new boolean[getEntries().length];
+ CharSequence[] values = getEntryValues();
+ for (int i = 0; i < values.length; i++) {
+ selected[i] = getValues().contains(values[i].toString());
+ }
+ builder.setMultiChoiceItems(getEntries(), selected,
+ (DialogInterface dialog, int which, boolean isChecked) -> selected[which] = isChecked);
+ builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
+ Set<String> selectedValues = new HashSet<>();
+ for (int i = 0; i < values.length; i++) {
+ if (selected[i]) {
+ selectedValues.add(getEntryValues()[i].toString());
+ }
+ }
+ setValues(selectedValues);
+ });
+ builder.show();
+ }
+}