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.preference.PreferenceManager;
|
||||
|
||||
import android.util.Log;
|
||||
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
|
||||
|
@ -19,35 +24,35 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference
|
|||
* 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";
|
||||
private static final String PREF_CURRENTLY_PLAYING_FEED_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedId";
|
||||
|
||||
/**
|
||||
* 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";
|
||||
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
|
||||
* 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";
|
||||
private static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia";
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
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.
|
||||
|
@ -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() {
|
||||
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.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);
|
||||
switch (newInfo.playerStatus) {
|
||||
case INITIALIZED:
|
||||
writePlaybackPreferences();
|
||||
PlaybackPreferences.writeMediaPlaying(mediaPlayer.getPSMPInfo().playable,
|
||||
mediaPlayer.getPSMPInfo().playerStatus, mediaPlayer.isStreaming());
|
||||
break;
|
||||
|
||||
case PREPARED:
|
||||
|
@ -739,7 +740,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||
stateManager.stopForeground(true);
|
||||
}
|
||||
cancelPositionObserver();
|
||||
writePlayerStatusPlaybackPreferences();
|
||||
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
|
||||
break;
|
||||
|
||||
case STOPPED:
|
||||
|
@ -748,7 +749,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||
break;
|
||||
|
||||
case PLAYING:
|
||||
writePlayerStatusPlaybackPreferences();
|
||||
PlaybackPreferences.writePlayerStatus(mediaPlayer.getPlayerStatus());
|
||||
setupNotification(newInfo);
|
||||
setupPositionUpdater();
|
||||
stateManager.validStartCommandWasReceived();
|
||||
|
@ -1029,82 +1030,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||
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) {
|
||||
Intent intent = new Intent(ACTION_PLAYER_NOTIFICATION);
|
||||
intent.putExtra(EXTRA_NOTIFICATION_TYPE, type);
|
||||
|
|
Loading…
Reference in New Issue