diff options
author | asdoi <36813904+asdoi@users.noreply.github.com> | 2020-10-16 11:56:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-16 13:56:43 +0200 |
commit | e334b9cad6c627d5793898c110e7e0ad57613c20 (patch) | |
tree | 7e360278d2c3de9b6edd76bd97983ed97e7e8517 /app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java | |
parent | 1324c81f22a30c80d267f447bd3213b94516d134 (diff) | |
download | AntennaPod-e334b9cad6c627d5793898c110e7e0ad57613c20.zip |
Extended subscriptions filter (#4502)
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java new file mode 100644 index 000000000..a8915480c --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/dialog/SubscriptionsFilterDialog.java @@ -0,0 +1,82 @@ +package de.danoeh.antennapod.dialog; + +import android.content.Context; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RadioButton; + +import androidx.appcompat.app.AlertDialog; + +import org.greenrobot.eventbus.EventBus; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent; +import de.danoeh.antennapod.core.feed.SubscriptionsFilter; +import de.danoeh.antennapod.core.feed.SubscriptionsFilterGroup; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.view.RecursiveRadioGroup; + +public class SubscriptionsFilterDialog { + public static void showDialog(Context context) { + SubscriptionsFilter subscriptionsFilter = UserPreferences.getSubscriptionsFilter(); + final Set<String> filterValues = new HashSet<>(Arrays.asList(subscriptionsFilter.getValues())); + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(context.getString(R.string.pref_filter_feed_title)); + + LayoutInflater inflater = LayoutInflater.from(context); + LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.filter_dialog, null, false); + builder.setView(layout); + + for (SubscriptionsFilterGroup item : SubscriptionsFilterGroup.values()) { + RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null); + RadioButton filter1 = row.findViewById(R.id.filter_dialog_radioButton1); + RadioButton filter2 = row.findViewById(R.id.filter_dialog_radioButton2); + filter1.setText(item.values[0].displayName); + filter1.setTag(item.values[0].filterId); + if (item.values.length == 2) { + filter2.setText(item.values[1].displayName); + filter2.setTag(item.values[1].filterId); + } else { + filter2.setVisibility(View.GONE); + } + layout.addView(row); + } + + for (String filterId : filterValues) { + if (!TextUtils.isEmpty(filterId)) { + ((RadioButton) layout.findViewWithTag(filterId)).setChecked(true); + } + } + + builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { + filterValues.clear(); + for (int i = 0; i < layout.getChildCount(); i++) { + if (!(layout.getChildAt(i) instanceof RecursiveRadioGroup)) { + continue; + } + RecursiveRadioGroup group = (RecursiveRadioGroup) layout.getChildAt(i); + if (group.getCheckedButton() != null) { + String tag = (String) group.getCheckedButton().getTag(); + if (tag != null) { // Clear buttons use no tag + filterValues.add((String) group.getCheckedButton().getTag()); + } + } + } + updateFilter(filterValues); + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.show(); + } + + private static void updateFilter(Set<String> filterValues) { + SubscriptionsFilter subscriptionsFilter = new SubscriptionsFilter(filterValues.toArray(new String[0])); + UserPreferences.setSubscriptionsFilter(subscriptionsFilter); + EventBus.getDefault().post(new UnreadItemsUpdateEvent()); + } +} |