diff options
| author | John Reck <jreck@google.com> | 2012-04-20 13:43:00 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-04-20 13:43:00 -0700 |
| commit | ebd477518f10d61b1164c0df6c14cb2d0e59ecf0 (patch) | |
| tree | ee1b71ae7d027b3dc794ffe6438b568c4a13b2b1 /core/java/android/view | |
| parent | 069fa7b306ae85763765cd2713e2a2bcd59a44fe (diff) | |
| parent | d6b1098e1f46530528dfea415655468ec994bbb6 (diff) | |
| download | frameworks_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.java | 28 |
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; |
