diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java index 0baf2eb7371e6..aedecf034c296 100644 --- a/core/java/android/webkit/HTML5Audio.java +++ b/core/java/android/webkit/HTML5Audio.java @@ -142,8 +142,7 @@ class HTML5Audio extends Handler // MediaPlayer.OnCompletionListener; public void onCompletion(MediaPlayer mp) { - resetMediaPlayer(); - mState = IDLE; + mState = COMPLETE; nativeOnEnded(mNativePointer); } @@ -265,7 +264,18 @@ class HTML5Audio extends Handler private void play() { - if ((mState >= ERROR && mState < PREPARED) && mUrl != null) { + if (mState == COMPLETE) { + // Play it again, Sam + mTimer.cancel(); + mTimer = new Timer(); + mAskToPlay = true; + mMediaPlayer.stop(); + mState = STOPPED; + mMediaPlayer.prepareAsync(); + return; + } + + if (((mState >= ERROR && mState < PREPARED)) && mUrl != null) { resetMediaPlayer(); setDataSource(mUrl); mAskToPlay = true; @@ -296,6 +306,12 @@ class HTML5Audio extends Handler private void seek(int msec) { if (mState >= PREPARED) { mMediaPlayer.seekTo(msec); + if (mState == COMPLETE) { + // Seeking after the stream had completed will + // cause us to start playing again. This is to + // support audio tags that specify loop=true. + play(); + } } }