Skip to content

Commit

Permalink
[android] player release refactor.
Browse files Browse the repository at this point in the history
  • Loading branch information
gubatron committed Feb 18, 2016
1 parent f3e4886 commit 6a1ef31
Showing 1 changed file with 40 additions and 21 deletions.
61 changes: 40 additions & 21 deletions android/apollo/src/com/andrew/apollo/MusicPlaybackService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2587,8 +2587,6 @@ private static final class MultiPlayer implements MediaPlayer.OnErrorListener,

private MediaPlayer mNextMediaPlayer;

private final Object mNextMediaPlayerLock;

private Handler mHandler;

private boolean mIsInitialized = false;
Expand All @@ -2598,7 +2596,6 @@ private static final class MultiPlayer implements MediaPlayer.OnErrorListener,
*/
public MultiPlayer(final MusicPlaybackService service) {
mService = new WeakReference<>(service);
mNextMediaPlayerLock = new Object();
mCurrentMediaPlayer.setWakeMode(mService.get(), PowerManager.PARTIAL_WAKE_LOCK);
}

Expand Down Expand Up @@ -2677,16 +2674,7 @@ public void setNextDataSource(final String path) {
return;
}

synchronized (mNextMediaPlayerLock) {
mNextMediaPlayer = new MediaPlayer();
}
mNextMediaPlayer.setWakeMode(mService.get(), PowerManager.PARTIAL_WAKE_LOCK);

try {
mNextMediaPlayer.setAudioSessionId(getAudioSessionId());
} catch (Throwable e) {
Log.e(TAG, "Media player Illegal State exception", e);
}
initNextMediaPlayer();

if (setDataSourceImpl(mNextMediaPlayer, path)) {
try {
Expand All @@ -2700,12 +2688,42 @@ public void setNextDataSource(final String path) {
}
}

private void initNextMediaPlayer() {
mNextMediaPlayer = new MediaPlayer();
mNextMediaPlayer.setWakeMode(mService.get(), PowerManager.PARTIAL_WAKE_LOCK);

try {
mNextMediaPlayer.setAudioSessionId(getAudioSessionId());
} catch (Throwable e) {
Log.e(TAG, "Media player Illegal State exception", e);
}
}

private void releaseCurrentMediaPlayer() {
if (mCurrentMediaPlayer == null) {
return;
}

try {
mCurrentMediaPlayer.release();
} catch (Throwable e) {
Log.w(TAG, "releaseCurrentMediaPlayer() couldn't release mCurrentMediaPlayer", e);
} finally {
mCurrentMediaPlayer = null;
}
}

private void releaseNextMediaPlayer() {
synchronized (mNextMediaPlayerLock) {
if (mNextMediaPlayer != null) {
mNextMediaPlayer.release();
mNextMediaPlayer = null;
}
if (mNextMediaPlayer == null) {
return;
}

try {
mNextMediaPlayer.release();
} catch (Throwable e) {
Log.w(TAG, "releaseNextMediaPlayer() couldn't release mNextMediaPlayer", e);
} finally {
mNextMediaPlayer = null;
}
}

Expand Down Expand Up @@ -2861,7 +2879,7 @@ public boolean onError(final MediaPlayer mp, final int what, final int extra) {
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
try {
mIsInitialized = false;
mCurrentMediaPlayer.release();
releaseCurrentMediaPlayer();
mCurrentMediaPlayer = new MediaPlayer();
mCurrentMediaPlayer.setWakeMode(mService.get(), PowerManager.PARTIAL_WAKE_LOCK);
mHandler.sendMessageDelayed(mHandler.obtainMessage(SERVER_DIED), 2000);
Expand All @@ -2874,16 +2892,17 @@ public boolean onError(final MediaPlayer mp, final int what, final int extra) {
return false;
}


/**
* {@inheritDoc}
*/
@Override
public void onCompletion(final MediaPlayer mp) {
try {
if (mp == mCurrentMediaPlayer && mNextMediaPlayer != null) {
mCurrentMediaPlayer.release();
releaseCurrentMediaPlayer();
mCurrentMediaPlayer = mNextMediaPlayer;
releaseNextMediaPlayer();
mNextMediaPlayer = null;
mHandler.sendEmptyMessage(TRACK_WENT_TO_NEXT);
} else {
mService.get().mWakeLock.acquire(30000);
Expand Down

0 comments on commit 6a1ef31

Please sign in to comment.