Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a8e5a05 authored by Michael Wright's avatar Michael Wright Committed by Android (Google) Code Review
Browse files

Merge "Generate locale-aware gamepad fallbacks for webview"

parents 48e8f013 916b649d
Loading
Loading
Loading
Loading
+83 −66
Original line number Diff line number Diff line
@@ -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.
@@ -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;
        }

    }

@@ -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();
@@ -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,
@@ -5874,6 +5888,9 @@ public final class ViewRootImpl implements ViewParent,
                            flags, event.getSource(), null);
                    fallbackAction.recycle();

                }
            }
            if (fallbackEvent != null) {
                dispatchInputEvent(fallbackEvent);
            }
        }