Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java

Issue 23619024: [Android WebView] Enable spatial navigation / DPAD (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
index da09a1a3eb0c9816f9cd5e5e638c42e7f5df459b..7e3512d7ec64f28b71cf73d941ba2f3540d9a5f6 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
@@ -10,6 +10,7 @@ import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
+import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.ValueCallback;
@@ -37,11 +38,14 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
final AwContentsClient mContentsClient;
final PreferredSizeChangedListener mPreferredSizeChangedListener;
+ final View mContainerView;
public AwWebContentsDelegateAdapter(AwContentsClient contentsClient,
- PreferredSizeChangedListener preferredSizeChangedListener) {
+ PreferredSizeChangedListener preferredSizeChangedListener,
+ View containerView) {
mContentsClient = contentsClient;
mPreferredSizeChangedListener = preferredSizeChangedListener;
+ mContainerView = containerView;
}
@Override
@@ -51,10 +55,46 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
@Override
public void handleKeyboardEvent(KeyEvent event) {
+ if (event.getAction() == KeyEvent.ACTION_DOWN) {
+ int direction;
+ switch (event.getKeyCode()) {
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ direction = View.FOCUS_DOWN;
+ break;
+ case KeyEvent.KEYCODE_DPAD_UP:
+ direction = View.FOCUS_UP;
+ break;
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ direction = View.FOCUS_LEFT;
+ break;
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ direction = View.FOCUS_RIGHT;
+ break;
+ default:
+ direction = 0;
+ break;
+ }
+ if (direction != 0 && tryToMoveFocus(direction)) return;
+ }
mContentsClient.onUnhandledKeyEvent(event);
}
@Override
+ public boolean takeFocus(boolean reverse) {
+ int direction =
+ (reverse == (mContainerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL)) ?
+ View.FOCUS_RIGHT : View.FOCUS_LEFT;
+ if (tryToMoveFocus(direction)) return true;
+ direction = reverse ? View.FOCUS_UP : View.FOCUS_DOWN;
+ return tryToMoveFocus(direction);
+ }
+
+ private boolean tryToMoveFocus(int direction) {
+ View focus = mContainerView.focusSearch(direction);
+ return focus != null && focus != mContainerView && focus.requestFocus();
+ }
+
+ @Override
public boolean addMessageToConsole(int level, String message, int lineNumber,
String sourceId) {
ConsoleMessage.MessageLevel messageLevel = ConsoleMessage.MessageLevel.DEBUG;

Powered by Google App Engine
This is Rietveld 408576698