summaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2021-03-05 14:12:07 +0100
committerByteHamster <info@bytehamster.com>2021-03-05 14:12:07 +0100
commit3f21ef50d313363238990bbfac186acf25e3c143 (patch)
tree6e2788665073a4b807ccc80c8a866f73439bffb1 /app/src/main/java
parent8586c7672053e45d2bfce29909a6a99cd68c4b8f (diff)
downloadAntennaPod-3f21ef50d313363238990bbfac186acf25e3c143.zip
Added basic tag editor UI
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/TagSettingsDialog.java116
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java20
2 files changed, 118 insertions, 18 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/TagSettingsDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/TagSettingsDialog.java
new file mode 100644
index 000000000..24a0cc192
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/TagSettingsDialog.java
@@ -0,0 +1,116 @@
+package de.danoeh.antennapod.dialog;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import com.google.android.material.chip.Chip;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedPreferences;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.databinding.EditTagsDialogBinding;
+import de.danoeh.antennapod.view.ItemOffsetDecoration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TagSettingsDialog extends DialogFragment {
+ public static final String TAG = "TagSettingsDialog";
+ private static final String ARG_FEED_PREFERENCES = "feed_preferences";
+ private List<String> displayedTags;
+
+ public static TagSettingsDialog newInstance(FeedPreferences preferences) {
+ TagSettingsDialog fragment = new TagSettingsDialog();
+ Bundle args = new Bundle();
+ args.putSerializable(ARG_FEED_PREFERENCES, preferences);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ FeedPreferences preferences = (FeedPreferences) getArguments().getSerializable(ARG_FEED_PREFERENCES);
+ displayedTags = new ArrayList<>(preferences.getTags());
+ displayedTags.remove(FeedPreferences.TAG_ROOT);
+
+ EditTagsDialogBinding viewBinding = EditTagsDialogBinding.inflate(getLayoutInflater());
+ viewBinding.tagsRecycler.setLayoutManager(new GridLayoutManager(getContext(), 2));
+ viewBinding.tagsRecycler.addItemDecoration(new ItemOffsetDecoration(getContext(), 4));
+ TagSelectionAdapter adapter = new TagSelectionAdapter();
+ adapter.setHasStableIds(true);
+ viewBinding.tagsRecycler.setAdapter(adapter);
+ viewBinding.rootFolderCheckbox.setChecked(preferences.getTags().contains(FeedPreferences.TAG_ROOT));
+
+
+ viewBinding.newTagButton.setOnClickListener(v -> {
+ String name = viewBinding.newTagEditText.getText().toString().trim();
+ if (TextUtils.isEmpty(name) || displayedTags.contains(name)) {
+ return;
+ }
+ displayedTags.add(name);
+ viewBinding.newTagEditText.setText("");
+ adapter.notifyDataSetChanged();
+ });
+
+ AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
+ dialog.setView(viewBinding.getRoot());
+ dialog.setTitle(R.string.feed_folders_label);
+ dialog.setPositiveButton(android.R.string.ok, (d, input) -> {
+ preferences.getTags().clear();
+ preferences.getTags().addAll(displayedTags);
+ if (viewBinding.rootFolderCheckbox.isChecked()) {
+ preferences.getTags().add(FeedPreferences.TAG_ROOT);
+ }
+ DBWriter.setFeedPreferences(preferences);
+ });
+ dialog.setNegativeButton(R.string.cancel_label, null);
+ return dialog.create();
+ }
+
+ public class TagSelectionAdapter extends RecyclerView.Adapter<TagSelectionAdapter.ViewHolder> {
+
+ @Override
+ @NonNull
+ public TagSelectionAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ Chip chip = new Chip(getContext());
+ chip.setCloseIconVisible(true);
+ chip.setCloseIconResource(R.drawable.ic_delete_black);
+ return new TagSelectionAdapter.ViewHolder(chip);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull TagSelectionAdapter.ViewHolder holder, int position) {
+ holder.chip.setText(displayedTags.get(position));
+ holder.chip.setOnCloseIconClickListener(v -> {
+ displayedTags.remove(position);
+ notifyDataSetChanged();
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return displayedTags.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return displayedTags.get(position).hashCode();
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ Chip chip;
+
+ ViewHolder(Chip itemView) {
+ super(itemView);
+ chip = itemView;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
index c000107a7..11fb68ec3 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
@@ -9,7 +9,6 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.preference.ListPreference;
@@ -28,10 +27,10 @@ import de.danoeh.antennapod.core.feed.VolumeAdaptionSetting;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.databinding.EditTextDialogBinding;
import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.dialog.EpisodeFilterDialog;
import de.danoeh.antennapod.dialog.FeedPreferenceSkipDialog;
+import de.danoeh.antennapod.dialog.TagSettingsDialog;
import io.reactivex.Maybe;
import io.reactivex.MaybeOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -41,8 +40,6 @@ import org.greenrobot.eventbus.EventBus;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
-import java.util.Arrays;
-import java.util.HashSet;
import java.util.Locale;
import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
@@ -403,20 +400,7 @@ public class FeedSettingsFragment extends Fragment {
private void setupTags() {
findPreference(PREF_TAGS).setOnPreferenceClickListener(preference -> {
- EditTextDialogBinding alertViewBinding = EditTextDialogBinding.inflate(getLayoutInflater());
- alertViewBinding.urlEditText.setText(feed.getPreferences().getTagsAsString());
- new AlertDialog.Builder(getContext())
- .setView(alertViewBinding.getRoot())
- .setTitle(R.string.feed_folders_label)
- .setPositiveButton(android.R.string.ok, (d, input) -> {
- String foldersString = alertViewBinding.urlEditText.getText().toString();
- feedPreferences.getTags().clear();
- feedPreferences.getTags().addAll(new HashSet<>(Arrays.asList(
- foldersString.split(FeedPreferences.TAG_SEPARATOR))));
- DBWriter.setFeedPreferences(feedPreferences);
- })
- .setNegativeButton(R.string.cancel_label, null)
- .show();
+ TagSettingsDialog.newInstance(feedPreferences).show(getChildFragmentManager(), TagSettingsDialog.TAG);
return true;
});
}