summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/fragment/ItemlistFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/fragment/ItemlistFragment.java')
-rw-r--r--src/de/danoeh/antennapod/fragment/ItemlistFragment.java139
1 files changed, 106 insertions, 33 deletions
diff --git a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java
index 280734f02..40637544d 100644
--- a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -1,7 +1,9 @@
package de.danoeh.antennapod.fragment;
import android.annotation.SuppressLint;
+import android.content.Context;
import android.content.Intent;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v7.app.ActionBarActivity;
@@ -14,22 +16,27 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
+import android.widget.TextView;
+
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.ItemviewActivity;
import de.danoeh.antennapod.adapter.ActionButtonCallback;
-import de.danoeh.antennapod.adapter.DefaultFeedItemlistAdapter;
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.feed.EventDistributor;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedItem;
-import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.service.download.DownloadService;
+import de.danoeh.antennapod.storage.DBReader;
import de.danoeh.antennapod.storage.DownloadRequestException;
import de.danoeh.antennapod.storage.DownloadRequester;
+import de.danoeh.antennapod.util.QueueAccess;
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
+import java.util.Iterator;
+import java.util.List;
+
/** Displays a list of FeedItems. */
@SuppressLint("ValidFragment")
public class ItemlistFragment extends ListFragment {
@@ -43,12 +50,10 @@ public class ItemlistFragment extends ListFragment {
public static final String EXTRA_SELECTED_FEEDITEM = "extra.de.danoeh.antennapod.activity.selected_feeditem";
public static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id";
protected InternalFeedItemlistAdapter fila;
- protected FeedManager manager = FeedManager.getInstance();
protected DownloadRequester requester = DownloadRequester.getInstance();
- private DefaultFeedItemlistAdapter.ItemAccess itemAccess;
-
private Feed feed;
+ protected List<Long> queue;
protected FeedItem selectedItem = null;
protected boolean contextMenuClosed = true;
@@ -56,10 +61,8 @@ public class ItemlistFragment extends ListFragment {
/** Argument for FeeditemlistAdapter */
protected boolean showFeedtitle;
- public ItemlistFragment(DefaultFeedItemlistAdapter.ItemAccess itemAccess,
- boolean showFeedtitle) {
+ public ItemlistFragment(boolean showFeedtitle) {
super();
- this.itemAccess = itemAccess;
this.showFeedtitle = showFeedtitle;
}
@@ -83,6 +86,30 @@ public class ItemlistFragment extends ListFragment {
return i;
}
+ private InternalFeedItemlistAdapter.ItemAccess itemAccessRef;
+ protected InternalFeedItemlistAdapter.ItemAccess itemAccess() {
+ if (itemAccessRef == null) {
+ itemAccessRef = new InternalFeedItemlistAdapter.ItemAccess() {
+
+ @Override
+ public FeedItem getItem(int position) {
+ return (feed != null) ? feed.getItemAtIndex(true, position) : null;
+ }
+
+ @Override
+ public int getCount() {
+ return (feed != null) ? feed.getNumOfItems(true) : 0;
+ }
+
+ @Override
+ public boolean isInQueue(FeedItem item) {
+ return (queue != null) && queue.contains(item.getId());
+ }
+ };
+ }
+ return itemAccessRef;
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -92,27 +119,71 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (itemAccess == null) {
- long feedId = getArguments().getLong(ARGUMENT_FEED_ID);
- final Feed feed = FeedManager.getInstance().getFeed(feedId);
- this.feed = feed;
- itemAccess = new DefaultFeedItemlistAdapter.ItemAccess() {
-
- @Override
- public FeedItem getItem(int position) {
- return feed.getItemAtIndex(true, position);
- }
-
- @Override
- public int getCount() {
- return feed.getNumOfItems(true);
- }
- };
- }
+ loadData();
}
+ protected void loadData() {
+ final long feedId;
+ if (feed == null) {
+ feedId = getArguments().getLong(ARGUMENT_FEED_ID);
+ } else {
+ feedId = feed.getId();
+ }
+ AsyncTask<Long, Void, Feed> loadTask = new AsyncTask<Long, Void, Feed>(){
+ private volatile List<Long> queueRef;
+
+ @Override
+ protected Feed doInBackground(Long... longs) {
+ Context context = ItemlistFragment.this.getActivity();
+ if (context != null) {
+ Feed result = DBReader.getFeed(context, longs[0]);
+ if (result != null) {
+ result.setItems(DBReader.getFeedItemList(context, result));
+ queueRef = DBReader.getQueueIDList(context);
+ return result;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Feed result) {
+ super.onPostExecute(result);
+ if (result != null && result.getItems() != null) {
+ feed = result;
+ if (queueRef != null) {
+ queue = queueRef;
+ } else {
+ Log.e(TAG, "Could not load queue");
+ }
+ if (result.getItems().isEmpty()) {
+ }
+ setEmptyViewIfListIsEmpty();
+ if (fila != null) {
+ fila.notifyDataSetChanged();
+ }
+ } else {
+ if (result == null) {
+ Log.e(TAG, "Could not load feed with id " + feedId);
+ } else if (result.getItems() == null) {
+ Log.e(TAG, "Could not load feed items");
+ }
+ }
+ }
+ };
+ loadTask.execute(feedId);
+ }
+
+ private void setEmptyViewIfListIsEmpty() {
+ if (getListView() != null && feed != null && feed.getItems() != null) {
+ if (feed.getItems().isEmpty()) {
+ ((TextView) getActivity().findViewById(android.R.id.empty)).setText(R.string.no_items_label);
+ }
+ }
+ }
+
protected InternalFeedItemlistAdapter createListAdapter() {
- return new InternalFeedItemlistAdapter(getActivity(), itemAccess,
+ return new InternalFeedItemlistAdapter(getActivity(), itemAccess(),
adapterCallback, showFeedtitle);
}
@@ -162,7 +233,9 @@ public class ItemlistFragment extends ListFragment {
if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) {
updateProgressBarVisibility();
} else {
- fila.notifyDataSetChanged();
+ if (feed != null) {
+ loadData();
+ }
updateProgressBarVisibility();
}
}
@@ -218,13 +291,13 @@ public class ItemlistFragment extends ListFragment {
menu.setHeaderTitle(selectedItem.getTitle());
FeedItemMenuHandler.onPrepareMenu(
- new FeedItemMenuHandler.MenuInterface() {
+ new FeedItemMenuHandler.MenuInterface() {
- @Override
- public void setItemVisibility(int id, boolean visible) {
- menu.findItem(id).setVisible(visible);
- }
- }, selectedItem, false);
+ @Override
+ public void setItemVisibility(int id, boolean visible) {
+ menu.findItem(id).setVisible(visible);
+ }
+ }, selectedItem, false, QueueAccess.IDListAccess(queue));
}
}