diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/KeyguardManager.java | 16 | ||||
| -rw-r--r-- | core/java/android/webkit/HTML5Audio.java | 28 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 16 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewInputDispatcher.java | 12 |
4 files changed, 42 insertions, 30 deletions
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 0fe7b5c..a79a8fc 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -28,7 +28,7 @@ import android.view.IOnKeyguardExitResult; * Class that can be used to lock and unlock the keyboard. Get an instance of this * class by calling {@link android.content.Context#getSystemService(java.lang.String)} * with argument {@link android.content.Context#KEYGUARD_SERVICE}. The - * Actual class to control the keyboard locking is + * actual class to control the keyboard locking is * {@link android.app.KeyguardManager.KeyguardLock}. */ public class KeyguardManager { @@ -73,7 +73,7 @@ public class KeyguardManager { /** * Reenable the keyguard. The keyguard will reappear if the previous - * call to {@link #disableKeyguard()} caused it it to be hidden. + * call to {@link #disableKeyguard()} caused it to be hidden. * * A good place to call this is from {@link android.app.Activity#onPause()} * @@ -130,13 +130,9 @@ public class KeyguardManager { } /** - * isKeyguardLocked - * * Return whether the keyguard is currently locked. * - * @return true if in keyguard is locked. - * - * @hide + * @return true if keyguard is locked. */ public boolean isKeyguardLocked() { try { @@ -147,13 +143,9 @@ public class KeyguardManager { } /** - * isKeyguardSecure - * * Return whether the keyguard requires a password to unlock. * - * @return true if in keyguard is secure. - * - * @hide + * @return true if keyguard is secure. */ public boolean isKeyguardSecure() { try { 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); diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index ba42ff5..1164649 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -669,7 +669,7 @@ public final class WebViewCore { int x, int y); private native boolean nativeMouseClick(int nativeClass); - private native boolean nativeHandleTouchEvent(int nativeClass, int action, + private native int nativeHandleTouchEvent(int nativeClass, int action, int[] idArray, int[] xArray, int[] yArray, int count, int actionIndex, int metaState); @@ -968,6 +968,9 @@ public final class WebViewCore { static final int ACTION_LONGPRESS = 0x100; static final int ACTION_DOUBLETAP = 0x200; + private static final int TOUCH_FLAG_HIT_HANDLER = 0x1; + private static final int TOUCH_FLAG_PREVENT_DEFAULT = 0x2; + static class TouchEventData { int mAction; int[] mIds; // Ids of the touch points @@ -1784,7 +1787,8 @@ public final class WebViewCore { } @Override - public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags) { + public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, + MotionEvent event, int eventType, int flags) { if (mNativeClass == 0) { return false; } @@ -1811,10 +1815,16 @@ public final class WebViewCore { xArray[i] = (int) event.getX(i); yArray[i] = (int) event.getY(i); } - return nativeHandleTouchEvent(mNativeClass, + int touchFlags = nativeHandleTouchEvent(mNativeClass, event.getActionMasked(), idArray, xArray, yArray, count, event.getActionIndex(), event.getMetaState()); + if (touchFlags == 0 + && event.getActionMasked() != MotionEvent.ACTION_CANCEL + && (flags & WebViewInputDispatcher.FLAG_PRIVATE) == 0) { + dispatcher.skipWebkitForRemainingTouchStream(); + } + return (touchFlags & TOUCH_FLAG_PREVENT_DEFAULT) > 0; } default: diff --git a/core/java/android/webkit/WebViewInputDispatcher.java b/core/java/android/webkit/WebViewInputDispatcher.java index feff16e..d8065e9 100644 --- a/core/java/android/webkit/WebViewInputDispatcher.java +++ b/core/java/android/webkit/WebViewInputDispatcher.java @@ -686,7 +686,7 @@ final class WebViewInputDispatcher { + ", eventType=" + eventType + ", flags=" + flags); } boolean preventDefault = mWebKitCallbacks.dispatchWebKitEvent( - event, eventType, flags); + this, event, eventType, flags); if (DEBUG) { Log.d(TAG, "dispatchWebKitEvent: preventDefault=" + preventDefault); } @@ -710,6 +710,12 @@ final class WebViewInputDispatcher { mWebKitDispatchEventQueue.mHead = d; } + // Called by WebKit when it doesn't care about the rest of the touch stream + public void skipWebkitForRemainingTouchStream() { + // Just treat this like a timeout + handleWebKitTimeout(); + } + // Runs on UI thread in response to the web kit thread appearing to be unresponsive. private void handleWebKitTimeout() { synchronized (mLock) { @@ -1081,12 +1087,14 @@ final class WebViewInputDispatcher { /** * Dispatches an event to web kit. + * @param dispatcher The WebViewInputDispatcher sending the event * @param event The event. * @param eventType The event type. * @param flags The event's dispatch flags. * @return True if web kit wants to prevent default event handling. */ - public boolean dispatchWebKitEvent(MotionEvent event, int eventType, int flags); + public boolean dispatchWebKitEvent(WebViewInputDispatcher dispatcher, + MotionEvent event, int eventType, int flags); } // Runs on UI thread. |
