|
59 | 59 | import android.util.Log; |
60 | 60 | import android.util.Slog; |
61 | 61 | import android.util.TypedValue; |
| 62 | +import android.view.KeyCharacterMap.FallbackAction; |
62 | 63 | import android.view.View.AttachInfo; |
63 | 64 | import android.view.View.MeasureSpec; |
64 | 65 | import android.view.accessibility.AccessibilityEvent; |
@@ -323,6 +324,8 @@ class ResizedInfo { |
323 | 324 |
|
324 | 325 | private final int mDensity; |
325 | 326 |
|
| 327 | + final KeyCharacterMap.FallbackAction mFallbackAction = new KeyCharacterMap.FallbackAction(); |
| 328 | + |
326 | 329 | /** |
327 | 330 | * Consistency verifier for debugging purposes. |
328 | 331 | */ |
@@ -4383,6 +4386,31 @@ public void dispatchKeyFromIme(KeyEvent event) { |
4383 | 4386 | mHandler.sendMessage(msg); |
4384 | 4387 | } |
4385 | 4388 |
|
| 4389 | + public void dispatchUnhandledKey(KeyEvent event) { |
| 4390 | + if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { |
| 4391 | + final KeyCharacterMap kcm = event.getKeyCharacterMap(); |
| 4392 | + final int keyCode = event.getKeyCode(); |
| 4393 | + final int metaState = event.getMetaState(); |
| 4394 | + |
| 4395 | + KeyEvent fallbackEvent = null; |
| 4396 | + synchronized (mFallbackAction) { |
| 4397 | + // Check for fallback actions specified by the key character map. |
| 4398 | + if (kcm.getFallbackAction(keyCode, metaState, mFallbackAction)) { |
| 4399 | + int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK; |
| 4400 | + fallbackEvent = KeyEvent.obtain( |
| 4401 | + event.getDownTime(), event.getEventTime(), |
| 4402 | + event.getAction(), mFallbackAction.keyCode, |
| 4403 | + event.getRepeatCount(), mFallbackAction.metaState, |
| 4404 | + event.getDeviceId(), event.getScanCode(), |
| 4405 | + flags, event.getSource(), null); |
| 4406 | + } |
| 4407 | + } |
| 4408 | + if (fallbackEvent != null) { |
| 4409 | + dispatchKey(fallbackEvent); |
| 4410 | + } |
| 4411 | + } |
| 4412 | + } |
| 4413 | + |
4386 | 4414 | public void dispatchAppVisibility(boolean visible) { |
4387 | 4415 | Message msg = mHandler.obtainMessage(MSG_DISPATCH_APP_VISIBILITY); |
4388 | 4416 | msg.arg1 = visible ? 1 : 0; |
|
0 commit comments