mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-10-29 11:49:33 +00:00
Show all tags on subscriptions screen, even if filtered (#7994)
This commit is contained in:
parent
de0f09f1e2
commit
af187ca551
@ -1,7 +1,6 @@
|
||||
package de.danoeh.antennapod.ui.screen.subscriptions;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
@ -31,14 +30,11 @@ import de.danoeh.antennapod.model.feed.Feed;
|
||||
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||
import de.danoeh.antennapod.storage.database.DBReader;
|
||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||
import de.danoeh.antennapod.storage.database.NavDrawerData;
|
||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.ui.MenuItemUtils;
|
||||
import de.danoeh.antennapod.ui.common.ConfirmationDialog;
|
||||
import de.danoeh.antennapod.ui.screen.AddFeedFragment;
|
||||
import de.danoeh.antennapod.ui.screen.SearchFragment;
|
||||
import de.danoeh.antennapod.ui.screen.feed.RenameFeedDialog;
|
||||
import de.danoeh.antennapod.ui.statistics.StatisticsFragment;
|
||||
import de.danoeh.antennapod.ui.view.EmptyViewHandler;
|
||||
import de.danoeh.antennapod.ui.view.FloatingSelectMenu;
|
||||
@ -201,9 +197,6 @@ public class SubscriptionFragment extends Fragment
|
||||
};
|
||||
tagAdapter.setSelectedTag(prefs.getString(PREF_LAST_TAG, FeedPreferences.TAG_ROOT));
|
||||
tagsRecycler.setAdapter(tagAdapter);
|
||||
if (getArguments() != null) {
|
||||
tagAdapter.setSelectedTag(getArguments().getString(ARGUMENT_FOLDER, null));
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
@ -331,14 +324,19 @@ public class SubscriptionFragment extends Fragment
|
||||
}
|
||||
emptyView.hide();
|
||||
disposable = Observable.fromCallable(
|
||||
() -> DBReader.getNavDrawerData(UserPreferences.getSubscriptionsFilter(),
|
||||
UserPreferences.getFeedOrder(), UserPreferences.getFeedCounterSetting()))
|
||||
() -> {
|
||||
NavDrawerData navDrawerData = DBReader.getNavDrawerData(
|
||||
UserPreferences.getSubscriptionsFilter(),
|
||||
UserPreferences.getFeedOrder(), UserPreferences.getFeedCounterSetting());
|
||||
List<NavDrawerData.TagItem> tags = DBReader.getAllTags();
|
||||
return new Pair<>(navDrawerData, tags);
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
result -> {
|
||||
List<Feed> openedFolderFeeds = result.feeds;
|
||||
for (NavDrawerData.TagItem tag : result.tags) {
|
||||
List<Feed> openedFolderFeeds = result.first.feeds;
|
||||
for (NavDrawerData.TagItem tag : result.first.tags) { // Filtered list
|
||||
if (tag.getTitle().equals(tagAdapter.getSelectedTag())) {
|
||||
openedFolderFeeds = tag.getFeeds();
|
||||
break;
|
||||
@ -352,14 +350,14 @@ public class SubscriptionFragment extends Fragment
|
||||
}
|
||||
feeds = openedFolderFeeds;
|
||||
progressBar.setVisibility(View.GONE);
|
||||
subscriptionAdapter.setItems(feeds, result.feedCounters);
|
||||
subscriptionAdapter.setItems(feeds, result.first.feedCounters);
|
||||
if (firstLoaded) {
|
||||
restoreScrollPosition(scrollPosition);
|
||||
}
|
||||
emptyView.updateVisibility();
|
||||
if (tagAdapter != null) {
|
||||
tagAdapter.setTags(result.tags);
|
||||
tagsRecycler.setVisibility(result.tags.size() > 1 ? View.VISIBLE : View.GONE);
|
||||
tagAdapter.setTags(result.second);
|
||||
tagsRecycler.setVisibility(result.second.size() > 1 ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
}, error -> {
|
||||
Log.e(TAG, Log.getStackTraceString(error));
|
||||
@ -386,29 +384,7 @@ public class SubscriptionFragment extends Fragment
|
||||
if (selectedTag == null) {
|
||||
return false;
|
||||
}
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.rename_folder_item) {
|
||||
new RenameFeedDialog(getActivity(), selectedTag).show();
|
||||
return true;
|
||||
} else if (itemId == R.id.delete_folder_item) {
|
||||
ConfirmationDialog dialog = new ConfirmationDialog(getContext(), R.string.delete_tag_label,
|
||||
getString(R.string.delete_tag_confirmation, selectedTag.getTitle())) {
|
||||
|
||||
@Override
|
||||
public void onConfirmButtonPressed(DialogInterface dialog) {
|
||||
tagAdapter.setSelectedTag(FeedPreferences.TAG_ROOT);
|
||||
for (Feed feed : selectedTag.getFeeds()) {
|
||||
FeedPreferences preferences = feed.getPreferences();
|
||||
preferences.getTags().remove(selectedTag.getTitle());
|
||||
DBWriter.setFeedPreferences(preferences);
|
||||
}
|
||||
}
|
||||
};
|
||||
dialog.createNewDialog().show();
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return TagMenuHandler.onMenuItemClicked(this, selectedTag, item, tagAdapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -66,6 +66,7 @@ public class SubscriptionTagAdapter extends RecyclerView.Adapter<SubscriptionTag
|
||||
holder.chip.setText(title);
|
||||
}
|
||||
holder.chip.setChecked(tag.getTitle().equals(selectedTag));
|
||||
holder.chip.setElevation(0);
|
||||
holder.chip.setOnClickListener(v -> onTagClick(tag));
|
||||
holder.chip.setOnTouchListener((v, e) -> {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
package de.danoeh.antennapod.ui.screen.subscriptions;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.view.MenuItem;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.model.feed.Feed;
|
||||
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||
import de.danoeh.antennapod.storage.database.NavDrawerData;
|
||||
import de.danoeh.antennapod.ui.common.ConfirmationDialog;
|
||||
import de.danoeh.antennapod.ui.screen.feed.RenameFeedDialog;
|
||||
|
||||
public class TagMenuHandler {
|
||||
private TagMenuHandler() {
|
||||
}
|
||||
|
||||
public static boolean onMenuItemClicked(@NonNull Fragment fragment, NavDrawerData.TagItem selectedTag,
|
||||
MenuItem item, SubscriptionTagAdapter tagAdapter) {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.rename_folder_item) {
|
||||
new RenameFeedDialog(fragment.getActivity(), selectedTag).show();
|
||||
return true;
|
||||
} else if (itemId == R.id.delete_folder_item) {
|
||||
ConfirmationDialog dialog = new ConfirmationDialog(fragment.getContext(), R.string.delete_tag_label,
|
||||
fragment.getString(R.string.delete_tag_confirmation, selectedTag.getTitle())) {
|
||||
|
||||
@Override
|
||||
public void onConfirmButtonPressed(DialogInterface dialog) {
|
||||
tagAdapter.setSelectedTag(FeedPreferences.TAG_ROOT);
|
||||
for (Feed feed : selectedTag.getFeeds()) {
|
||||
FeedPreferences preferences = feed.getPreferences();
|
||||
preferences.getTags().remove(selectedTag.getTitle());
|
||||
DBWriter.setFeedPreferences(preferences);
|
||||
}
|
||||
}
|
||||
};
|
||||
dialog.createNewDialog().show();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@
|
||||
android:id="@+id/tag_chip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:elevation="0dp"
|
||||
android:checkable="true"
|
||||
android:longClickable="true"
|
||||
style="@style/Widget.Material3.Chip.Filter" />
|
||||
|
||||
@ -755,6 +755,22 @@ public final class DBReader {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<NavDrawerData.TagItem> getAllTags() {
|
||||
Map<String, NavDrawerData.TagItem> tags = new HashMap<>();
|
||||
List<Feed> feeds = getFeedList();
|
||||
for (Feed feed : feeds) {
|
||||
for (String tag : feed.getPreferences().getTags()) {
|
||||
if (!tags.containsKey(tag)) {
|
||||
tags.put(tag, new NavDrawerData.TagItem(tag));
|
||||
}
|
||||
tags.get(tag).addFeed(feed, 0);
|
||||
}
|
||||
}
|
||||
List<NavDrawerData.TagItem> tagsSorted = new ArrayList<>(tags.values());
|
||||
Collections.sort(tagsSorted, (o1, o2) -> o1.getTitle().compareToIgnoreCase(o2.getTitle()));
|
||||
return tagsSorted;
|
||||
}
|
||||
|
||||
public static List<FeedItem> searchFeedItems(final long feedId, final String query) {
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user