summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/KeyguardManager.java16
-rw-r--r--core/java/android/webkit/HTML5Audio.java28
-rw-r--r--core/java/android/webkit/WebViewCore.java16
-rw-r--r--core/java/android/webkit/WebViewInputDispatcher.java12
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.