diff options
Diffstat (limited to 'src/de/danoeh/antennapod/fragment')
7 files changed, 193 insertions, 196 deletions
diff --git a/src/de/danoeh/antennapod/fragment/CoverFragment.java b/src/de/danoeh/antennapod/fragment/CoverFragment.java index f1fde24d8..c477ea2b8 100644 --- a/src/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/src/de/danoeh/antennapod/fragment/CoverFragment.java @@ -12,31 +12,26 @@ import com.actionbarsherlock.app.SherlockFragment; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.AudioplayerActivity.AudioplayerContentFragment; -import de.danoeh.antennapod.asynctask.FeedImageLoader; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedManager; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.asynctask.ImageLoader; +import de.danoeh.antennapod.util.playback.Playable; /** Displays the cover and the title of a FeedItem. */ public class CoverFragment extends SherlockFragment implements AudioplayerContentFragment { private static final String TAG = "CoverFragment"; - private static final String ARG_FEED_ID = "arg.feedId"; - private static final String ARG_FEEDITEM_ID = "arg.feedItem"; + private static final String ARG_PLAYABLE = "arg.playable"; - private FeedMedia media; + private Playable media; private ImageView imgvCover; private boolean viewCreated = false; - public static CoverFragment newInstance(FeedItem item) { + public static CoverFragment newInstance(Playable item) { CoverFragment f = new CoverFragment(); if (item != null) { Bundle args = new Bundle(); - args.putLong(ARG_FEED_ID, item.getFeed().getId()); - args.putLong(ARG_FEEDITEM_ID, item.getId()); + args.putParcelable(ARG_PLAYABLE, item); f.setArguments(args); } return f; @@ -46,21 +41,11 @@ public class CoverFragment extends SherlockFragment implements public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); - FeedManager manager = FeedManager.getInstance(); - FeedItem item = null; Bundle args = getArguments(); if (args != null) { - long feedId = args.getLong(ARG_FEED_ID, -1); - long itemId = args.getLong(ARG_FEEDITEM_ID, -1); - if (feedId != -1 && itemId != -1) { - Feed feed = manager.getFeed(feedId); - item = manager.getFeedItem(itemId, feed); - if (item != null) { - media = item.getMedia(); - } - } else { - Log.e(TAG, TAG + " was called with invalid arguments"); - } + media = args.getParcelable(ARG_PLAYABLE); + } else { + Log.e(TAG, TAG + " was called with invalid arguments"); } } @@ -79,8 +64,8 @@ public class CoverFragment extends SherlockFragment implements @Override public void run() { - FeedImageLoader.getInstance().loadCoverBitmap( - media.getItem().getFeed().getImage(), imgvCover); + ImageLoader.getInstance().loadCoverBitmap( + media.getImageFileUrl(), imgvCover); } }); } else { @@ -103,7 +88,7 @@ public class CoverFragment extends SherlockFragment implements } @Override - public void onDataSetChanged(FeedMedia media) { + public void onDataSetChanged(Playable media) { this.media = media; if (viewCreated) { loadMediaInfo(); diff --git a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java index 843cf5af0..ac1fc402e 100644 --- a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java +++ b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java @@ -1,9 +1,6 @@ package de.danoeh.antennapod.fragment; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; @@ -25,16 +22,21 @@ import de.danoeh.antennapod.activity.OrganizeQueueActivity; import de.danoeh.antennapod.adapter.ActionButtonCallback; 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.service.download.DownloadService; import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; public class EpisodesFragment extends SherlockFragment { private static final String TAG = "EpisodesFragment"; + private static final int EVENTS = EventDistributor.QUEUE_UPDATE + | EventDistributor.UNREAD_ITEMS_UPDATE + | EventDistributor.FEED_LIST_UPDATE + | EventDistributor.DOWNLOAD_HANDLED + | EventDistributor.DOWNLOAD_QUEUED; + private ExpandableListView listView; private ExternalEpisodesListAdapter adapter; @@ -45,24 +47,14 @@ public class EpisodesFragment extends SherlockFragment { @Override public void onDestroy() { super.onDestroy(); - try { - getActivity().unregisterReceiver(contentUpdate); - } catch (IllegalArgumentException e) { - - } + EventDistributor.getInstance().unregister(contentUpdate); } @Override public void onResume() { super.onResume(); - IntentFilter filter = new IntentFilter(); - filter.addAction(DownloadRequester.ACTION_DOWNLOAD_QUEUED); - filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED); - filter.addAction(FeedManager.ACTION_QUEUE_UPDATE); - filter.addAction(FeedManager.ACTION_UNREAD_ITEMS_UPDATE); - filter.addAction(FeedManager.ACTION_FEED_LIST_UPDATE); - - getActivity().registerReceiver(contentUpdate, filter); + + EventDistributor.getInstance().register(contentUpdate); if (adapter != null) { adapter.notifyDataSetChanged(); } @@ -99,10 +91,8 @@ public class EpisodesFragment extends SherlockFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - FeedManager manager = FeedManager.getInstance(); adapter = new ExternalEpisodesListAdapter(getActivity(), - manager.getUnreadItems(), manager.getQueue(), adapterCallback, - groupActionCallback); + adapterCallback, groupActionCallback); listView.setAdapter(adapter); listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_QUEUE); listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_UNREAD); @@ -130,12 +120,15 @@ public class EpisodesFragment extends SherlockFragment { registerForContextMenu(listView); } - private BroadcastReceiver contentUpdate = new BroadcastReceiver() { + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { + @Override - public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); - adapter.notifyDataSetChanged(); + public void update(EventDistributor eventDistributor, Integer arg) { + if ((EVENTS & arg) != 0) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + adapter.notifyDataSetChanged(); + } } }; diff --git a/src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index d79b7de10..94aa2b0fc 100644 --- a/src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -14,11 +14,11 @@ import com.actionbarsherlock.app.SherlockFragment; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.FeedImageLoader; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.asynctask.ImageLoader; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.PlaybackController; +import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.util.playback.PlaybackController; /** * Fragment which is supposed to be displayed outside of the MediaplayerActivity @@ -193,11 +193,11 @@ public class ExternalPlayerFragment extends SherlockFragment { if (AppConfig.DEBUG) Log.d(TAG, "Loading media info"); if (controller.serviceAvailable()) { - FeedMedia media = controller.getMedia(); + Playable media = controller.getMedia(); if (media != null) { - txtvTitle.setText(media.getItem().getTitle()); - FeedImageLoader.getInstance().loadThumbnailBitmap( - media.getItem().getFeed().getImage(), + txtvTitle.setText(media.getEpisodeTitle()); + ImageLoader.getInstance().loadThumbnailBitmap( + media.getImageFileUrl(), imgvCover, (int) getActivity().getResources().getDimension( R.dimen.external_player_height)); diff --git a/src/de/danoeh/antennapod/fragment/FeedlistFragment.java b/src/de/danoeh/antennapod/fragment/FeedlistFragment.java index caf6c6a7f..c3034c2af 100644 --- a/src/de/danoeh/antennapod/fragment/FeedlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/FeedlistFragment.java @@ -2,11 +2,8 @@ package de.danoeh.antennapod.fragment; import android.annotation.SuppressLint; import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -18,7 +15,6 @@ import android.widget.ListView; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; -import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; @@ -30,22 +26,26 @@ import de.danoeh.antennapod.adapter.FeedlistAdapter; import de.danoeh.antennapod.asynctask.FeedRemover; import de.danoeh.antennapod.dialog.ConfirmationDialog; import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator; +import de.danoeh.antennapod.feed.EventDistributor; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedManager; -import de.danoeh.antennapod.service.download.DownloadService; import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler; public class FeedlistFragment extends SherlockFragment implements ActionMode.Callback, AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { private static final String TAG = "FeedlistFragment"; + + private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED + | EventDistributor.DOWNLOAD_QUEUED + | EventDistributor.FEED_LIST_UPDATE + | EventDistributor.UNREAD_ITEMS_UPDATE; + public static final String EXTRA_SELECTED_FEED = "extra.de.danoeh.antennapod.activity.selected_feed"; private FeedManager manager; private FeedlistAdapter fla; - private SherlockFragmentActivity pActivity; private Feed selectedFeed; private ActionMode mActionMode; @@ -57,13 +57,11 @@ public class FeedlistFragment extends SherlockFragment implements @Override public void onAttach(Activity activity) { super.onAttach(activity); - pActivity = (SherlockFragmentActivity) activity; } @Override public void onDetach() { super.onDetach(); - pActivity = null; } @Override @@ -72,7 +70,7 @@ public class FeedlistFragment extends SherlockFragment implements if (AppConfig.DEBUG) Log.d(TAG, "Creating"); manager = FeedManager.getInstance(); - fla = new FeedlistAdapter(pActivity, 0, manager.getFeeds()); + fla = new FeedlistAdapter(getActivity()); } @@ -113,36 +111,28 @@ public class FeedlistFragment extends SherlockFragment implements super.onResume(); if (AppConfig.DEBUG) Log.d(TAG, "Resuming"); - IntentFilter filter = new IntentFilter(); - filter.addAction(DownloadRequester.ACTION_DOWNLOAD_QUEUED); - filter.addAction(FeedManager.ACTION_UNREAD_ITEMS_UPDATE); - filter.addAction(FeedManager.ACTION_FEED_LIST_UPDATE); - filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED); - pActivity.registerReceiver(contentUpdate, filter); + EventDistributor.getInstance().register(contentUpdate); fla.notifyDataSetChanged(); } @Override public void onPause() { super.onPause(); - pActivity.unregisterReceiver(contentUpdate); + EventDistributor.getInstance().unregister(contentUpdate); if (mActionMode != null) { mActionMode.finish(); } } - private BroadcastReceiver contentUpdate = new BroadcastReceiver() { + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { + @Override - public void onReceive(Context context, final Intent intent) { - if (AppConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); - getActivity().runOnUiThread(new Runnable() { - - @Override - public void run() { - fla.notifyDataSetChanged(); - } - }); + public void update(EventDistributor eventDistributor, Integer arg) { + if ((EVENTS & arg) != 0) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + fla.notifyDataSetChanged(); + } } }; @@ -211,10 +201,10 @@ public class FeedlistFragment extends SherlockFragment implements public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { Feed selection = fla.getItem(position); - Intent showFeed = new Intent(pActivity, FeedItemlistActivity.class); + Intent showFeed = new Intent(getActivity(), FeedItemlistActivity.class); showFeed.putExtra(EXTRA_SELECTED_FEED, selection.getId()); - pActivity.startActivity(showFeed); + getActivity().startActivity(showFeed); } @Override diff --git a/src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java index 8f5350c8e..02b74a4e5 100644 --- a/src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java +++ b/src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java @@ -23,8 +23,6 @@ import android.view.View; import android.view.ViewGroup; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebView; -import android.widget.FrameLayout; -import android.widget.LinearLayout; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragment; @@ -32,34 +30,46 @@ import com.actionbarsherlock.app.SherlockFragment; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; +import de.danoeh.antennapod.preferences.UserPreferences; import de.danoeh.antennapod.util.ShareUtils; +import de.danoeh.antennapod.util.playback.Playable; -/** Displays the description of a FeedItem in a Webview. */ +/** Displays the description of a Playable object in a Webview. */ public class ItemDescriptionFragment extends SherlockFragment { private static final String TAG = "ItemDescriptionFragment"; + private static final String ARG_PLAYABLE = "arg.playable"; + private static final String ARG_FEED_ID = "arg.feedId"; - private static final String ARG_FEEDITEM_ID = "arg.feedItemId"; + private static final String ARG_FEED_ITEM_ID = "arg.feeditemId"; private WebView webvDescription; + private Playable media; + private FeedItem item; private AsyncTask<Void, Void, Void> webViewLoader; - private String descriptionRef; - private String contentEncodedRef; + private String shownotes; /** URL that was selected via long-press. */ private String selectedURL; + public static ItemDescriptionFragment newInstance(Playable media) { + ItemDescriptionFragment f = new ItemDescriptionFragment(); + Bundle args = new Bundle(); + args.putParcelable(ARG_PLAYABLE, media); + f.setArguments(args); + return f; + } + public static ItemDescriptionFragment newInstance(FeedItem item) { ItemDescriptionFragment f = new ItemDescriptionFragment(); Bundle args = new Bundle(); args.putLong(ARG_FEED_ID, item.getFeed().getId()); - args.putLong(ARG_FEEDITEM_ID, item.getId()); + args.putLong(ARG_FEED_ITEM_ID, item.getId()); f.setArguments(args); return f; } @@ -72,12 +82,13 @@ public class ItemDescriptionFragment extends SherlockFragment { Log.d(TAG, "Creating view"); webvDescription = new WebView(getActivity()); - if (PodcastApp.getThemeResourceId() == R.style.Theme_AntennaPod_Dark) { + if (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) { if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } - webvDescription.setBackgroundColor(getResources().getColor(R.color.black)); + webvDescription.setBackgroundColor(getResources().getColor( + R.color.black)); } webvDescription.getSettings().setUseWideViewPort(false); webvDescription.getSettings().setLayoutAlgorithm( @@ -126,50 +137,59 @@ public class ItemDescriptionFragment extends SherlockFragment { super.onCreate(savedInstanceState); if (AppConfig.DEBUG) Log.d(TAG, "Creating fragment"); - FeedManager manager = FeedManager.getInstance(); Bundle args = getArguments(); - long feedId = args.getLong(ARG_FEED_ID, -1); - long itemId = args.getLong(ARG_FEEDITEM_ID, -1); - if (feedId != -1 && itemId != -1) { - Feed feed = manager.getFeed(feedId); - item = manager.getFeedItem(itemId, feed); - - } else { - Log.e(TAG, TAG + " was called with invalid arguments"); + if (args.containsKey(ARG_PLAYABLE)) { + media = args.getParcelable(ARG_PLAYABLE); + } else if (args.containsKey(ARG_FEED_ID) + && args.containsKey(ARG_FEED_ITEM_ID)) { + long feedId = args.getLong(ARG_FEED_ID); + long itemId = args.getLong(ARG_FEED_ITEM_ID); + FeedItem f = FeedManager.getInstance().getFeedItem(itemId, feedId); + if (f != null) { + item = f; + } } } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - if (item != null) { + if (media != null) { + media.loadShownotes(new Playable.ShownoteLoaderCallback() { + + @Override + public void onShownotesLoaded(String shownotes) { + ItemDescriptionFragment.this.shownotes = shownotes; + if (ItemDescriptionFragment.this.shownotes != null) { + startLoader(); + } + } + }); + } else if (item != null) { if (item.getDescription() == null || item.getContentEncoded() == null) { - Log.i(TAG, "Loading data"); FeedManager.getInstance().loadExtraInformationOfItem( - getActivity(), item, + PodcastApp.getInstance(), item, new FeedManager.TaskCallback<String[]>() { @Override public void onCompletion(String[] result) { - if (result == null || result.length != 2) { - Log.e(TAG, "No description found"); + if (result[1] != null) { + shownotes = result[1]; } else { - descriptionRef = result[0]; - contentEncodedRef = result[1]; + shownotes = result[0]; + } + if (shownotes != null) { + startLoader(); } - startLoader(); } }); } else { - contentEncodedRef = item.getContentEncoded(); - descriptionRef = item.getDescription(); - if (AppConfig.DEBUG) - Log.d(TAG, "Using cached data"); + shownotes = item.getContentEncoded(); startLoader(); } } else { - Log.e(TAG, "Error in onViewCreated: Item was null"); + Log.e(TAG, "Error in onViewCreated: Item and media were null"); } } @@ -197,8 +217,11 @@ public class ItemDescriptionFragment extends SherlockFragment { * */ private String applyWebviewStyle(String textColor, String data) { final String WEBVIEW_STYLE = "<html><head><style type=\"text/css\"> * { color: %s; font-family: Helvetica; line-height: 1.5em; font-size: 11pt; } a { font-style: normal; text-decoration: none; font-weight: normal; color: #00A8DF; } img { display: block; margin: 10 auto; max-width: %s; height: auto; } body { margin: %dpx %dpx %dpx %dpx; }</style></head><body>%s</body></html>"; - final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()); - return String.format(WEBVIEW_STYLE, textColor, "100%", pageMargin, pageMargin, pageMargin, pageMargin, data); + final int pageMargin = (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, 8, getResources() + .getDisplayMetrics()); + return String.format(WEBVIEW_STYLE, textColor, "100%", pageMargin, + pageMargin, pageMargin, pageMargin, data); } private View.OnLongClickListener webViewLongClickListener = new View.OnLongClickListener() { @@ -247,7 +270,8 @@ public class ItemDescriptionFragment extends SherlockFragment { .getSystemService(Context.CLIPBOARD_SERVICE); cm.setText(selectedURL); } - Toast t = Toast.makeText(getActivity(), R.string.copied_url_msg, Toast.LENGTH_SHORT); + Toast t = Toast.makeText(getActivity(), + R.string.copied_url_msg, Toast.LENGTH_SHORT); t.show(); break; default: @@ -319,11 +343,7 @@ public class ItemDescriptionFragment extends SherlockFragment { if (AppConfig.DEBUG) Log.d(TAG, "Loading Webview"); data = ""; - if (contentEncodedRef == null && descriptionRef != null) { - data = descriptionRef; - } else { - data = StringEscapeUtils.unescapeHtml4(contentEncodedRef); - } + data = StringEscapeUtils.unescapeHtml4(shownotes); Activity activity = getActivity(); if (activity != null) { TypedArray res = getActivity() diff --git a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java index cdccdc338..9e9389838 100644 --- a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -1,11 +1,7 @@ package de.danoeh.antennapod.fragment; -import java.util.List; - -import android.content.BroadcastReceiver; -import android.content.Context; +import android.annotation.SuppressLint; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; @@ -25,6 +21,7 @@ import de.danoeh.antennapod.adapter.AbstractFeedItemlistAdapter; import de.danoeh.antennapod.adapter.ActionButtonCallback; import de.danoeh.antennapod.adapter.FeedItemlistAdapter; 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; @@ -34,22 +31,24 @@ import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; /** Displays a list of FeedItems. */ +@SuppressLint("ValidFragment") public class ItemlistFragment extends SherlockListFragment { - private static final String TAG = "ItemlistFragment"; + + private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED + | EventDistributor.DOWNLOAD_QUEUED + | EventDistributor.QUEUE_UPDATE + | EventDistributor.UNREAD_ITEMS_UPDATE; + 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 AbstractFeedItemlistAdapter fila; - protected FeedManager manager; - protected DownloadRequester requester; + protected FeedManager manager = FeedManager.getInstance(); + protected DownloadRequester requester = DownloadRequester.getInstance(); - /** The feed which the activity displays */ - protected List<FeedItem> items; - /** - * This is only not null if the fragment displays the items of a specific - * feed - */ - protected Feed feed; + private AbstractFeedItemlistAdapter.ItemAccess itemAccess; + + private Feed feed; protected FeedItem selectedItem = null; protected boolean contextMenuClosed = true; @@ -57,12 +56,11 @@ public class ItemlistFragment extends SherlockListFragment { /** Argument for FeeditemlistAdapter */ protected boolean showFeedtitle; - public ItemlistFragment(List<FeedItem> items, boolean showFeedtitle) { + public ItemlistFragment(AbstractFeedItemlistAdapter.ItemAccess itemAccess, + boolean showFeedtitle) { super(); - this.items = items; + this.itemAccess = itemAccess; this.showFeedtitle = showFeedtitle; - manager = FeedManager.getInstance(); - requester = DownloadRequester.getInstance(); } public ItemlistFragment() { @@ -94,15 +92,27 @@ public class ItemlistFragment extends SherlockListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (items == null) { + if (itemAccess == null) { long feedId = getArguments().getLong(ARGUMENT_FEED_ID); - feed = FeedManager.getInstance().getFeed(feedId); - items = feed.getItems(); + final Feed feed = FeedManager.getInstance().getFeed(feedId); + this.feed = feed; + itemAccess = new AbstractFeedItemlistAdapter.ItemAccess() { + + @Override + public FeedItem getItem(int position) { + return feed.getItemAtIndex(true, position); + } + + @Override + public int getCount() { + return feed.getNumOfItems(true); + } + }; } } protected AbstractFeedItemlistAdapter createListAdapter() { - return new FeedItemlistAdapter(getActivity(), 0, items, + return new FeedItemlistAdapter(getActivity(), itemAccess, adapterCallback, showFeedtitle); } @@ -114,12 +124,7 @@ public class ItemlistFragment extends SherlockListFragment { @Override public void onDestroy() { super.onDestroy(); - try { - getActivity().unregisterReceiver(contentUpdate); - } catch (IllegalArgumentException e) { - Log.w(TAG, - "IllegalArgumentException when trying to unregister contentUpdate receiver."); - } + EventDistributor.getInstance().unregister(contentUpdate); } @Override @@ -133,13 +138,7 @@ public class ItemlistFragment extends SherlockListFragment { } }); updateProgressBarVisibility(); - IntentFilter filter = new IntentFilter(); - filter.addAction(DownloadRequester.ACTION_DOWNLOAD_QUEUED); - filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED); - filter.addAction(FeedManager.ACTION_QUEUE_UPDATE); - filter.addAction(FeedManager.ACTION_UNREAD_ITEMS_UPDATE); - - getActivity().registerReceiver(contentUpdate, filter); + EventDistributor.getInstance().register(contentUpdate); } @Override @@ -153,17 +152,19 @@ public class ItemlistFragment extends SherlockListFragment { startActivity(showItem); } - private BroadcastReceiver contentUpdate = new BroadcastReceiver() { + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { + @Override - public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); - if (intent.getAction().equals( - DownloadRequester.ACTION_DOWNLOAD_QUEUED)) { - updateProgressBarVisibility(); - } else { - fila.notifyDataSetChanged(); - updateProgressBarVisibility(); + public void update(EventDistributor eventDistributor, Integer arg) { + if ((EVENTS & arg) != 0) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) { + updateProgressBarVisibility(); + } else { + fila.notifyDataSetChanged(); + updateProgressBarVisibility(); + } } } }; @@ -178,7 +179,7 @@ public class ItemlistFragment extends SherlockListFragment { getSherlockActivity() .setSupportProgressBarIndeterminateVisibility(false); } - getSherlockActivity().invalidateOptionsMenu(); + getSherlockActivity().supportInvalidateOptionsMenu(); } } diff --git a/src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index a2826c977..5c4750acd 100644 --- a/src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -1,47 +1,55 @@ package de.danoeh.antennapod.fragment; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.adapter.AbstractFeedItemlistAdapter; +import de.danoeh.antennapod.feed.EventDistributor; +import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; public class PlaybackHistoryFragment extends ItemlistFragment { private static final String TAG = "PlaybackHistoryFragment"; public PlaybackHistoryFragment() { - super(FeedManager.getInstance().getPlaybackHistory(), true); + super(new AbstractFeedItemlistAdapter.ItemAccess() { + + @Override + public FeedItem getItem(int position) { + return FeedManager.getInstance().getPlaybackHistoryItemIndex( + position); + } + + @Override + public int getCount() { + return FeedManager.getInstance().getPlaybackHistorySize(); + } + }, true); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getActivity().registerReceiver(historyUpdate, - new IntentFilter(FeedManager.ACTION_PLAYBACK_HISTORY_UPDATE)); + EventDistributor.getInstance().register(historyUpdate); } @Override public void onDestroy() { super.onDestroy(); - try { - getActivity().unregisterReceiver(historyUpdate); - } catch (IllegalArgumentException e) { - // ignore - } + EventDistributor.getInstance().unregister(historyUpdate); } - private BroadcastReceiver historyUpdate = new BroadcastReceiver() { - + private EventDistributor.EventListener historyUpdate = new EventDistributor.EventListener() { + @Override - public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) - Log.d(TAG, "Received content update"); - fila.notifyDataSetChanged(); + public void update(EventDistributor eventDistributor, Integer arg) { + if ((EventDistributor.PLAYBACK_HISTORY_UPDATE & arg) != 0) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received content update"); + fila.notifyDataSetChanged(); + } + } - }; } |