mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-12-01 12:31:45 +00:00
Added INITIALIZED state
This commit is contained in:
@ -82,6 +82,8 @@ public class PlaybackService extends Service {
|
|||||||
*/
|
*/
|
||||||
public static final String EXTRA_START_WHEN_PREPARED = "extra.de.danoeh.antennapod.service.startWhenPrepared";
|
public static final String EXTRA_START_WHEN_PREPARED = "extra.de.danoeh.antennapod.service.startWhenPrepared";
|
||||||
|
|
||||||
|
public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.service.prepareImmediately";
|
||||||
|
|
||||||
public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.service.playerStatusChanged";
|
public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.service.playerStatusChanged";
|
||||||
|
|
||||||
public static final String ACTION_PLAYER_NOTIFICATION = "action.de.danoeh.antennapod.service.playerNotification";
|
public static final String ACTION_PLAYER_NOTIFICATION = "action.de.danoeh.antennapod.service.playerNotification";
|
||||||
@ -129,6 +131,9 @@ public class PlaybackService extends Service {
|
|||||||
private Feed feed;
|
private Feed feed;
|
||||||
/** True if media should be streamed (Extracted from Intent Extra) . */
|
/** True if media should be streamed (Extracted from Intent Extra) . */
|
||||||
private boolean shouldStream;
|
private boolean shouldStream;
|
||||||
|
|
||||||
|
/** True if service should prepare playback after it has been initialized */
|
||||||
|
private boolean prepareImmediately;
|
||||||
private boolean startWhenPrepared;
|
private boolean startWhenPrepared;
|
||||||
private FeedManager manager;
|
private FeedManager manager;
|
||||||
private PlayerStatus status;
|
private PlayerStatus status;
|
||||||
@ -265,13 +270,8 @@ public class PlaybackService extends Service {
|
|||||||
Log.w(TAG, "SchedEx rejected submission of new task");
|
Log.w(TAG, "SchedEx rejected submission of new task");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
player = new MediaPlayer();
|
player = createMediaPlayer();
|
||||||
player.setOnPreparedListener(preparedListener);
|
|
||||||
player.setOnCompletionListener(completionListener);
|
|
||||||
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
|
||||||
player.setOnErrorListener(onErrorListener);
|
|
||||||
player.setOnBufferingUpdateListener(onBufferingUpdateListener);
|
|
||||||
player.setOnInfoListener(onInfoListener);
|
|
||||||
mediaButtonReceiver = new ComponentName(getPackageName(),
|
mediaButtonReceiver = new ComponentName(getPackageName(),
|
||||||
MediaButtonReceiver.class.getName());
|
MediaButtonReceiver.class.getName());
|
||||||
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
|
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
|
||||||
@ -286,6 +286,22 @@ public class PlaybackService extends Service {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MediaPlayer createMediaPlayer() {
|
||||||
|
return createMediaPlayer(new MediaPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
private MediaPlayer createMediaPlayer(MediaPlayer mp) {
|
||||||
|
if (mp != null) {
|
||||||
|
mp.setOnPreparedListener(preparedListener);
|
||||||
|
mp.setOnCompletionListener(completionListener);
|
||||||
|
mp.setOnSeekCompleteListener(onSeekCompleteListener);
|
||||||
|
mp.setOnErrorListener(onErrorListener);
|
||||||
|
mp.setOnBufferingUpdateListener(onBufferingUpdateListener);
|
||||||
|
mp.setOnInfoListener(onInfoListener);
|
||||||
|
}
|
||||||
|
return mp;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
@ -390,7 +406,8 @@ public class PlaybackService extends Service {
|
|||||||
shouldStream = playbackType;
|
shouldStream = playbackType;
|
||||||
startWhenPrepared = intent.getBooleanExtra(
|
startWhenPrepared = intent.getBooleanExtra(
|
||||||
EXTRA_START_WHEN_PREPARED, false);
|
EXTRA_START_WHEN_PREPARED, false);
|
||||||
setupMediaplayer();
|
prepareImmediately = intent.getBooleanExtra(EXTRA_PREPARE_IMMEDIATELY, false);
|
||||||
|
initMediaplayer();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "Media is null");
|
Log.e(TAG, "Media is null");
|
||||||
@ -480,15 +497,9 @@ public class PlaybackService extends Service {
|
|||||||
player.setDisplay(null);
|
player.setDisplay(null);
|
||||||
player.reset();
|
player.reset();
|
||||||
player.release();
|
player.release();
|
||||||
player = new MediaPlayer();
|
player = createMediaPlayer();
|
||||||
player.setOnPreparedListener(preparedListener);
|
|
||||||
player.setOnCompletionListener(completionListener);
|
|
||||||
player.setOnSeekCompleteListener(onSeekCompleteListener);
|
|
||||||
player.setOnErrorListener(onErrorListener);
|
|
||||||
player.setOnBufferingUpdateListener(onBufferingUpdateListener);
|
|
||||||
player.setOnInfoListener(onInfoListener);
|
|
||||||
status = PlayerStatus.STOPPED;
|
status = PlayerStatus.STOPPED;
|
||||||
setupMediaplayer();
|
initMediaplayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyVideoSurfaceAbandoned() {
|
public void notifyVideoSurfaceAbandoned() {
|
||||||
@ -496,7 +507,7 @@ public class PlaybackService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Called after service has extracted the media it is supposed to play. */
|
/** Called after service has extracted the media it is supposed to play. */
|
||||||
private void setupMediaplayer() {
|
private void initMediaplayer() {
|
||||||
if (AppConfig.DEBUG)
|
if (AppConfig.DEBUG)
|
||||||
Log.d(TAG, "Setting up media player");
|
Log.d(TAG, "Setting up media player");
|
||||||
try {
|
try {
|
||||||
@ -507,12 +518,14 @@ public class PlaybackService extends Service {
|
|||||||
playingVideo = false;
|
playingVideo = false;
|
||||||
if (shouldStream) {
|
if (shouldStream) {
|
||||||
player.setDataSource(media.getDownload_url());
|
player.setDataSource(media.getDownload_url());
|
||||||
setStatus(PlayerStatus.PREPARING);
|
|
||||||
player.prepareAsync();
|
|
||||||
} else if (media.getFile_url() != null) {
|
} else if (media.getFile_url() != null) {
|
||||||
player.setDataSource(media.getFile_url());
|
player.setDataSource(media.getFile_url());
|
||||||
|
}
|
||||||
|
if (prepareImmediately) {
|
||||||
setStatus(PlayerStatus.PREPARING);
|
setStatus(PlayerStatus.PREPARING);
|
||||||
player.prepare();
|
player.prepareAsync();
|
||||||
|
} else {
|
||||||
|
setStatus(PlayerStatus.INITIALIZED);
|
||||||
}
|
}
|
||||||
} else if (mediaType == MediaType.VIDEO) {
|
} else if (mediaType == MediaType.VIDEO) {
|
||||||
if (AppConfig.DEBUG)
|
if (AppConfig.DEBUG)
|
||||||
@ -656,14 +669,16 @@ public class PlaybackService extends Service {
|
|||||||
media.setPosition(0);
|
media.setPosition(0);
|
||||||
media.setPlaybackCompletionDate(new Date());
|
media.setPlaybackCompletionDate(new Date());
|
||||||
manager.markItemRead(PlaybackService.this, media.getItem(), true);
|
manager.markItemRead(PlaybackService.this, media.getItem(), true);
|
||||||
FeedItem nextItem = manager.getQueueSuccessorOfItem(media.getItem());
|
FeedItem nextItem = manager
|
||||||
|
.getQueueSuccessorOfItem(media.getItem());
|
||||||
boolean isInQueue = manager.isInQueue(media.getItem());
|
boolean isInQueue = manager.isInQueue(media.getItem());
|
||||||
if (isInQueue) {
|
if (isInQueue) {
|
||||||
manager.removeQueueItem(PlaybackService.this, media.getItem());
|
manager.removeQueueItem(PlaybackService.this, media.getItem());
|
||||||
}
|
}
|
||||||
manager.addItemToPlaybackHistory(PlaybackService.this, media.getItem());
|
manager.addItemToPlaybackHistory(PlaybackService.this,
|
||||||
|
media.getItem());
|
||||||
manager.setFeedMedia(PlaybackService.this, media);
|
manager.setFeedMedia(PlaybackService.this, media);
|
||||||
|
|
||||||
long autoDeleteMediaId = media.getId();
|
long autoDeleteMediaId = media.getId();
|
||||||
|
|
||||||
if (shouldStream) {
|
if (shouldStream) {
|
||||||
@ -769,6 +784,27 @@ public class PlaybackService extends Service {
|
|||||||
stopSelf();
|
stopSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepared media player for playback if the service is in the INITALIZED
|
||||||
|
* state.
|
||||||
|
*/
|
||||||
|
public void prepare() {
|
||||||
|
if (status == PlayerStatus.INITIALIZED) {
|
||||||
|
if (AppConfig.DEBUG)
|
||||||
|
Log.d(TAG, "Preparing media player");
|
||||||
|
setStatus(PlayerStatus.PREPARING);
|
||||||
|
player.prepareAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Resets the media player and moves into INITIALIZED state. */
|
||||||
|
public void reinit() {
|
||||||
|
player.reset();
|
||||||
|
player = createMediaPlayer(player);
|
||||||
|
prepareImmediately = false;
|
||||||
|
initMediaplayer();
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
public void play() {
|
public void play() {
|
||||||
if (status == PlayerStatus.PAUSED || status == PlayerStatus.PREPARED
|
if (status == PlayerStatus.PAUSED || status == PlayerStatus.PREPARED
|
||||||
|
|||||||
@ -1,5 +1,13 @@
|
|||||||
package de.danoeh.antennapod.service;
|
package de.danoeh.antennapod.service;
|
||||||
|
|
||||||
public enum PlayerStatus {
|
public enum PlayerStatus {
|
||||||
ERROR, PREPARING, PAUSED, PLAYING, STOPPED, PREPARED, SEEKING, AWAITING_VIDEO_SURFACE
|
ERROR,
|
||||||
|
PREPARING,
|
||||||
|
PAUSED,
|
||||||
|
PLAYING,
|
||||||
|
STOPPED,
|
||||||
|
PREPARED,
|
||||||
|
SEEKING,
|
||||||
|
AWAITING_VIDEO_SURFACE, // player has been initialized and the media type to be played is a video.
|
||||||
|
INITIALIZED // playback service was started, data source of media player was set.
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user