summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/webkit/HTML5Audio.java28
1 files changed, 15 insertions, 13 deletions
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 689884f..fc5df2d 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -67,6 +67,8 @@ class HTML5Audio extends Handler
private String mUrl;
private boolean mAskToPlay = false;
+ private boolean mLoopEnabled = false;
+ private boolean mProcessingOnEnd = false;
private Context mContext;
// Timer thread -> UI thread
@@ -143,7 +145,13 @@ class HTML5Audio extends Handler
// MediaPlayer.OnCompletionListener;
public void onCompletion(MediaPlayer mp) {
mState = COMPLETE;
+ mProcessingOnEnd = true;
nativeOnEnded(mNativePointer);
+ mProcessingOnEnd = false;
+ if (mLoopEnabled == true) {
+ nativeOnRequestPlay(mNativePointer);
+ mLoopEnabled = false;
+ }
}
// MediaPlayer.OnErrorListener
@@ -264,14 +272,10 @@ class HTML5Audio extends Handler
private void play() {
- if (mState == COMPLETE) {
+ if (mState == COMPLETE && mLoopEnabled == true) {
// Play it again, Sam
- mTimer.cancel();
- mTimer = new Timer();
- mAskToPlay = true;
- mMediaPlayer.stop();
- mState = STOPPED;
- mMediaPlayer.prepareAsync();
+ mMediaPlayer.start();
+ mState = STARTED;
return;
}
@@ -304,14 +308,11 @@ class HTML5Audio extends Handler
}
private void seek(int msec) {
+ if (mProcessingOnEnd == true && mState == COMPLETE && msec == 0) {
+ mLoopEnabled = true;
+ }
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();
- }
}
}
@@ -336,6 +337,7 @@ class HTML5Audio extends Handler
private native void nativeOnBuffering(int percent, int nativePointer);
private native void nativeOnEnded(int nativePointer);
+ private native void nativeOnRequestPlay(int nativePointer);
private native void nativeOnPrepared(int duration, int width, int height, int nativePointer);
private native void nativeOnTimeupdate(int position, int nativePointer);