summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/fragment/EpisodesFragment.java')
-rw-r--r--src/de/danoeh/antennapod/fragment/EpisodesFragment.java101
1 files changed, 87 insertions, 14 deletions
diff --git a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
index 97c528bcf..a99056c9a 100644
--- a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
+++ b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
@@ -1,6 +1,8 @@
package de.danoeh.antennapod.fragment;
+import android.content.Context;
import android.content.Intent;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
@@ -18,10 +20,15 @@ import de.danoeh.antennapod.adapter.ExternalEpisodesListAdapter;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.feed.EventDistributor;
import de.danoeh.antennapod.feed.FeedItem;
-import de.danoeh.antennapod.feed.FeedManager;
+import de.danoeh.antennapod.storage.DBReader;
+import de.danoeh.antennapod.storage.DBTasks;
+import de.danoeh.antennapod.storage.DBWriter;
import de.danoeh.antennapod.storage.DownloadRequestException;
+import de.danoeh.antennapod.util.QueueAccess;
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
+import java.util.List;
+
public class EpisodesFragment extends Fragment {
private static final String TAG = "EpisodesFragment";
@@ -34,6 +41,9 @@ public class EpisodesFragment extends Fragment {
private ExpandableListView listView;
private ExternalEpisodesListAdapter adapter;
+ private List<FeedItem> queue;
+ private List<FeedItem> unreadItems;
+
protected FeedItem selectedItem = null;
protected long selectedGroupId = -1;
protected boolean contextMenuClosed = true;
@@ -86,7 +96,7 @@ public class EpisodesFragment extends Fragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
adapter = new ExternalEpisodesListAdapter(getActivity(),
- adapterCallback, groupActionCallback);
+ adapterCallback, groupActionCallback, itemAccess);
listView.setAdapter(adapter);
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_QUEUE);
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_UNREAD);
@@ -111,9 +121,73 @@ public class EpisodesFragment extends Fragment {
return true;
}
});
+ loadData();
registerForContextMenu(listView);
+
}
+ ExternalEpisodesListAdapter.ItemAccess itemAccess = new ExternalEpisodesListAdapter.ItemAccess() {
+
+ @Override
+ public int getQueueSize() {
+ return (queue != null) ? queue.size() : 0;
+ }
+
+ @Override
+ public int getUnreadItemsSize() {
+ return (unreadItems != null) ? unreadItems.size() : 0;
+ }
+
+ @Override
+ public FeedItem getQueueItemAt(int position) {
+ return (queue != null) ? queue.get(position) : null;
+ }
+
+ @Override
+ public FeedItem getUnreadItemAt(int position) {
+ return (unreadItems != null) ? unreadItems.get(position) : null;
+ }
+ };
+
+ private void loadData() {
+ AsyncTask<Void, Void, Void> loadTask = new AsyncTask<Void, Void, Void>() {
+ private volatile List<FeedItem> queueRef;
+ private volatile List<FeedItem> unreadItemsRef;
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ if (AppConfig.DEBUG) Log.d(TAG, "Starting to load list data");
+ Context context = EpisodesFragment.this.getActivity();
+ if (context != null) {
+ queueRef = DBReader.getQueue(context);
+ unreadItemsRef = DBReader.getUnreadItemsList(context);
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ if (queueRef != null && unreadItemsRef != null) {
+ if (AppConfig.DEBUG) Log.d(TAG, "Done loading list data");
+ queue = queueRef;
+ unreadItems = unreadItemsRef;
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+ } else {
+ if (queueRef == null) {
+ Log.e(TAG, "Could not load queue");
+ }
+ if (unreadItemsRef == null) {
+ Log.e(TAG, "Could not load unread items");
+ }
+ }
+ }
+ };
+ loadTask.execute();
+ }
+
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
@@ -121,7 +195,7 @@ public class EpisodesFragment extends Fragment {
if ((EVENTS & arg) != 0) {
if (AppConfig.DEBUG)
Log.d(TAG, "Received contentUpdate Intent.");
- adapter.notifyDataSetChanged();
+ loadData();
}
}
};
@@ -140,13 +214,13 @@ public class EpisodesFragment extends Fragment {
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.ItemListAccess(queue));
} else if (selectedGroupId == ExternalEpisodesListAdapter.GROUP_POS_QUEUE) {
menu.add(Menu.NONE, R.id.organize_queue_item, Menu.NONE,
@@ -166,7 +240,6 @@ public class EpisodesFragment extends Fragment {
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean handled = false;
- FeedManager manager = FeedManager.getInstance();
if (selectedItem != null) {
try {
handled = FeedItemMenuHandler.onMenuItemClicked(
@@ -185,10 +258,10 @@ public class EpisodesFragment extends Fragment {
OrganizeQueueActivity.class));
break;
case R.id.clear_queue_item:
- manager.clearQueue(getActivity());
+ DBWriter.clearQueue(getActivity());
break;
case R.id.download_all_item:
- manager.downloadAllItemsInQueue(getActivity());
+ DBTasks.downloadAllItemsInQueue(getActivity());
break;
default:
handled = false;
@@ -197,10 +270,10 @@ public class EpisodesFragment extends Fragment {
handled = true;
switch (item.getItemId()) {
case R.id.mark_all_read_item:
- manager.markAllItemsRead(getActivity());
+ DBWriter.markAllItemsRead(getActivity());
break;
case R.id.enqueue_all_item:
- manager.enqueueAllNewItems(getActivity());
+ DBTasks.enqueueAllNewItems(getActivity());
break;
default:
handled = false;