Loading core/java/android/view/ViewRootImpl.java +83 −66 Original line number Diff line number Diff line Loading @@ -4865,9 +4865,7 @@ public final class ViewRootImpl implements ViewParent, }; } final class SyntheticKeyHandler { public boolean process(KeyEvent event) { private KeyEvent getSyntheticFallbackKey(KeyEvent event) { // In some locales (like Japan) controllers use B for confirm and A for back, rather // than vice versa, so we need to special case this here since the input system itself // is not locale-aware. Loading Loading @@ -4910,15 +4908,25 @@ public final class ViewRootImpl implements ViewParent, case KeyEvent.KEYCODE_BUTTON_MODE: keyCode = KeyEvent.KEYCODE_MENU; default: return false; return null; } enqueueInputEvent(new KeyEvent(event.getDownTime(), event.getEventTime(), return KeyEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(), keyCode, event.getRepeatCount(), event.getMetaState(), event.getDeviceId(), event.getScanCode(), event.getFlags() | KeyEvent.FLAG_FALLBACK, event.getSource())); event.getFlags() | KeyEvent.FLAG_FALLBACK, event.getSource(), null); } final class SyntheticKeyHandler { public boolean process(KeyEvent event) { KeyEvent syntheticKey = getSyntheticFallbackKey(event); if (syntheticKey != null) { enqueueInputEvent(syntheticKey); return true; } return false; } } Loading Loading @@ -5857,6 +5865,12 @@ public final class ViewRootImpl implements ViewParent, public void dispatchUnhandledKey(KeyEvent event) { if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { // Some fallback keys are decided by the ViewRoot as they might have special // properties (e.g. are locale aware). These take precedence over fallbacks defined by // the kcm. KeyEvent fallbackEvent = getSyntheticFallbackKey(event); if (fallbackEvent == null) { final KeyCharacterMap kcm = event.getKeyCharacterMap(); final int keyCode = event.getKeyCode(); final int metaState = event.getMetaState(); Loading @@ -5866,7 +5880,7 @@ public final class ViewRootImpl implements ViewParent, kcm.getFallbackAction(keyCode, metaState); if (fallbackAction != null) { final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK; KeyEvent fallbackEvent = KeyEvent.obtain( fallbackEvent = KeyEvent.obtain( event.getDownTime(), event.getEventTime(), event.getAction(), fallbackAction.keyCode, event.getRepeatCount(), fallbackAction.metaState, Loading @@ -5874,6 +5888,9 @@ public final class ViewRootImpl implements ViewParent, flags, event.getSource(), null); fallbackAction.recycle(); } } if (fallbackEvent != null) { dispatchInputEvent(fallbackEvent); } } Loading Loading
core/java/android/view/ViewRootImpl.java +83 −66 Original line number Diff line number Diff line Loading @@ -4865,9 +4865,7 @@ public final class ViewRootImpl implements ViewParent, }; } final class SyntheticKeyHandler { public boolean process(KeyEvent event) { private KeyEvent getSyntheticFallbackKey(KeyEvent event) { // In some locales (like Japan) controllers use B for confirm and A for back, rather // than vice versa, so we need to special case this here since the input system itself // is not locale-aware. Loading Loading @@ -4910,15 +4908,25 @@ public final class ViewRootImpl implements ViewParent, case KeyEvent.KEYCODE_BUTTON_MODE: keyCode = KeyEvent.KEYCODE_MENU; default: return false; return null; } enqueueInputEvent(new KeyEvent(event.getDownTime(), event.getEventTime(), return KeyEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(), keyCode, event.getRepeatCount(), event.getMetaState(), event.getDeviceId(), event.getScanCode(), event.getFlags() | KeyEvent.FLAG_FALLBACK, event.getSource())); event.getFlags() | KeyEvent.FLAG_FALLBACK, event.getSource(), null); } final class SyntheticKeyHandler { public boolean process(KeyEvent event) { KeyEvent syntheticKey = getSyntheticFallbackKey(event); if (syntheticKey != null) { enqueueInputEvent(syntheticKey); return true; } return false; } } Loading Loading @@ -5857,6 +5865,12 @@ public final class ViewRootImpl implements ViewParent, public void dispatchUnhandledKey(KeyEvent event) { if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { // Some fallback keys are decided by the ViewRoot as they might have special // properties (e.g. are locale aware). These take precedence over fallbacks defined by // the kcm. KeyEvent fallbackEvent = getSyntheticFallbackKey(event); if (fallbackEvent == null) { final KeyCharacterMap kcm = event.getKeyCharacterMap(); final int keyCode = event.getKeyCode(); final int metaState = event.getMetaState(); Loading @@ -5866,7 +5880,7 @@ public final class ViewRootImpl implements ViewParent, kcm.getFallbackAction(keyCode, metaState); if (fallbackAction != null) { final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK; KeyEvent fallbackEvent = KeyEvent.obtain( fallbackEvent = KeyEvent.obtain( event.getDownTime(), event.getEventTime(), event.getAction(), fallbackAction.keyCode, event.getRepeatCount(), fallbackAction.metaState, Loading @@ -5874,6 +5888,9 @@ public final class ViewRootImpl implements ViewParent, flags, event.getSource(), null); fallbackAction.recycle(); } } if (fallbackEvent != null) { dispatchInputEvent(fallbackEvent); } } Loading