diff options
author | Bart Sears <bsears@google.com> | 2011-10-14 16:09:46 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-14 16:09:46 -0700 |
commit | b227cce31641c39a1a586739561b4776019945a4 (patch) | |
tree | 28f43e7e3284e7cf6d6957afc3d3fe5a32d1db45 /core/java | |
parent | 57337eb78e65c160fb9c46a01e04c476d1bfdca1 (diff) | |
parent | 817d6d5e8efa30082ce4b31d7da73cee20fc664a (diff) | |
download | frameworks_base-b227cce31641c39a1a586739561b4776019945a4.zip frameworks_base-b227cce31641c39a1a586739561b4776019945a4.tar.gz frameworks_base-b227cce31641c39a1a586739561b4776019945a4.tar.bz2 |
Merge "Check MediaPlayer state, do not teardown() from UI thread." into ics-mr0
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/webkit/HTML5Audio.java | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java index 9fc48a1..97d61ba 100644 --- a/core/java/android/webkit/HTML5Audio.java +++ b/core/java/android/webkit/HTML5Audio.java @@ -238,24 +238,27 @@ class HTML5Audio extends Handler switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: // resume playback - if (mMediaPlayer == null) resetMediaPlayer(); - else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start(); - mState = STARTED; + if (mMediaPlayer == null) { + resetMediaPlayer(); + } else if (mState != ERROR && !mMediaPlayer.isPlaying()) { + mMediaPlayer.start(); + mState = STARTED; + } break; case AudioManager.AUDIOFOCUS_LOSS: - // Lost focus for an unbounded amount of time: stop playback and release media player - if (mMediaPlayer.isPlaying()) mMediaPlayer.stop(); - mMediaPlayer.release(); - mMediaPlayer = null; + // Lost focus for an unbounded amount of time: stop playback. + if (mState != ERROR && mMediaPlayer.isPlaying()) { + mMediaPlayer.stop(); + mState = STOPPED; + } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // Lost focus for a short time, but we have to stop - // playback. We don't release the media player because playback - // is likely to resume - if (mMediaPlayer.isPlaying()) mMediaPlayer.pause(); + // playback. + if (mState != ERROR && mMediaPlayer.isPlaying()) pause(); break; } } @@ -273,10 +276,7 @@ class HTML5Audio extends Handler int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); - if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { - // could not get audio focus. - teardown(); - } else { + if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { mMediaPlayer.start(); mState = STARTED; } @@ -299,8 +299,13 @@ class HTML5Audio extends Handler } } + /** + * Called only over JNI when WebKit is happy to + * destroy the media player. + */ private void teardown() { mMediaPlayer.release(); + mMediaPlayer = null; mState = ERROR; mNativePointer = 0; } |