From b107e6da95ae9f9ba771a235252ada059bfa7791 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 2 Jan 2021 17:16:57 +0100 Subject: [PATCH] Fixed crash when opening subscriptions screen --- .../adapter/SubscriptionsAdapter.java | 59 +++++++++++++------ .../antennapod/core/storage/DBReader.java | 8 ++- .../core/storage/NavDrawerData.java | 26 +++++++- 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java index a64c3a6d4..d07d3cbe4 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.adapter; +import android.content.ContentResolver; import android.content.Context; import androidx.core.text.TextUtilsCompat; @@ -22,6 +23,7 @@ import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.LocalFeedUpdater; import de.danoeh.antennapod.core.storage.NavDrawerData; +import de.danoeh.antennapod.core.util.ThemeUtils; import de.danoeh.antennapod.fragment.FeedItemlistFragment; import jp.shts.android.library.TriangleLabelView; @@ -61,7 +63,7 @@ public class SubscriptionsAdapter extends BaseAdapter implements AdapterView.OnI @Override public long getItemId(int position) { - return position; // TODO + return ((NavDrawerData.DrawerItem) getItem(position)).id; } @Override @@ -84,11 +86,13 @@ public class SubscriptionsAdapter extends BaseAdapter implements AdapterView.OnI holder = (Holder) convertView.getTag(); } - final Feed feed = (Feed) getItem(position); - if (feed == null) return null; + final NavDrawerData.DrawerItem drawerItem = (NavDrawerData.DrawerItem) getItem(position); + if (drawerItem == null) { + return null; + } - holder.feedTitle.setText(feed.getTitle()); - holder.imageView.setContentDescription(feed.getTitle()); + holder.feedTitle.setText(drawerItem.getTitle()); + holder.imageView.setContentDescription(drawerItem.getTitle()); holder.feedTitle.setVisibility(View.VISIBLE); // Fix TriangleLabelView corner for RTL @@ -97,30 +101,49 @@ public class SubscriptionsAdapter extends BaseAdapter implements AdapterView.OnI holder.count.setCorner(TriangleLabelView.Corner.TOP_LEFT); } - int count = itemAccess.getFeedCounter(feed.getId()); - if(count > 0) { - holder.count.setPrimaryText( - NumberFormat.getInstance().format(itemAccess.getFeedCounter(feed.getId()))); + if (drawerItem.getCounter() > 0) { + holder.count.setPrimaryText(NumberFormat.getInstance().format(drawerItem.getCounter())); holder.count.setVisibility(View.VISIBLE); } else { holder.count.setVisibility(View.GONE); } - boolean textAndImageCombined = feed.isLocalFeed() - && LocalFeedUpdater.getDefaultIconUrl(convertView.getContext()).equals(feed.getImageUrl()); - new CoverLoader(mainActivityRef.get()) - .withUri(feed.getImageLocation()) - .withPlaceholderView(holder.feedTitle, textAndImageCombined) - .withCoverView(holder.imageView) - .load(); + if (drawerItem.type == NavDrawerData.DrawerItem.Type.FEED) { + Feed feed = ((NavDrawerData.FeedDrawerItem) drawerItem).feed; + boolean textAndImageCombined = feed.isLocalFeed() + && LocalFeedUpdater.getDefaultIconUrl(convertView.getContext()).equals(feed.getImageUrl()); + new CoverLoader(mainActivityRef.get()) + .withUri(feed.getImageLocation()) + .withPlaceholderView(holder.feedTitle, textAndImageCombined) + .withCoverView(holder.imageView) + .load(); + } else { + String resourceEntryName = mainActivityRef.get().getResources() + .getResourceEntryName(ThemeUtils.getDrawableFromAttr(mainActivityRef.get(), R.attr.ic_folder)); + String iconUri = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + + mainActivityRef.get().getPackageName() + "/raw/" + + resourceEntryName; + new CoverLoader(mainActivityRef.get()) + .withUri(iconUri) + .withPlaceholderView(holder.feedTitle, true) + .withCoverView(holder.imageView) + .load(); + } return convertView; } @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Fragment fragment = FeedItemlistFragment.newInstance(getItemId(position)); - mainActivityRef.get().loadChildFragment(fragment); + final NavDrawerData.DrawerItem drawerItem = (NavDrawerData.DrawerItem) getItem(position); + if (drawerItem == null) { + return; + } + if (drawerItem.type == NavDrawerData.DrawerItem.Type.FEED) { + Feed feed = ((NavDrawerData.FeedDrawerItem) drawerItem).feed; + Fragment fragment = FeedItemlistFragment.newInstance(feed.getId()); + mainActivityRef.get().loadChildFragment(fragment); + } } static class Holder { diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 8721dcd08..e1bb93db3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -868,18 +868,20 @@ public final class DBReader { List items = new ArrayList<>(); for (int i = 0, feedsSize = feeds.size(); i < feedsSize; i++) { - items.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 0, i)); + items.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 0, i, feedCounters.get(feeds.get(i).getId()))); } List folderItems = new ArrayList<>(); for (int i = 0, feedsSize = feeds.size(); i < feedsSize; i++) { - folderItems.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 1, 10001 + i)); + folderItems.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 1, 10001 + i, + feedCounters.get(feeds.get(i).getId()))); } items.add(new NavDrawerData.FolderDrawerItem("Folder 1", folderItems, 0, 10000)); List folderItems2 = new ArrayList<>(); for (int i = 0, feedsSize = feeds.size(); i < feedsSize; i++) { - folderItems2.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 1, 20001 + i)); + folderItems2.add(new NavDrawerData.FeedDrawerItem(feeds.get(i), 1, 20001 + i, + feedCounters.get(feeds.get(i).getId()))); } items.add(new NavDrawerData.FolderDrawerItem("Folder 2", folderItems2, 0, 20000)); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java b/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java index 05ca7ffe1..8d917d81b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java @@ -27,7 +27,7 @@ public class NavDrawerData { this.reclaimableSpace = reclaimableSpace; } - public static class DrawerItem { + public abstract static class DrawerItem { public enum Type { FOLDER, FEED } @@ -41,6 +41,10 @@ public class NavDrawerData { this.layer = layer; this.id = id; } + + public abstract String getTitle(); + + public abstract int getCounter(); } public static class FolderDrawerItem extends DrawerItem { @@ -52,14 +56,32 @@ public class NavDrawerData { this.children = children; this.name = name; } + + public String getTitle() { + return name; + } + + public int getCounter() { + return -1; + } } public static class FeedDrawerItem extends DrawerItem { public final Feed feed; + public final int counter; - public FeedDrawerItem(Feed feed, int layer, long id) { + public FeedDrawerItem(Feed feed, int layer, long id, int counter) { super(DrawerItem.Type.FEED, layer, id); this.feed = feed; + this.counter = counter; + } + + public String getTitle() { + return feed.getTitle(); + } + + public int getCounter() { + return counter; } } }