diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-23 03:27:44 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-23 03:27:44 +0000 |
commit | 318b7aa8c2289914a0fda4b6f6e6ac6abe5197f4 (patch) | |
tree | 1ad920e2341db5892106429521977676ef01411f /android_webview/java | |
parent | f7956e33d98b811091eaed7ac9dfe38ca0563986 (diff) | |
download | chromium_src-318b7aa8c2289914a0fda4b6f6e6ac6abe5197f4.zip chromium_src-318b7aa8c2289914a0fda4b6f6e6ac6abe5197f4.tar.gz chromium_src-318b7aa8c2289914a0fda4b6f6e6ac6abe5197f4.tar.bz2 |
Dynamically enable spatial navigation based on events
As currently implemented spatial navigation and touch event handling
have some unexpected interactions (see bug link) so instead:
1/ make a better-guess initial value based on presence of touchscreen
2/ dynamically enable spatnav when a DPAD event is received, and disable
it when touch down event received.
BUG=309425
Review URL: https://codereview.chromium.org/33823005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230304 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/java')
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 21 | ||||
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwSettings.java | 22 |
2 files changed, 42 insertions, 1 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 5e1ab63..ef26bf6 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -1223,10 +1223,27 @@ public class AwContents { return mContentViewCore.onKeyUp(keyCode, event); } + private boolean isDpadEvent(KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_DPAD_CENTER: + case KeyEvent.KEYCODE_DPAD_DOWN: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_LEFT: + case KeyEvent.KEYCODE_DPAD_RIGHT: + return true; + } + } + return false; + } + /** * @see android.webkit.WebView#dispatchKeyEvent(KeyEvent) */ public boolean dispatchKeyEvent(KeyEvent event) { + if (isDpadEvent(event)) { + mSettings.setSpatialNavigationEnabled(true); + } return mContentViewCore.dispatchKeyEvent(event); } @@ -1485,6 +1502,10 @@ public class AwContents { public boolean onTouchEvent(MotionEvent event) { if (mNativeAwContents == 0) return false; + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + mSettings.setSpatialNavigationEnabled(false); + } + mScrollOffsetManager.setProcessingTouchEvent(true); boolean rv = mContentViewCore.onTouchEvent(event); mScrollOffsetManager.setProcessingTouchEvent(false); diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java index deee0a597..65a77cb 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java @@ -4,6 +4,7 @@ package org.chromium.android_webview; +import android.content.pm.PackageManager; import android.content.Context; import android.os.Handler; import android.os.Looper; @@ -81,6 +82,7 @@ public class AwSettings { private boolean mMediaPlaybackRequiresUserGesture = true; private String mDefaultVideoPosterURL; private float mInitialPageScalePercent = 0; + private boolean mSpatialNavigationEnabled; // Default depends on device features. private final boolean mSupportLegacyQuirks; @@ -193,6 +195,10 @@ public class AwSettings { mUserAgent = LazyDefaultUserAgent.sInstance; onGestureZoomSupportChanged(supportsGestureZoomLocked()); + // Best-guess a sensible initial value based on the features supported on the device. + mSpatialNavigationEnabled = !context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_TOUCHSCREEN); + // Respect the system setting for password echoing. mPasswordEchoEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 1) == 1; @@ -341,6 +347,20 @@ public class AwSettings { return mInitialPageScalePercent; } + void setSpatialNavigationEnabled(boolean enable) { + synchronized (mAwSettingsLock) { + if (mSpatialNavigationEnabled != enable) { + mSpatialNavigationEnabled = enable; + mEventHandler.updateWebkitPreferencesLocked(); + } + } + } + + @CalledByNative + private boolean getSpatialNavigationLocked() { + return mSpatialNavigationEnabled; + } + /** * See {@link android.webkit.WebSettings#setNeedInitialFocus}. */ @@ -1067,7 +1087,7 @@ public class AwSettings { } @CalledByNative - private boolean getPasswordEchoEnabled() { + private boolean getPasswordEchoEnabledLocked() { return mPasswordEchoEnabled; } |