diff options
Diffstat (limited to 'src/de/danoeh/antennapod/fragment/EpisodesFragment.java')
-rw-r--r-- | src/de/danoeh/antennapod/fragment/EpisodesFragment.java | 115 |
1 files changed, 91 insertions, 24 deletions
diff --git a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java index 4039235e0..a99056c9a 100644 --- a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java +++ b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java @@ -1,20 +1,16 @@ 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; -import android.view.ContextMenu; +import android.view.*; import android.view.ContextMenu.ContextMenuInfo; -import android.view.LayoutInflater; -import android.view.MenuInflater; -import android.view.View; -import android.view.ViewGroup; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; -import com.actionbarsherlock.app.SherlockFragment; -import com.actionbarsherlock.view.Menu; - import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.ItemviewActivity; @@ -24,11 +20,16 @@ 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; -public class EpisodesFragment extends SherlockFragment { +import java.util.List; + +public class EpisodesFragment extends Fragment { private static final String TAG = "EpisodesFragment"; private static final int EVENTS = EventDistributor.QUEUE_UPDATE @@ -40,6 +41,9 @@ public class EpisodesFragment extends SherlockFragment { 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; @@ -92,7 +96,7 @@ public class EpisodesFragment extends SherlockFragment { 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); @@ -117,9 +121,73 @@ public class EpisodesFragment extends SherlockFragment { 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 @@ -127,7 +195,7 @@ public class EpisodesFragment extends SherlockFragment { if ((EVENTS & arg) != 0) { if (AppConfig.DEBUG) Log.d(TAG, "Received contentUpdate Intent."); - adapter.notifyDataSetChanged(); + loadData(); } } }; @@ -146,13 +214,13 @@ public class EpisodesFragment extends SherlockFragment { 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, @@ -172,11 +240,10 @@ public class EpisodesFragment extends SherlockFragment { @Override public boolean onContextItemSelected(android.view.MenuItem item) { boolean handled = false; - FeedManager manager = FeedManager.getInstance(); if (selectedItem != null) { try { handled = FeedItemMenuHandler.onMenuItemClicked( - getSherlockActivity(), item.getItemId(), selectedItem); + getActivity(), item.getItemId(), selectedItem); } catch (DownloadRequestException e) { e.printStackTrace(); DownloadRequestErrorDialogCreator.newRequestErrorDialog( @@ -191,10 +258,10 @@ public class EpisodesFragment extends SherlockFragment { 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; @@ -203,10 +270,10 @@ public class EpisodesFragment extends SherlockFragment { 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; |