summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorBart Sears <bsears@google.com>2011-10-14 16:09:46 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-14 16:09:46 -0700
commitb227cce31641c39a1a586739561b4776019945a4 (patch)
tree28f43e7e3284e7cf6d6957afc3d3fe5a32d1db45 /core/java
parent57337eb78e65c160fb9c46a01e04c476d1bfdca1 (diff)
parent817d6d5e8efa30082ce4b31d7da73cee20fc664a (diff)
downloadframeworks_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.java33
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;
}