summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/dialog
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/AllEpisodesFilterDialog.java31
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/FeedItemFilterDialog.java26
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java83
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/ItemFilterDialog.java75
4 files changed, 132 insertions, 83 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/AllEpisodesFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AllEpisodesFilterDialog.java
new file mode 100644
index 000000000..f47a8f8eb
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/AllEpisodesFilterDialog.java
@@ -0,0 +1,31 @@
+package de.danoeh.antennapod.dialog;
+
+import android.os.Bundle;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
+import org.greenrobot.eventbus.EventBus;
+
+import java.util.Set;
+
+public class AllEpisodesFilterDialog extends ItemFilterDialog {
+
+ public static AllEpisodesFilterDialog newInstance(FeedItemFilter filter) {
+ AllEpisodesFilterDialog dialog = new AllEpisodesFilterDialog();
+ Bundle arguments = new Bundle();
+ arguments.putSerializable(ARGUMENT_FILTER, filter);
+ dialog.setArguments(arguments);
+ return dialog;
+ }
+
+ @Override
+ void onFilterChanged(Set<String> newFilterValues) {
+ EventBus.getDefault().post(new AllEpisodesFilterChangedEvent(newFilterValues));
+ }
+
+ public static class AllEpisodesFilterChangedEvent {
+ public final Set<String> filterValues;
+
+ public AllEpisodesFilterChangedEvent(Set<String> filterValues) {
+ this.filterValues = filterValues;
+ }
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemFilterDialog.java
new file mode 100644
index 000000000..e91e88fbf
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemFilterDialog.java
@@ -0,0 +1,26 @@
+package de.danoeh.antennapod.dialog;
+
+import android.os.Bundle;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.model.feed.Feed;
+
+import java.util.Set;
+
+public class FeedItemFilterDialog extends ItemFilterDialog {
+ private static final String ARGUMENT_FEED_ID = "feedId";
+
+ public static FeedItemFilterDialog newInstance(Feed feed) {
+ FeedItemFilterDialog dialog = new FeedItemFilterDialog();
+ Bundle arguments = new Bundle();
+ arguments.putSerializable(ARGUMENT_FILTER, feed.getItemFilter());
+ arguments.putLong(ARGUMENT_FEED_ID, feed.getId());
+ dialog.setArguments(arguments);
+ return dialog;
+ }
+
+ @Override
+ void onFilterChanged(Set<String> newFilterValues) {
+ long feedId = getArguments().getLong(ARGUMENT_FEED_ID);
+ DBWriter.setFeedItemsFilter(feedId, newFilterValues);
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java
deleted file mode 100644
index 593b055f6..000000000
--- a/app/src/main/java/de/danoeh/antennapod/dialog/FilterDialog.java
+++ /dev/null
@@ -1,83 +0,0 @@
-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 java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.model.feed.FeedItemFilter;
-import de.danoeh.antennapod.core.feed.FeedItemFilterGroup;
-import de.danoeh.antennapod.ui.common.RecursiveRadioGroup;
-
-public abstract class FilterDialog {
-
- protected FeedItemFilter filter;
- protected Context context;
-
- public FilterDialog(Context context, FeedItemFilter feedItemFilter) {
- this.context = context;
- this.filter = feedItemFilter;
- }
-
- public void openDialog() {
-
- final Set<String> filterValues = new HashSet<>(Arrays.asList(filter.getValues()));
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.filter);
-
- LayoutInflater inflater = LayoutInflater.from(this.context);
- View layout = inflater.inflate(R.layout.filter_dialog, null, false);
- LinearLayout rows = layout.findViewById(R.id.filter_rows);
- builder.setView(layout);
-
- for (FeedItemFilterGroup item : FeedItemFilterGroup.values()) {
- RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null, false);
- 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);
- filter2.setText(item.values[1].displayName);
- filter2.setTag(item.values[1].filterId);
- rows.addView(row);
- }
-
- for (String filterId : filterValues) {
- if (!TextUtils.isEmpty(filterId)) {
- RadioButton button = layout.findViewWithTag(filterId);
- if (button != null) {
- button.setChecked(true);
- }
- }
- }
-
- builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> {
- filterValues.clear();
- for (int i = 0; i < rows.getChildCount(); i++) {
- if (!(rows.getChildAt(i) instanceof RecursiveRadioGroup)) {
- continue;
- }
- RecursiveRadioGroup group = (RecursiveRadioGroup) rows.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.create().show();
- }
-
- protected abstract void updateFilter(Set<String> filterValues);
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ItemFilterDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ItemFilterDialog.java
new file mode 100644
index 000000000..ae938a6ec
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/ItemFilterDialog.java
@@ -0,0 +1,75 @@
+package de.danoeh.antennapod.dialog;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedItemFilterGroup;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
+import de.danoeh.antennapod.ui.common.RecursiveRadioGroup;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public abstract class ItemFilterDialog extends BottomSheetDialogFragment {
+ protected static final String ARGUMENT_FILTER = "filter";
+
+ private LinearLayout rows;
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ View layout = inflater.inflate(R.layout.filter_dialog, null, false);
+ rows = layout.findViewById(R.id.filter_rows);
+ FeedItemFilter filter = (FeedItemFilter) getArguments().getSerializable(ARGUMENT_FILTER);
+
+ for (FeedItemFilterGroup item : FeedItemFilterGroup.values()) {
+ RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null, false);
+ row.setOnCheckedChangeListener((group, checkedId) -> onFilterChanged(getNewFilterValues()));
+ 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);
+ filter2.setText(item.values[1].displayName);
+ filter2.setTag(item.values[1].filterId);
+ rows.addView(row);
+ }
+
+ for (String filterId : filter.getValues()) {
+ if (!TextUtils.isEmpty(filterId)) {
+ RadioButton button = layout.findViewWithTag(filterId);
+ if (button != null) {
+ button.setChecked(true);
+ }
+ }
+ }
+ return layout;
+ }
+
+ protected Set<String> getNewFilterValues() {
+ final Set<String> newFilterValues = new HashSet<>();
+ for (int i = 0; i < rows.getChildCount(); i++) {
+ if (!(rows.getChildAt(i) instanceof RecursiveRadioGroup)) {
+ continue;
+ }
+ RecursiveRadioGroup group = (RecursiveRadioGroup) rows.getChildAt(i);
+ if (group.getCheckedButton() != null) {
+ String tag = (String) group.getCheckedButton().getTag();
+ if (tag != null) { // Clear buttons use no tag
+ newFilterValues.add((String) group.getCheckedButton().getTag());
+ }
+ }
+ }
+ return newFilterValues;
+ }
+
+ abstract void onFilterChanged(Set<String> newFilterValues);
+}