diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index bfbae8b30..4ec6131fb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,5 +29,6 @@
+
diff --git a/src/de/podfetcher/activity/ItemviewActivity.java b/src/de/podfetcher/activity/ItemviewActivity.java
index 9bd800526..06c12b86a 100644
--- a/src/de/podfetcher/activity/ItemviewActivity.java
+++ b/src/de/podfetcher/activity/ItemviewActivity.java
@@ -17,6 +17,7 @@ import android.widget.TextView;
import android.widget.ImageView;
import de.podfetcher.R;
import de.podfetcher.service.DownloadObserver;
+import de.podfetcher.service.PlaybackService;
import de.podfetcher.storage.DownloadRequester;
import de.podfetcher.fragment.FeedlistFragment;
@@ -52,6 +53,16 @@ public class ItemviewActivity extends SherlockActivity {
getDownloadStatus();
}
});
+
+ butPlay.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent launchIntent = new Intent(v.getContext(), PlaybackService.class);
+ launchIntent.putExtra(PlaybackService.EXTRA_MEDIA_ID, item.getMedia().getId());
+ launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, item.getFeed().getId());
+ v.getContext().startService(launchIntent);
+ }
+ });
}
/** Extracts FeedItem object the activity is supposed to display */
diff --git a/src/de/podfetcher/feed/FeedManager.java b/src/de/podfetcher/feed/FeedManager.java
index 65692a2ea..91e897f65 100644
--- a/src/de/podfetcher/feed/FeedManager.java
+++ b/src/de/podfetcher/feed/FeedManager.java
@@ -17,21 +17,21 @@ import android.util.Log;
* */
public class FeedManager {
private static final String TAG = "FeedManager";
-
+
private static FeedManager singleton;
-
+
private ArrayList feeds;
private ArrayList categories;
private DownloadRequester requester;
-
+
private FeedManager() {
feeds = new ArrayList();
categories = new ArrayList();
requester = DownloadRequester.getInstance();
}
-
+
public static FeedManager getInstance(){
if(singleton == null) {
singleton = new FeedManager();
@@ -53,7 +53,7 @@ public class FeedManager {
setFeedItem(context, item);
}
}
-
+
/** Adds a new Feeditem if its not in the list */
public void addFeedItem(Context context, FeedItem item) {
@@ -129,16 +129,16 @@ public class FeedManager {
PodDBAdapter adapter = new PodDBAdapter(context);
return adapter.setFeedItem(item);
}
-
+
/** Updates information of an existing FeedImage */
public long setFeedImage(Context context, FeedImage image) {
- PodDBAdapter adapter = new PodDBAdapter(context);
- return adapter.setImage(image);
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ return adapter.setImage(image);
}
/** Updates information of an existing FeedMedia object. */
public long setFeedMedia(Context context, FeedMedia media) {
- PodDBAdapter adapter = new PodDBAdapter(context);
+ PodDBAdapter adapter = new PodDBAdapter(context);
return adapter.setMedia(media);
}
@@ -165,28 +165,39 @@ public class FeedManager {
/** Get a Feed Item by its id and its feed*/
public FeedItem getFeedItem(long id, Feed feed) {
- for(FeedItem item : feed.getItems()) {
- if(item.getId() == id) {
- return item;
- }
+ for(FeedItem item : feed.getItems()) {
+ if(item.getId() == id) {
+ return item;
}
- Log.w(TAG, "Couldn't find FeedItem with id " + id);
+ }
+ Log.e(TAG, "Couldn't find FeedItem with id " + id);
return null;
}
-
+
+ /** Get a FeedMedia object by the id of the Media object and the feed object */
+ public FeedMedia getFeedMedia(long id, Feed feed) {
+ for (FeedItem item : feed.getItems()) {
+ if(item.getMedia().getId() == id) {
+ return item.getMedia();
+ }
+ }
+ Log.e(TAG, "Couldn't find FeedMedia with id " + id);
+ return null;
+ }
+
/** Reads the database */
public void loadDBData(Context context) {
PodDBAdapter adapter = new PodDBAdapter(context);
updateArrays(context);
}
-
-
+
+
public void updateArrays(Context context) {
feeds.clear();
categories.clear();
extractFeedlistFromCursor(context);
}
-
+
private void extractFeedlistFromCursor(Context context) {
PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
@@ -194,7 +205,7 @@ public class FeedManager {
if(feedlistCursor.moveToFirst()) {
do {
Feed feed = new Feed();
-
+
feed.id = feedlistCursor.getLong(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_ID));
feed.setTitle(feedlistCursor.getString(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_TITLE)));
feed.setLink(feedlistCursor.getString(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_LINK)));
@@ -202,17 +213,17 @@ public class FeedManager {
feed.setImage(adapter.getFeedImage(feedlistCursor.getLong(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_IMAGE))));
feed.file_url = feedlistCursor.getString(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_FILE_URL));
feed.download_url = feedlistCursor.getString(feedlistCursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOAD_URL));
-
+
// Get FeedItem-Object
Cursor itemlistCursor = adapter.getAllItemsOfFeedCursor(feed);
feed.setItems(extractFeedItemsFromCursor(context, feed, itemlistCursor));
-
+
feeds.add(feed);
}while(feedlistCursor.moveToNext());
}
adapter.close();
}
-
+
private ArrayList extractFeedItemsFromCursor(Context context, Feed feed, Cursor itemlistCursor) {
ArrayList items = new ArrayList();
PodDBAdapter adapter = new PodDBAdapter(context);
@@ -220,7 +231,7 @@ public class FeedManager {
if(itemlistCursor.moveToFirst()) {
do {
FeedItem item = new FeedItem();
-
+
item.id = itemlistCursor.getLong(itemlistCursor.getColumnIndex(PodDBAdapter.KEY_ID));
item.setFeed(feed);
item.setTitle(itemlistCursor.getString(itemlistCursor.getColumnIndex(PodDBAdapter.KEY_TITLE)));
@@ -231,7 +242,7 @@ public class FeedManager {
itemlistCursor.getLong(
itemlistCursor.getColumnIndex(PodDBAdapter.KEY_MEDIA)), item));
item.setRead((itemlistCursor.getInt(itemlistCursor.getColumnIndex(PodDBAdapter.KEY_READ)) > 0) ? true : false);
-
+
items.add(item);
} while(itemlistCursor.moveToNext());
}
@@ -242,8 +253,8 @@ public class FeedManager {
public ArrayList getFeeds() {
return feeds;
}
-
-
-
+
+
+
}
diff --git a/src/de/podfetcher/fragment/FeedlistFragment.java b/src/de/podfetcher/fragment/FeedlistFragment.java
index 10e195014..6afd49dbe 100644
--- a/src/de/podfetcher/fragment/FeedlistFragment.java
+++ b/src/de/podfetcher/fragment/FeedlistFragment.java
@@ -25,7 +25,7 @@ import android.util.Log;
public class FeedlistFragment extends SherlockListFragment {
- private static final String TAG = "FeedlistActivity";
+ private static final String TAG = "FeedlistFragment";
public static final String EXTRA_SELECTED_FEED = "extra.de.podfetcher.activity.selected_feed";
private FeedManager manager;
diff --git a/src/de/podfetcher/service/PlaybackService.java b/src/de/podfetcher/service/PlaybackService.java
new file mode 100644
index 000000000..a4043f6f4
--- /dev/null
+++ b/src/de/podfetcher/service/PlaybackService.java
@@ -0,0 +1,71 @@
+package de.podfetcher.service;
+
+import java.io.File;
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.MediaPlayer;
+import android.util.Log;
+import android.net.Uri;
+import android.os.IBinder;
+
+import de.podfetcher.feed.FeedMedia;
+import de.podfetcher.feed.Feed;
+import de.podfetcher.feed.FeedManager;
+
+/** Controls the MediaPlayer that plays a FeedMedia-file */
+public class PlaybackService extends Service {
+ /** Logging tag */
+ private static final String TAG = "PlaybackService";
+ /** Contains the id of the FeedMedia object. */
+ public static final String EXTRA_MEDIA_ID = "extra.de.podfetcher.service.mediaId";
+ /** Contains the id of the Feed object of the FeedMedia. */
+ public static final String EXTRA_FEED_ID = "extra.de.podfetcher.service.feedId";
+
+ private MediaPlayer player;
+ private FeedMedia media;
+ private Feed feed;
+ private FeedManager manager;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ Log.d(TAG, "Service created.");
+
+ manager = FeedManager.getInstance();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (player != null) {
+ player.stop();
+ }
+ long mediaId = intent.getLongExtra(EXTRA_MEDIA_ID, -1);
+ long feedId = intent.getLongExtra(EXTRA_FEED_ID, -1);
+ if (mediaId == -1 || feedId == -1) {
+ Log.e(TAG, "Media ID or Feed ID wasn't provided to the Service.");
+ } else {
+ feed = manager.getFeed(feedId);
+ media = manager.getFeedMedia(mediaId, feed);
+ player = MediaPlayer.create(this, Uri.fromFile(new File(media.getFile_url())));
+ player.setOnPreparedListener(preparedListener);
+ Log.d(TAG, "Preparing to play file");
+ //player.prepareAsync();
+ }
+ return Service.START_NOT_STICKY;
+ }
+
+ private MediaPlayer.OnPreparedListener preparedListener = new MediaPlayer.OnPreparedListener() {
+ @Override
+ public void onPrepared(MediaPlayer mp) {
+ Log.d(TAG, "Resource prepared");
+ mp.start();
+ }
+ };
+
+}