diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2013-02-28 15:38:26 +0100 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2013-02-28 15:38:26 +0100 |
commit | 7fe0e05304b5683d3a3cc0ba5a1938f73ffd54de (patch) | |
tree | 0b2097a7380c92251f30b190b29d299937d34af0 /src | |
parent | 84dd063568d44cb77d2882e96dd110486ccdd205 (diff) | |
download | AntennaPod-7fe0e05304b5683d3a3cc0ba5a1938f73ffd54de.zip |
Fixed crash when audio focus was lost
Diffstat (limited to 'src')
4 files changed, 58 insertions, 15 deletions
diff --git a/src/de/danoeh/antennapod/feed/FeedItem.java b/src/de/danoeh/antennapod/feed/FeedItem.java index 2887b62af..bb176c411 100644 --- a/src/de/danoeh/antennapod/feed/FeedItem.java +++ b/src/de/danoeh/antennapod/feed/FeedItem.java @@ -213,7 +213,7 @@ public class FeedItem extends FeedComponent { private boolean isPlaying() { if (media != null) { - if (PlaybackPreferences.getCurrentlyPlayingMedia() == media.getId()) { + if (PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == media.getId()) { return true; } } diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index 16f5937ca..e984da46a 100644 --- a/src/de/danoeh/antennapod/feed/FeedManager.java +++ b/src/de/danoeh/antennapod/feed/FeedManager.java @@ -197,7 +197,7 @@ public class FeedManager { PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE)); SharedPreferences.Editor editor = prefs.edit(); editor.putLong(PlaybackPreferences.PREF_LAST_PLAYED_ID, -1); - editor.putLong(PlaybackPreferences.PREF_LAST_PLAYED_FEED_ID, -1); + editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID, -1); editor.commit(); } diff --git a/src/de/danoeh/antennapod/preferences/PlaybackPreferences.java b/src/de/danoeh/antennapod/preferences/PlaybackPreferences.java index 3187c0622..b93b2e07c 100644 --- a/src/de/danoeh/antennapod/preferences/PlaybackPreferences.java +++ b/src/de/danoeh/antennapod/preferences/PlaybackPreferences.java @@ -20,13 +20,22 @@ public class PlaybackPreferences implements /** Contains the type of the media that was played last. */ public static final String PREF_LAST_PLAYED_ID = "de.danoeh.antennapod.preferences.lastPlayedId"; - /** Contains the feed id of the last played item. */ - public static final String PREF_LAST_PLAYED_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId"; + /** + * Contains the feed id of the currently playing item if it is a FeedMedia + * object. + */ + public static final String PREF_CURRENTLY_PLAYING_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId"; /** - * Type of the media object that is currently being played. This preference is - * set to NO_MEDIA_PLAYING after playback has been completed and is set as - * soon as the 'play' button is pressed. + * Contains the id of the currently playing FeedMedia object or + * NO_MEDIA_PLAYING if the currently playing media is no FeedMedia object. + */ + public static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId"; + + /** + * Type of the media object that is currently being played. This preference + * is set to NO_MEDIA_PLAYING after playback has been completed and is set + * as soon as the 'play' button is pressed. */ public static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia"; @@ -49,7 +58,8 @@ public class PlaybackPreferences implements public static final long NO_MEDIA_PLAYING = -1; private long lastPlayedId; - private long lastPlayedFeedId; + private long currentlyPlayingFeedId; + private long currentlyPlayingFeedMediaId; private long currentlyPlayingMedia; private boolean lastIsStream; private boolean lastIsVideo; @@ -85,7 +95,9 @@ public class PlaybackPreferences implements SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(context); lastPlayedId = sp.getLong(PREF_LAST_PLAYED_ID, -1); - lastPlayedFeedId = sp.getLong(PREF_LAST_PLAYED_FEED_ID, -1); + currentlyPlayingFeedId = sp.getLong(PREF_CURRENTLY_PLAYING_FEED_ID, -1); + currentlyPlayingFeedMediaId = sp.getLong( + PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); currentlyPlayingMedia = sp.getLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); lastIsStream = sp.getBoolean(PREF_LAST_IS_STREAM, true); @@ -108,8 +120,9 @@ public class PlaybackPreferences implements manager.autoDeleteIfPossible(context, media); } } - } else if (key.equals(PREF_LAST_PLAYED_FEED_ID)) { - lastPlayedFeedId = sp.getLong(PREF_LAST_PLAYED_FEED_ID, -1); + } else if (key.equals(PREF_CURRENTLY_PLAYING_FEED_ID)) { + currentlyPlayingFeedId = sp.getLong(PREF_CURRENTLY_PLAYING_FEED_ID, + -1); } else if (key.equals(PREF_CURRENTLY_PLAYING_MEDIA)) { currentlyPlayingMedia = sp @@ -126,6 +139,9 @@ public class PlaybackPreferences implements PREF_AUTODELETE_MEDIA_ID, false); } else if (key.equals(PREF_AUTODELETE_MEDIA_ID)) { autoDeleteMediaId = sp.getLong(PREF_AUTODELETE_MEDIA_ID, -1); + } else if (key.equals(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID)) { + currentlyPlayingFeedMediaId = sp.getLong( + PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); } } @@ -147,7 +163,7 @@ public class PlaybackPreferences implements public static long getLastPlayedFeedId() { instanceAvailable(); - return instance.lastPlayedFeedId; + return instance.currentlyPlayingFeedId; } public static long getCurrentlyPlayingMedia() { @@ -155,6 +171,10 @@ public class PlaybackPreferences implements return instance.currentlyPlayingMedia; } + public static long getCurrentlyPlayingFeedMediaId() { + return instance.currentlyPlayingFeedMediaId; + } + public static boolean isLastIsStream() { instanceAvailable(); return instance.lastIsStream; diff --git a/src/de/danoeh/antennapod/service/PlaybackService.java b/src/de/danoeh/antennapod/service/PlaybackService.java index c0c5db9b0..450f7f65d 100644 --- a/src/de/danoeh/antennapod/service/PlaybackService.java +++ b/src/de/danoeh/antennapod/service/PlaybackService.java @@ -321,7 +321,7 @@ public class PlaybackService extends Service { case AudioManager.AUDIOFOCUS_LOSS: if (AppConfig.DEBUG) Log.d(TAG, "Lost audio focus"); - pause(true, true); + pause(true, false); stopSelf(); break; case AudioManager.AUDIOFOCUS_GAIN: @@ -467,7 +467,8 @@ public class PlaybackService extends Service { setStatus(PlayerStatus.PREPARING); player.prepareAsync(); } else { - player.setDataSource(media.getLocalMediaUrl()); + player.setDataSource(media + .getLocalMediaUrl()); setStatus(PlayerStatus.PREPARING); player.prepareAsync(); } @@ -536,7 +537,8 @@ public class PlaybackService extends Service { if (shouldStream) { player.setDataSource(media.getStreamUrl()); } else if (media.localFileAvailable()) { - player.setDataSource(media.getLocalMediaUrl()); + player.setDataSource(media + .getLocalMediaUrl()); } if (prepareImmediately) { @@ -708,6 +710,11 @@ public class PlaybackService extends Service { editor.putBoolean( PlaybackPreferences.PREF_AUTO_DELETE_MEDIA_PLAYBACK_COMPLETED, true); + editor.putLong( + PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, + PlaybackPreferences.NO_MEDIA_PLAYING); + editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID, + PlaybackPreferences.NO_MEDIA_PLAYING); editor.commit(); // Prepare for playing next item @@ -861,6 +868,22 @@ public class PlaybackService extends Service { playingVideo); editor.putLong(PlaybackPreferences.PREF_LAST_PLAYED_ID, media.getPlayableType()); + if (media instanceof FeedMedia) { + FeedMedia fMedia = (FeedMedia) media; + editor.putLong( + PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID, + fMedia.getItem().getFeed().getId()); + editor.putLong( + PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, + fMedia.getId()); + } else { + editor.putLong( + PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID, + PlaybackPreferences.NO_MEDIA_PLAYING); + editor.putLong( + PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, + PlaybackPreferences.NO_MEDIA_PLAYING); + } media.writeToPreferences(editor); editor.commit(); |