diff options
Diffstat (limited to 'src/de/danoeh/antennapod/fragment/EpisodesFragment.java')
-rw-r--r-- | src/de/danoeh/antennapod/fragment/EpisodesFragment.java | 101 |
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; |