diff options
author | ByteHamster <info@bytehamster.com> | 2021-03-05 14:12:07 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2021-03-05 14:12:07 +0100 |
commit | 3f21ef50d313363238990bbfac186acf25e3c143 (patch) | |
tree | 6e2788665073a4b807ccc80c8a866f73439bffb1 /app/src/main/java | |
parent | 8586c7672053e45d2bfce29909a6a99cd68c4b8f (diff) | |
download | AntennaPod-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.java | 116 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java | 20 |
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; }); } |