diff options
Diffstat (limited to 'src/de/danoeh/antennapod/adapter')
7 files changed, 112 insertions, 111 deletions
diff --git a/src/de/danoeh/antennapod/adapter/AbstractFeedItemlistAdapter.java b/src/de/danoeh/antennapod/adapter/AbstractFeedItemlistAdapter.java index 5c720d652..6f4cf7c29 100644 --- a/src/de/danoeh/antennapod/adapter/AbstractFeedItemlistAdapter.java +++ b/src/de/danoeh/antennapod/adapter/AbstractFeedItemlistAdapter.java @@ -1,49 +1,39 @@ package de.danoeh.antennapod.adapter; -import java.util.List; - -import android.content.Context; -import android.widget.ArrayAdapter; -import de.danoeh.antennapod.PodcastApp; +import android.widget.BaseAdapter; import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.util.EpisodeFilter; -public abstract class AbstractFeedItemlistAdapter extends - ArrayAdapter<FeedItem> { +public abstract class AbstractFeedItemlistAdapter extends BaseAdapter { - private List<FeedItem> objects; - private boolean isExpanded = true; + ItemAccess itemAccess; - public AbstractFeedItemlistAdapter(Context context, int textViewResourceId, - List<FeedItem> objects) { - super(context, textViewResourceId, objects); - this.objects = objects; + public AbstractFeedItemlistAdapter(ItemAccess itemAccess) { + super(); + if (itemAccess == null) { + throw new IllegalArgumentException("itemAccess must not be null"); + } + this.itemAccess = itemAccess; } @Override public int getCount() { - if (isExpanded) { - if (PodcastApp.getInstance().displayOnlyEpisodes()) { - return EpisodeFilter.countItemsWithEpisodes(objects); - } else { - return super.getCount(); - } - } else { - return 0; - } + return itemAccess.getCount(); + + } + + @Override + public long getItemId(int position) { + return position; } @Override public FeedItem getItem(int position) { - if (PodcastApp.getInstance().displayOnlyEpisodes()) { - return EpisodeFilter.accessEpisodeByIndex(objects, position); - } else { - return super.getItem(position); - } + return itemAccess.getItem(position); } - public void toggleExpandedState() { - isExpanded = !isExpanded; - notifyDataSetChanged(); + public static interface ItemAccess { + int getCount(); + + FeedItem getItem(int position); } } diff --git a/src/de/danoeh/antennapod/adapter/ChapterListAdapter.java b/src/de/danoeh/antennapod/adapter/ChapterListAdapter.java index 145ca4230..3e9b586ce 100644 --- a/src/de/danoeh/antennapod/adapter/ChapterListAdapter.java +++ b/src/de/danoeh/antennapod/adapter/ChapterListAdapter.java @@ -20,20 +20,21 @@ import android.widget.ArrayAdapter; import android.widget.TextView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.util.ChapterUtils; import de.danoeh.antennapod.util.Converter; +import de.danoeh.antennapod.util.playback.Playable; public class ChapterListAdapter extends ArrayAdapter<Chapter> { private static final String TAG = "ChapterListAdapter"; private List<Chapter> chapters; - private FeedMedia media; + private Playable media; private int defaultTextColor; public ChapterListAdapter(Context context, int textViewResourceId, - List<Chapter> objects, FeedMedia media) { + List<Chapter> objects, Playable media) { super(context, textViewResourceId, objects); this.chapters = objects; this.media = media; @@ -122,7 +123,7 @@ public class ChapterListAdapter extends ArrayAdapter<Chapter> { } }); - Chapter current = sc.getItem().getCurrentChapter(); + Chapter current = ChapterUtils.getCurrentChapter(media); if (current != null) { if (current == sc) { holder.title.setTextColor(convertView.getResources().getColor( diff --git a/src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java index ce339be88..c0ccdc7fe 100644 --- a/src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java +++ b/src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java @@ -1,39 +1,40 @@ package de.danoeh.antennapod.adapter; import java.text.DateFormat; -import java.util.List; import android.content.Context; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; import android.widget.TextView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.asynctask.DownloadStatus; import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedFile; import de.danoeh.antennapod.feed.FeedImage; +import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.util.DownloadError; /** Displays a list of DownloadStatus entries. */ -public class DownloadLogAdapter extends ArrayAdapter<DownloadStatus> { +public class DownloadLogAdapter extends BaseAdapter { - public DownloadLogAdapter(Context context, int textViewResourceId, - List<DownloadStatus> objects) { - super(context, textViewResourceId, objects); + private Context context; + private FeedManager manager = FeedManager.getInstance(); + + public DownloadLogAdapter(Context context) { + super(); + this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; DownloadStatus status = getItem(position); - FeedFile feedfile = status.getFeedFile(); if (convertView == null) { holder = new Holder(); - LayoutInflater inflater = (LayoutInflater) getContext() + LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.downloadlog_item, null); holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); @@ -71,7 +72,7 @@ public class DownloadLogAdapter extends ArrayAdapter<DownloadStatus> { holder.successful.setTextColor(convertView.getResources().getColor( R.color.download_failed_red)); holder.successful.setText(R.string.download_failed); - String reasonText = DownloadError.getErrorString(getContext(), + String reasonText = DownloadError.getErrorString(context, status.getReason()); if (status.getReasonDetailed() != null) { reasonText += ": " + status.getReasonDetailed(); @@ -91,4 +92,19 @@ public class DownloadLogAdapter extends ArrayAdapter<DownloadStatus> { TextView reason; } + @Override + public int getCount() { + return manager.getDownloadLogSize(); + } + + @Override + public DownloadStatus getItem(int position) { + return manager.getDownloadStatusFromLogAtIndex(position); + } + + @Override + public long getItemId(int position) { + return position; + } + } diff --git a/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java b/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java index 2670dfa44..db716c66e 100644 --- a/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java +++ b/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java @@ -1,7 +1,5 @@ package de.danoeh.antennapod.adapter; -import java.util.List; - import android.content.Context; import android.content.res.TypedArray; import android.view.LayoutInflater; @@ -12,14 +10,13 @@ import android.widget.BaseExpandableListAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; -import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.FeedImageLoader; +import de.danoeh.antennapod.asynctask.ImageLoader; import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.EpisodeFilter; /** * Displays unread items and items in the queue in one combined list. The @@ -32,21 +29,17 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { public static final int GROUP_POS_UNREAD = 1; private Context context; - - private List<FeedItem> unreadItems; - private List<FeedItem> queueItems; + private FeedManager manager = FeedManager.getInstance(); private ActionButtonCallback feedItemActionCallback; private OnGroupActionClicked groupActionCallback; public ExternalEpisodesListAdapter(Context context, - List<FeedItem> unreadItems, List<FeedItem> queueItems, ActionButtonCallback callback, OnGroupActionClicked groupActionCallback) { super(); this.context = context; - this.unreadItems = unreadItems; - this.queueItems = queueItems; + this.feedItemActionCallback = callback; this.groupActionCallback = groupActionCallback; } @@ -58,22 +51,10 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { @Override public FeedItem getChild(int groupPosition, int childPosition) { - final boolean displayOnlyEpisodes = PodcastApp.getInstance() - .displayOnlyEpisodes(); if (groupPosition == GROUP_POS_QUEUE) { - if (displayOnlyEpisodes) { - return EpisodeFilter.accessEpisodeByIndex(queueItems, - childPosition); - } else { - return queueItems.get(childPosition); - } + return manager.getQueueItemAtIndex(childPosition, true); } else if (groupPosition == GROUP_POS_UNREAD) { - if (displayOnlyEpisodes) { - return EpisodeFilter.accessEpisodeByIndex(unreadItems, - childPosition); - } else { - return unreadItems.get(childPosition); - } + return manager.getUnreadItemAtIndex(childPosition, true); } return null; } @@ -180,8 +161,9 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { holder.lenSize.setVisibility(View.INVISIBLE); } - holder.feedImage.setTag(item.getFeed().getImage()); - FeedImageLoader.getInstance().loadThumbnailBitmap( + holder.feedImage.setTag((item.getFeed().getImage() != null) ? item + .getFeed().getImage().getFile_url() : null); + ImageLoader.getInstance().loadThumbnailBitmap( item.getFeed().getImage(), holder.feedImage, (int) convertView.getResources().getDimension( @@ -213,20 +195,10 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { @Override public int getChildrenCount(int groupPosition) { - final boolean displayOnlyEpisodes = PodcastApp.getInstance() - .displayOnlyEpisodes(); if (groupPosition == GROUP_POS_QUEUE) { - if (displayOnlyEpisodes) { - return EpisodeFilter.countItemsWithEpisodes(queueItems); - } else { - return queueItems.size(); - } + return manager.getQueueSize(true); } else if (groupPosition == GROUP_POS_UNREAD) { - if (displayOnlyEpisodes) { - return EpisodeFilter.countItemsWithEpisodes(unreadItems); - } else { - return unreadItems.size(); - } + return manager.getUnreadItemsSize(true); } return 0; } @@ -254,12 +226,12 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { String headerString = null; if (groupPosition == 0) { headerString = context.getString(R.string.queue_label); - if (!queueItems.isEmpty()) { + if (manager.getQueueSize(true) > 0) { headerString += " (" + getChildrenCount(GROUP_POS_QUEUE) + ")"; } } else { headerString = context.getString(R.string.new_label); - if (!unreadItems.isEmpty()) { + if (manager.getUnreadItemsSize(true) > 0) { headerString += " (" + getChildrenCount(GROUP_POS_UNREAD) + ")"; } } @@ -277,7 +249,8 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter { @Override public boolean isEmpty() { - return unreadItems.isEmpty() && queueItems.isEmpty(); + return manager.getUnreadItemsSize(true) == 0 + && manager.getQueueSize(true) == 0; } @Override diff --git a/src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 5941d52ea..0dda5d035 100644 --- a/src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -1,11 +1,9 @@ package de.danoeh.antennapod.adapter; import java.text.DateFormat; -import java.util.List; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.Typeface; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; @@ -24,16 +22,20 @@ import de.danoeh.antennapod.util.Converter; import de.danoeh.antennapod.util.ThemeUtils; public class FeedItemlistAdapter extends AbstractFeedItemlistAdapter { + + private Context context; + private ActionButtonCallback callback; private boolean showFeedtitle; private int selectedItemIndex; public static final int SELECTION_NONE = -1; - public FeedItemlistAdapter(Context context, int textViewResourceId, - List<FeedItem> objects, ActionButtonCallback callback, - boolean showFeedtitle) { - super(context, textViewResourceId, objects); + public FeedItemlistAdapter(Context context, + AbstractFeedItemlistAdapter.ItemAccess itemAccess, + ActionButtonCallback callback, boolean showFeedtitle) { + super(itemAccess); + this.context = context; this.callback = callback; this.showFeedtitle = showFeedtitle; this.selectedItemIndex = SELECTION_NONE; @@ -46,7 +48,7 @@ public class FeedItemlistAdapter extends AbstractFeedItemlistAdapter { if (convertView == null) { holder = new Holder(); - LayoutInflater inflater = (LayoutInflater) getContext() + LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.feeditemlist_item, null); holder.title = (TextView) convertView @@ -161,7 +163,7 @@ public class FeedItemlistAdapter extends AbstractFeedItemlistAdapter { holder.downloading.setVisibility(View.GONE); } - TypedArray typeDrawables = getContext().obtainStyledAttributes( + TypedArray typeDrawables = context.obtainStyledAttributes( new int[] { R.attr.type_audio, R.attr.type_video }); MediaType mediaType = item.getMedia().getMediaType(); if (mediaType == MediaType.AUDIO) { diff --git a/src/de/danoeh/antennapod/adapter/FeedlistAdapter.java b/src/de/danoeh/antennapod/adapter/FeedlistAdapter.java index f89f2854a..d7ea0c160 100644 --- a/src/de/danoeh/antennapod/adapter/FeedlistAdapter.java +++ b/src/de/danoeh/antennapod/adapter/FeedlistAdapter.java @@ -1,34 +1,37 @@ package de.danoeh.antennapod.adapter; import java.text.DateFormat; -import java.util.List; import android.content.Context; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.FeedImageLoader; +import de.danoeh.antennapod.asynctask.ImageLoader; import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.ThemeUtils; -public class FeedlistAdapter extends ArrayAdapter<Feed> { +public class FeedlistAdapter extends BaseAdapter { private static final String TAG = "FeedlistAdapter"; + private Context context; + private FeedManager manager = FeedManager.getInstance(); + private int selectedItemIndex; - private FeedImageLoader imageLoader; + private ImageLoader imageLoader; public static final int SELECTION_NONE = -1; - public FeedlistAdapter(Context context, int textViewResourceId, - List<Feed> objects) { - super(context, textViewResourceId, objects); + public FeedlistAdapter(Context context) { + super(); + this.context = context; selectedItemIndex = SELECTION_NONE; - imageLoader = FeedImageLoader.getInstance(); + imageLoader = ImageLoader.getInstance(); } @Override @@ -39,7 +42,7 @@ public class FeedlistAdapter extends ArrayAdapter<Feed> { // Inflate Layout if (convertView == null) { holder = new Holder(); - LayoutInflater inflater = (LayoutInflater) getContext() + LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.feedlist_item, null); @@ -83,7 +86,7 @@ public class FeedlistAdapter extends ArrayAdapter<Feed> { .getTime(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.SHORT)); } - holder.numberOfEpisodes.setText(feed.getNumOfItems() + holder.numberOfEpisodes.setText(feed.getNumOfItems(true) + convertView.getResources() .getString(R.string.episodes_suffix)); @@ -105,8 +108,9 @@ public class FeedlistAdapter extends ArrayAdapter<Feed> { holder.inProgressEpisodesLabel.setVisibility(View.INVISIBLE); } - holder.image.setTag(feed.getImage()); - + final String imageUrl = (feed.getImage() != null) ? feed.getImage() + .getFile_url() : null; + holder.image.setTag(imageUrl); imageLoader.loadThumbnailBitmap( feed.getImage(), holder.image, @@ -136,4 +140,19 @@ public class FeedlistAdapter extends ArrayAdapter<Feed> { notifyDataSetChanged(); } + @Override + public int getCount() { + return manager.getFeedsSize(); + } + + @Override + public Feed getItem(int position) { + return manager.getFeedAtIndex(position); + } + + @Override + public long getItemId(int position) { + return position; + } + } diff --git a/src/de/danoeh/antennapod/adapter/SearchlistAdapter.java b/src/de/danoeh/antennapod/adapter/SearchlistAdapter.java index c7f42e7cb..129289d30 100644 --- a/src/de/danoeh/antennapod/adapter/SearchlistAdapter.java +++ b/src/de/danoeh/antennapod/adapter/SearchlistAdapter.java @@ -10,7 +10,7 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.FeedImageLoader; +import de.danoeh.antennapod.asynctask.ImageLoader; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedComponent; import de.danoeh.antennapod.feed.FeedItem; @@ -51,7 +51,7 @@ public class SearchlistAdapter extends ArrayAdapter<SearchResult> { final Feed feed = (Feed) component; holder.title.setText(feed.getTitle()); holder.subtitle.setVisibility(View.GONE); - FeedImageLoader.getInstance().loadThumbnailBitmap(feed.getImage(), + ImageLoader.getInstance().loadThumbnailBitmap(feed.getImage(), holder.cover, (int) convertView.getResources().getDimension(R.dimen.thumbnail_length)); } else if (component.getClass() == FeedItem.class) { final FeedItem item = (FeedItem) component; @@ -61,7 +61,7 @@ public class SearchlistAdapter extends ArrayAdapter<SearchResult> { holder.subtitle.setText(result.getSubtitle()); } - FeedImageLoader.getInstance().loadThumbnailBitmap( + ImageLoader.getInstance().loadThumbnailBitmap( item.getFeed().getImage(), holder.cover, (int) convertView.getResources().getDimension( |