summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/fragment
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/fragment')
-rw-r--r--src/de/danoeh/antennapod/fragment/CoverFragment.java39
-rw-r--r--src/de/danoeh/antennapod/fragment/EpisodesFragment.java45
-rw-r--r--src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java14
-rw-r--r--src/de/danoeh/antennapod/fragment/FeedlistFragment.java50
-rw-r--r--src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java100
-rw-r--r--src/de/danoeh/antennapod/fragment/ItemlistFragment.java95
-rw-r--r--src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java46
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();
+ }
+
}
-
};
}