Merge pull request #3470 from ByteHamster/playbackservice-save-current-playable
Moved storing PlaybackPreferences to PlaybackPreferences.java
This commit is contained in:
commit
1709877531
|
@ -4,7 +4,12 @@ import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||||
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
|
import de.danoeh.antennapod.core.feed.MediaType;
|
||||||
|
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||||
|
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to preferences set by the playback service. A private
|
* Provides access to preferences set by the playback service. A private
|
||||||
|
@ -19,35 +24,35 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
||||||
* Contains the feed id of the currently playing item if it is a FeedMedia
|
* Contains the feed id of the currently playing item if it is a FeedMedia
|
||||||
* object.
|
* object.
|
||||||
*/
|
*/
|
||||||
public static final String PREF_CURRENTLY_PLAYING_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId";
|
private static final String PREF_CURRENTLY_PLAYING_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains the id of the currently playing FeedMedia object or
|
* Contains the id of the currently playing FeedMedia object or
|
||||||
* NO_MEDIA_PLAYING if the currently playing media is no FeedMedia object.
|
* 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";
|
private 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
|
* 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
|
* is set to NO_MEDIA_PLAYING after playback has been completed and is set
|
||||||
* as soon as the 'play' button is pressed.
|
* as soon as the 'play' button is pressed.
|
||||||
*/
|
*/
|
||||||
public static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia";
|
private static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* True if last played media was streamed.
|
* True if last played media was streamed.
|
||||||
*/
|
*/
|
||||||
public static final String PREF_CURRENT_EPISODE_IS_STREAM = "de.danoeh.antennapod.preferences.lastIsStream";
|
private static final String PREF_CURRENT_EPISODE_IS_STREAM = "de.danoeh.antennapod.preferences.lastIsStream";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* True if last played media was a video.
|
* True if last played media was a video.
|
||||||
*/
|
*/
|
||||||
public static final String PREF_CURRENT_EPISODE_IS_VIDEO = "de.danoeh.antennapod.preferences.lastIsVideo";
|
private static final String PREF_CURRENT_EPISODE_IS_VIDEO = "de.danoeh.antennapod.preferences.lastIsVideo";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current player status as int.
|
* The current player status as int.
|
||||||
*/
|
*/
|
||||||
public static final String PREF_CURRENT_PLAYER_STATUS = "de.danoeh.antennapod.preferences.currentPlayerStatus";
|
private static final String PREF_CURRENT_PLAYER_STATUS = "de.danoeh.antennapod.preferences.currentPlayerStatus";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
|
* Value of PREF_CURRENTLY_PLAYING_MEDIA if no media is playing.
|
||||||
|
@ -87,10 +92,6 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getLastPlayedFeedId() {
|
|
||||||
return prefs.getLong(PREF_CURRENTLY_PLAYING_FEED_ID, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static long getCurrentlyPlayingMedia() {
|
public static long getCurrentlyPlayingMedia() {
|
||||||
return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING);
|
return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING);
|
||||||
}
|
}
|
||||||
|
@ -119,4 +120,52 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
||||||
editor.putInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER);
|
editor.putInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER);
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void writeMediaPlaying(Playable playable, PlayerStatus playerStatus, boolean stream) {
|
||||||
|
Log.d(TAG, "Writing playback preferences");
|
||||||
|
SharedPreferences.Editor editor = prefs.edit();
|
||||||
|
|
||||||
|
if (playable == null) {
|
||||||
|
writeNoMediaPlaying();
|
||||||
|
} else {
|
||||||
|
editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, playable.getPlayableType());
|
||||||
|
editor.putBoolean(PREF_CURRENT_EPISODE_IS_STREAM, stream);
|
||||||
|
editor.putBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, playable.getMediaType() == MediaType.VIDEO);
|
||||||
|
if (playable instanceof FeedMedia) {
|
||||||
|
FeedMedia fMedia = (FeedMedia) playable;
|
||||||
|
editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, fMedia.getItem().getFeed().getId());
|
||||||
|
editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, fMedia.getId());
|
||||||
|
} else {
|
||||||
|
editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING);
|
||||||
|
editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING);
|
||||||
|
}
|
||||||
|
playable.writeToPreferences(editor);
|
||||||
|
}
|
||||||
|
editor.putInt(PREF_CURRENT_PLAYER_STATUS, getCurrentPlayerStatusAsInt(playerStatus));
|
||||||
|
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writePlayerStatus(PlayerStatus playerStatus) {
|
||||||
|
Log.d(TAG, "Writing player status playback preferences");
|
||||||
|
|
||||||
|
SharedPreferences.Editor editor = prefs.edit();
|
||||||
|
editor.putInt(PREF_CURRENT_PLAYER_STATUS, getCurrentPlayerStatusAsInt(playerStatus));
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) {
|
||||||
|
int playerStatusAsInt;
|
||||||
|
switch (playerStatus) {
|
||||||
|
case PLAYING:
|
||||||
|
playerStatusAsInt = PLAYER_STATUS_PLAYING;
|
||||||
|
break;
|
||||||
|
case PAUSED:
|
||||||
|
playerStatusAsInt = PLAYER_STATUS_PAUSED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
playerStatusAsInt = PLAYER_STATUS_OTHER;
|
||||||
|
}
|
||||||
|
return playerStatusAsInt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -721,7 +721,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
updateMediaSession(newInfo.playerStatus);
|
updateMediaSession(newInfo.playerStatus);
|
||||||
switch (newInfo.playerStatus) {
|
switch (newInfo.playerStatus) {
|
||||||
case INITIALIZED:
|
case INITIALIZED:
|
||||||
writePlaybackPreferences();
|
PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable,
|
||||||
|
mediaPlayer.getPSMPInfo().playerStatus, mediaPlayer.isStreaming());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PREPARED:
|
case PREPARED:
|
||||||
|
@ -739,7 +740,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
stateManager.stopForeground(true);
|
stateManager.stopForeground(true);
|
||||||
}
|
}
|
||||||
cancelPositionObserver();
|
cancelPositionObserver();
|
||||||
writePlayerStatusPlaybackPreferences();
|
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STOPPED:
|
case STOPPED:
|
||||||
|
@ -748,7 +749,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYING:
|
case PLAYING:
|
||||||
writePlayerStatusPlaybackPreferences();
|
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
|
||||||
setupNotification(newInfo);
|
setupNotification(newInfo);
|
||||||
setupPositionUpdater();
|
setupPositionUpdater();
|
||||||
stateManager.validStartCommandWasReceived();
|
stateManager.validStartCommandWasReceived();
|
||||||
|
@ -1029,82 +1030,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
EventBus.getDefault().post(new MessageEvent(getString(R.string.sleep_timer_disabled_label)));
|
EventBus.getDefault().post(new MessageEvent(getString(R.string.sleep_timer_disabled_label)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getCurrentPlayerStatusAsInt(PlayerStatus playerStatus) {
|
|
||||||
int playerStatusAsInt;
|
|
||||||
switch (playerStatus) {
|
|
||||||
case PLAYING:
|
|
||||||
playerStatusAsInt = PlaybackPreferences.PLAYER_STATUS_PLAYING;
|
|
||||||
break;
|
|
||||||
case PAUSED:
|
|
||||||
playerStatusAsInt = PlaybackPreferences.PLAYER_STATUS_PAUSED;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
playerStatusAsInt = PlaybackPreferences.PLAYER_STATUS_OTHER;
|
|
||||||
}
|
|
||||||
return playerStatusAsInt;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePlaybackPreferences() {
|
|
||||||
Log.d(TAG, "Writing playback preferences");
|
|
||||||
|
|
||||||
SharedPreferences.Editor editor = PreferenceManager
|
|
||||||
.getDefaultSharedPreferences(getApplicationContext()).edit();
|
|
||||||
PlaybackServiceMediaPlayer.PSMPInfo info = mediaPlayer.getPSMPInfo();
|
|
||||||
MediaType mediaType = mediaPlayer.getCurrentMediaType();
|
|
||||||
boolean stream = mediaPlayer.isStreaming();
|
|
||||||
int playerStatus = getCurrentPlayerStatusAsInt(info.playerStatus);
|
|
||||||
|
|
||||||
if (info.playable != null) {
|
|
||||||
editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_MEDIA,
|
|
||||||
info.playable.getPlayableType());
|
|
||||||
editor.putBoolean(
|
|
||||||
PlaybackPreferences.PREF_CURRENT_EPISODE_IS_STREAM,
|
|
||||||
stream);
|
|
||||||
editor.putBoolean(
|
|
||||||
PlaybackPreferences.PREF_CURRENT_EPISODE_IS_VIDEO,
|
|
||||||
mediaType == MediaType.VIDEO);
|
|
||||||
if (info.playable instanceof FeedMedia) {
|
|
||||||
FeedMedia fMedia = (FeedMedia) info.playable;
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
info.playable.writeToPreferences(editor);
|
|
||||||
} else {
|
|
||||||
editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_MEDIA,
|
|
||||||
PlaybackPreferences.NO_MEDIA_PLAYING);
|
|
||||||
editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID,
|
|
||||||
PlaybackPreferences.NO_MEDIA_PLAYING);
|
|
||||||
editor.putLong(
|
|
||||||
PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID,
|
|
||||||
PlaybackPreferences.NO_MEDIA_PLAYING);
|
|
||||||
}
|
|
||||||
editor.putInt(
|
|
||||||
PlaybackPreferences.PREF_CURRENT_PLAYER_STATUS, playerStatus);
|
|
||||||
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePlayerStatusPlaybackPreferences() {
|
|
||||||
Log.d(TAG, "Writing player status playback preferences");
|
|
||||||
|
|
||||||
SharedPreferences.Editor editor = PreferenceManager
|
|
||||||
.getDefaultSharedPreferences(getApplicationContext()).edit();
|
|
||||||
int playerStatus = getCurrentPlayerStatusAsInt(mediaPlayer.getPlayerStatus());
|
|
||||||
editor.putInt(PlaybackPreferences.PREF_CURRENT_PLAYER_STATUS, playerStatus);
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendNotificationBroadcast(int type, int code) {
|
private void sendNotificationBroadcast(int type, int code) {
|
||||||
Intent intent = new Intent(ACTION_PLAYER_NOTIFICATION);
|
Intent intent = new Intent(ACTION_PLAYER_NOTIFICATION);
|
||||||
intent.putExtra(EXTRA_NOTIFICATION_TYPE, type);
|
intent.putExtra(EXTRA_NOTIFICATION_TYPE, type);
|
||||||
|
|
Loading…
Reference in New Issue