diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog')
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); +} |