summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/adapter
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/adapter')
-rw-r--r--src/de/danoeh/antennapod/adapter/AbstractFeedItemlistAdapter.java52
-rw-r--r--src/de/danoeh/antennapod/adapter/ChapterListAdapter.java9
-rw-r--r--src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java36
-rw-r--r--src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java57
-rw-r--r--src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java18
-rw-r--r--src/de/danoeh/antennapod/adapter/FeedlistAdapter.java45
-rw-r--r--src/de/danoeh/antennapod/adapter/SearchlistAdapter.java6
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(