diff options
Diffstat (limited to 'core/java')
6 files changed, 49 insertions, 45 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. diff --git a/core/java/com/android/internal/widget/SizeAdaptiveLayout.java b/core/java/com/android/internal/widget/SizeAdaptiveLayout.java index bbf5509..7687ad1 100644 --- a/core/java/com/android/internal/widget/SizeAdaptiveLayout.java +++ b/core/java/com/android/internal/widget/SizeAdaptiveLayout.java @@ -175,7 +175,7 @@ public class SizeAdaptiveLayout extends ViewGroup { height = Math.min(height, lp.maxHeight); } - if (heightIn != height) { + if (DEBUG && heightIn != height) { Log.d(TAG, this + "child view " + child + " " + "measured out of bounds at " + heightIn +"px " + "clamped to " + height + "px"); diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index d6fb847..8cd63ef 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -476,19 +476,12 @@ public class MultiWaveView extends View { /** * Dispatches a trigger event to listener. Ignored if a listener is not set. - * @param whichHandle the handle that triggered the event. + * @param whichTarget the target that was triggered. */ - private void dispatchTriggerEvent(int whichHandle) { + private void dispatchTriggerEvent(int whichTarget) { vibrate(); if (mOnTriggerListener != null) { - mOnTriggerListener.onTrigger(this, whichHandle); - } - } - - private void dispatchGrabbedEvent(int whichHandler) { - vibrate(); - if (mOnTriggerListener != null) { - mOnTriggerListener.onGrabbed(this, whichHandler); + mOnTriggerListener.onTrigger(this, whichTarget); } } @@ -514,7 +507,7 @@ public class MultiWaveView extends View { // Inform listener of any active targets. Typically only one will be active. if (DEBUG) Log.v(TAG, "Finish with target hit = " + targetHit); - dispatchTriggerEvent(mActiveTarget); + dispatchTriggerEvent(activeTarget); } // Animate handle back to the center based on current state. @@ -791,7 +784,7 @@ public class MultiWaveView extends View { } private void handleDown(MotionEvent event) { - if (!trySwitchToFirstTouchState(event.getX(), event.getY())) { + if (!trySwitchToFirstTouchState(event.getX(), event.getY())) { mDragging = false; mTargetAnimations.cancel(); ping(); @@ -903,7 +896,6 @@ public class MultiWaveView extends View { if (target.hasState(TargetDrawable.STATE_FOCUSED)) { target.setState(TargetDrawable.STATE_FOCUSED); } - dispatchGrabbedEvent(activeTarget); if (AccessibilityManager.getInstance(mContext).isEnabled()) { String targetContentDescription = getTargetDescription(activeTarget); announceText(targetContentDescription); @@ -950,7 +942,7 @@ public class MultiWaveView extends View { } else { mOnTriggerListener.onGrabbed(this, OnTriggerListener.CENTER_HANDLE); } - mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); + mOnTriggerListener.onGrabbedStateChange(this, newState); } } } |
