summaryrefslogtreecommitdiffstats
path: root/core/java/android/view
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-04-20 13:43:00 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-04-20 13:43:00 -0700
commitebd477518f10d61b1164c0df6c14cb2d0e59ecf0 (patch)
treeee1b71ae7d027b3dc794ffe6438b568c4a13b2b1 /core/java/android/view
parent069fa7b306ae85763765cd2713e2a2bcd59a44fe (diff)
parentd6b1098e1f46530528dfea415655468ec994bbb6 (diff)
downloadframeworks_base-ebd477518f10d61b1164c0df6c14cb2d0e59ecf0.zip
frameworks_base-ebd477518f10d61b1164c0df6c14cb2d0e59ecf0.tar.gz
frameworks_base-ebd477518f10d61b1164c0df6c14cb2d0e59ecf0.tar.bz2
Merge "Support fallback action if unhandled key event"
Diffstat (limited to 'core/java/android/view')
-rw-r--r--core/java/android/view/ViewRootImpl.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 247f673..da1f64b 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -59,6 +59,7 @@ import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
import android.util.TypedValue;
+import android.view.KeyCharacterMap.FallbackAction;
import android.view.View.AttachInfo;
import android.view.View.MeasureSpec;
import android.view.accessibility.AccessibilityEvent;
@@ -323,6 +324,8 @@ public final class ViewRootImpl implements ViewParent,
private final int mDensity;
+ final KeyCharacterMap.FallbackAction mFallbackAction = new KeyCharacterMap.FallbackAction();
+
/**
* Consistency verifier for debugging purposes.
*/
@@ -4383,6 +4386,31 @@ public final class ViewRootImpl implements ViewParent,
mHandler.sendMessage(msg);
}
+ public void dispatchUnhandledKey(KeyEvent event) {
+ if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
+ final KeyCharacterMap kcm = event.getKeyCharacterMap();
+ final int keyCode = event.getKeyCode();
+ final int metaState = event.getMetaState();
+
+ KeyEvent fallbackEvent = null;
+ synchronized (mFallbackAction) {
+ // Check for fallback actions specified by the key character map.
+ if (kcm.getFallbackAction(keyCode, metaState, mFallbackAction)) {
+ int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
+ fallbackEvent = KeyEvent.obtain(
+ event.getDownTime(), event.getEventTime(),
+ event.getAction(), mFallbackAction.keyCode,
+ event.getRepeatCount(), mFallbackAction.metaState,
+ event.getDeviceId(), event.getScanCode(),
+ flags, event.getSource(), null);
+ }
+ }
+ if (fallbackEvent != null) {
+ dispatchKey(fallbackEvent);
+ }
+ }
+ }
+
public void dispatchAppVisibility(boolean visible) {
Message msg = mHandler.obtainMessage(MSG_DISPATCH_APP_VISIBILITY);
msg.arg1 = visible ? 1 : 0;