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

Commit 19861d84 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari Committed by Android (Google) Code Review
Browse files

Merge changes from topic "key_gesture_policy_flag" into main

* changes:
  Shift interceptUnhandledKey Shortcuts to IMS
  Shift multi key combinations to IMS from PWM
  Separate KeyGestures controlled in IMS and PWM to fix state issues
parents 999765ce 45f2a965
Loading
Loading
Loading
Loading
+78 −44
Original line number Diff line number Diff line
@@ -48,49 +48,57 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL = 8;
    public static final int KEY_GESTURE_TYPE_TOGGLE_TASKBAR = 9;
    public static final int KEY_GESTURE_TYPE_TAKE_SCREENSHOT = 10;
    public static final int KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER = 11;
    public static final int KEY_GESTURE_TYPE_BRIGHTNESS_UP = 12;
    public static final int KEY_GESTURE_TYPE_BRIGHTNESS_DOWN = 13;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_UP = 14;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_DOWN = 15;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_TOGGLE = 16;
    public static final int KEY_GESTURE_TYPE_VOLUME_UP = 17;
    public static final int KEY_GESTURE_TYPE_VOLUME_DOWN = 18;
    public static final int KEY_GESTURE_TYPE_VOLUME_MUTE = 19;
    public static final int KEY_GESTURE_TYPE_ALL_APPS = 20;
    public static final int KEY_GESTURE_TYPE_LAUNCH_SEARCH = 21;
    public static final int KEY_GESTURE_TYPE_LANGUAGE_SWITCH = 22;
    public static final int KEY_GESTURE_TYPE_ACCESSIBILITY_ALL_APPS = 23;
    public static final int KEY_GESTURE_TYPE_TOGGLE_CAPS_LOCK = 24;
    public static final int KEY_GESTURE_TYPE_SYSTEM_MUTE = 25;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT = 26;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT = 27;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT = 28;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT = 29;
    public static final int KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT = 30;
    public static final int KEY_GESTURE_TYPE_LOCK_SCREEN = 31;
    public static final int KEY_GESTURE_TYPE_OPEN_NOTES = 32;
    public static final int KEY_GESTURE_TYPE_TOGGLE_POWER = 33;
    public static final int KEY_GESTURE_TYPE_SYSTEM_NAVIGATION = 34;
    public static final int KEY_GESTURE_TYPE_SLEEP = 35;
    public static final int KEY_GESTURE_TYPE_WAKEUP = 36;
    public static final int KEY_GESTURE_TYPE_MEDIA_KEY = 37;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_BROWSER = 38;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_EMAIL = 39;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CONTACTS = 40;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALENDAR = 41;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALCULATOR = 42;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MUSIC = 43;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MAPS = 44;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MESSAGING = 45;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_GALLERY = 46;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FILES = 47;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_WEATHER = 48;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FITNESS = 49;
    public static final int KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME = 50;
    public static final int KEY_GESTURE_TYPE_DESKTOP_MODE = 51;
    public static final int KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION = 52;
    public static final int KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER = 53;
    public static final int KEY_GESTURE_TYPE_SCREENSHOT_CHORD = 11;
    public static final int KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER = 12;
    public static final int KEY_GESTURE_TYPE_BRIGHTNESS_UP = 13;
    public static final int KEY_GESTURE_TYPE_BRIGHTNESS_DOWN = 14;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_UP = 15;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_DOWN = 16;
    public static final int KEY_GESTURE_TYPE_KEYBOARD_BACKLIGHT_TOGGLE = 17;
    public static final int KEY_GESTURE_TYPE_VOLUME_UP = 18;
    public static final int KEY_GESTURE_TYPE_VOLUME_DOWN = 19;
    public static final int KEY_GESTURE_TYPE_VOLUME_MUTE = 20;
    public static final int KEY_GESTURE_TYPE_ALL_APPS = 21;
    public static final int KEY_GESTURE_TYPE_LAUNCH_SEARCH = 22;
    public static final int KEY_GESTURE_TYPE_LANGUAGE_SWITCH = 23;
    public static final int KEY_GESTURE_TYPE_ACCESSIBILITY_ALL_APPS = 24;
    public static final int KEY_GESTURE_TYPE_TOGGLE_CAPS_LOCK = 25;
    public static final int KEY_GESTURE_TYPE_SYSTEM_MUTE = 26;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT = 27;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT = 28;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT = 29;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT = 30;
    public static final int KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT = 31;
    public static final int KEY_GESTURE_TYPE_LOCK_SCREEN = 32;
    public static final int KEY_GESTURE_TYPE_OPEN_NOTES = 33;
    public static final int KEY_GESTURE_TYPE_TOGGLE_POWER = 34;
    public static final int KEY_GESTURE_TYPE_SYSTEM_NAVIGATION = 35;
    public static final int KEY_GESTURE_TYPE_SLEEP = 36;
    public static final int KEY_GESTURE_TYPE_WAKEUP = 37;
    public static final int KEY_GESTURE_TYPE_MEDIA_KEY = 38;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_BROWSER = 39;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_EMAIL = 40;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CONTACTS = 41;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALENDAR = 42;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALCULATOR = 43;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MUSIC = 44;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MAPS = 45;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MESSAGING = 46;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_GALLERY = 47;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FILES = 48;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_WEATHER = 49;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FITNESS = 50;
    public static final int KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME = 51;
    public static final int KEY_GESTURE_TYPE_DESKTOP_MODE = 52;
    public static final int KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION = 53;
    public static final int KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER = 54;
    public static final int KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD = 55;
    public static final int KEY_GESTURE_TYPE_RINGER_TOGGLE_CHORD = 56;
    public static final int KEY_GESTURE_TYPE_GLOBAL_ACTIONS = 57;
    public static final int KEY_GESTURE_TYPE_TV_ACCESSIBILITY_SHORTCUT_CHORD = 58;
    public static final int KEY_GESTURE_TYPE_TV_TRIGGER_BUG_REPORT = 59;
    public static final int KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT = 60;
    public static final int KEY_GESTURE_TYPE_CLOSE_ALL_DIALOGS = 61;

    public static final int FLAG_CANCELLED = 1;

@@ -116,6 +124,7 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL,
            KEY_GESTURE_TYPE_TOGGLE_TASKBAR,
            KEY_GESTURE_TYPE_TAKE_SCREENSHOT,
            KEY_GESTURE_TYPE_SCREENSHOT_CHORD,
            KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER,
            KEY_GESTURE_TYPE_BRIGHTNESS_UP,
            KEY_GESTURE_TYPE_BRIGHTNESS_DOWN,
@@ -158,7 +167,15 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME,
            KEY_GESTURE_TYPE_DESKTOP_MODE,
            KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION,
            KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER
            KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER,
            KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD,
            KEY_GESTURE_TYPE_RINGER_TOGGLE_CHORD,
            KEY_GESTURE_TYPE_GLOBAL_ACTIONS,
            KEY_GESTURE_TYPE_TV_ACCESSIBILITY_SHORTCUT_CHORD,
            KEY_GESTURE_TYPE_TV_TRIGGER_BUG_REPORT,
            KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT,
            KEY_GESTURE_TYPE_CLOSE_ALL_DIALOGS,

    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface KeyGestureType {
@@ -360,6 +377,7 @@ public final class KeyGestureEvent {
            case KEY_GESTURE_TYPE_TOGGLE_TASKBAR:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__TOGGLE_TASKBAR;
            case KEY_GESTURE_TYPE_TAKE_SCREENSHOT:
            case KEY_GESTURE_TYPE_SCREENSHOT_CHORD:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__TAKE_SCREENSHOT;
            case KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__OPEN_SHORTCUT_HELPER;
@@ -472,6 +490,8 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_TOGGLE_TASKBAR";
            case KEY_GESTURE_TYPE_TAKE_SCREENSHOT:
                return "KEY_GESTURE_TYPE_TAKE_SCREENSHOT";
            case KEY_GESTURE_TYPE_SCREENSHOT_CHORD:
                return "KEY_GESTURE_TYPE_SCREENSHOT_CHORD";
            case KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER:
                return "KEY_GESTURE_TYPE_OPEN_SHORTCUT_HELPER";
            case KEY_GESTURE_TYPE_BRIGHTNESS_UP:
@@ -558,6 +578,20 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION";
            case KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER:
                return "KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER";
            case KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD:
                return "KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD";
            case KEY_GESTURE_TYPE_RINGER_TOGGLE_CHORD:
                return "KEY_GESTURE_TYPE_RINGER_TOGGLE_CHORD";
            case KEY_GESTURE_TYPE_GLOBAL_ACTIONS:
                return "KEY_GESTURE_TYPE_GLOBAL_ACTIONS";
            case KEY_GESTURE_TYPE_TV_ACCESSIBILITY_SHORTCUT_CHORD:
                return "KEY_GESTURE_TYPE_TV_ACCESSIBILITY_SHORTCUT_CHORD";
            case KEY_GESTURE_TYPE_TV_TRIGGER_BUG_REPORT:
                return "KEY_GESTURE_TYPE_TV_TRIGGER_BUG_REPORT";
            case KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT:
                return "KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT";
            case KEY_GESTURE_TYPE_CLOSE_ALL_DIALOGS:
                return "KEY_GESTURE_TYPE_CLOSE_ALL_DIALOGS";
            default:
                return Integer.toHexString(value);
        }
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.view;

import static android.os.IInputConstants.POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY;
import static android.os.IInputConstants.POLICY_FLAG_KEY_GESTURE_TRIGGERED;

import android.annotation.IntDef;
import android.os.PowerManager;
@@ -35,6 +36,7 @@ public interface WindowManagerPolicyConstants {
    int FLAG_VIRTUAL = 0x00000002;

    int FLAG_INJECTED_FROM_ACCESSIBILITY = POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY;
    int FLAG_KEY_GESTURE_TRIGGERED = POLICY_FLAG_KEY_GESTURE_TRIGGERED;
    int FLAG_INJECTED = 0x01000000;
    int FLAG_TRUSTED = 0x02000000;
    int FLAG_FILTERED = 0x04000000;
+84 −8
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M

import static com.android.hardware.input.Flags.touchpadVisualizer;
import static com.android.hardware.input.Flags.useKeyGestureEventHandler;
import static com.android.server.policy.WindowManagerPolicy.ACTION_PASS_TO_USER;

import android.Manifest;
import android.annotation.EnforcePermission;
@@ -117,6 +118,7 @@ import android.view.SurfaceControl;
import android.view.VerifiedInputEvent;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.view.WindowManagerPolicyConstants;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;

@@ -325,6 +327,9 @@ public class InputManagerService extends IInputManager.Stub
    // Manages Sticky modifier state
    private final StickyModifierStateController mStickyModifierStateController;
    private final KeyGestureController mKeyGestureController;
    /** Fallback actions by key code */
    private final SparseArray<KeyCharacterMap.FallbackAction> mFallbackActions =
            new SparseArray<>();

    // Manages Keyboard microphone mute led
    private final KeyboardLedController mKeyboardLedController;
@@ -611,6 +616,7 @@ public class InputManagerService extends IInputManager.Stub
        mKeyRemapper.systemRunning();
        mPointerIconCache.systemRunning();
        mKeyboardGlyphManager.systemRunning();
        mKeyGestureController.systemRunning();

        initKeyGestures();
    }
@@ -2469,6 +2475,14 @@ public class InputManagerService extends IInputManager.Stub
                mFocusEventDebugView.reportKeyEvent(event);
            }
        }
        if (useKeyGestureEventHandler() && mKeyGestureController.interceptKeyBeforeQueueing(event,
                policyFlags)) {
            // If key gesture gets triggered, we send the event to policy with KEY_GESTURE flag
            // indicating, the event is used in triggering a key gesture. We can't block event
            // like Power or volume keys since policy might still want to handle it to change
            // certain states.
            policyFlags |= WindowManagerPolicyConstants.FLAG_KEY_GESTURE_TRIGGERED;
        }
        return mWindowManagerCallbacks.interceptKeyBeforeQueueing(event, policyFlags);
    }

@@ -2511,6 +2525,74 @@ public class InputManagerService extends IInputManager.Stub
                null, null, null) == PERMISSION_GRANTED;
    }

    // Native callback.
    @SuppressWarnings("unused")
    private KeyEvent dispatchUnhandledKey(IBinder focus, KeyEvent event, int policyFlags) {
        if (interceptUnhandledKey(event, focus)) {
            return null;
        }
        // TODO(b/358569822): Move fallback logic to KeyGestureController
        if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) != 0) {
            return null;
        }
        final KeyCharacterMap kcm = event.getKeyCharacterMap();
        final int keyCode = event.getKeyCode();
        final int metaState = event.getMetaState();
        final boolean initialDown = event.getAction() == KeyEvent.ACTION_DOWN
                && event.getRepeatCount() == 0;

        // Check for fallback actions specified by the key character map.
        final KeyCharacterMap.FallbackAction fallbackAction;
        if (initialDown) {
            fallbackAction = kcm.getFallbackAction(keyCode, metaState);
        } else {
            fallbackAction = mFallbackActions.get(keyCode);
        }

        if (fallbackAction == null) {
            return null;
        }
        KeyEvent fallbackEvent = null;
        final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
        fallbackEvent = KeyEvent.obtain(
                event.getDownTime(), event.getEventTime(),
                event.getAction(), fallbackAction.keyCode,
                event.getRepeatCount(), fallbackAction.metaState,
                event.getDeviceId(), event.getScanCode(),
                flags, event.getSource(), event.getDisplayId(), null);

        if (!interceptFallback(focus, fallbackEvent, policyFlags)) {
            fallbackEvent.recycle();
            fallbackEvent = null;
        }

        if (initialDown) {
            mFallbackActions.put(keyCode, fallbackAction);
        } else if (event.getAction() == KeyEvent.ACTION_UP) {
            mFallbackActions.remove(keyCode);
            fallbackAction.recycle();
        }
        return fallbackEvent;
    }

    private boolean interceptFallback(IBinder focusedToken, KeyEvent fallbackEvent,
            int policyFlags) {
        int actions = interceptKeyBeforeQueueing(fallbackEvent, policyFlags);
        if ((actions & ACTION_PASS_TO_USER) == 0) {
            return false;
        }
        long delayMillis = interceptKeyBeforeDispatching(focusedToken, fallbackEvent, policyFlags);
        return delayMillis == 0 && !interceptUnhandledKey(fallbackEvent, focusedToken);
    }

    private boolean interceptUnhandledKey(KeyEvent event, IBinder focus) {
        if (useKeyGestureEventHandler() && mKeyGestureController.interceptUnhandledKey(event,
                focus)) {
            return true;
        }
        return mWindowManagerCallbacks.interceptUnhandledKey(event, focus);
    }

    private void initKeyGestures() {
        if (!useKeyGestureEventHandler()) {
            return;
@@ -2564,12 +2646,6 @@ public class InputManagerService extends IInputManager.Stub
        });
    }

    // Native callback.
    @SuppressWarnings("unused")
    private KeyEvent dispatchUnhandledKey(IBinder focus, KeyEvent event, int policyFlags) {
        return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
    }

    // Native callback.
    @SuppressWarnings("unused")
    private void onPointerDownOutsideFocus(IBinder touchedToken) {
@@ -2986,9 +3062,9 @@ public class InputManagerService extends IInputManager.Stub
        long interceptKeyBeforeDispatching(IBinder token, KeyEvent event, int policyFlags);

        /**
         * Dispatch unhandled key
         * Intercept unhandled key
         */
        KeyEvent dispatchUnhandledKey(IBinder token, KeyEvent event, int policyFlags);
        boolean interceptUnhandledKey(KeyEvent event, IBinder token);

        int getPointerLayer();

+383 −3

File changed.

Preview size limit exceeded, changes collapsed.

+15 −15
Original line number Diff line number Diff line
@@ -65,21 +65,21 @@ public class KeyCombinationManager {
     *       };
     *  </pre>
     */
    abstract static class TwoKeysCombinationRule {
    public abstract static class TwoKeysCombinationRule {
        private int mKeyCode1;
        private int mKeyCode2;

        TwoKeysCombinationRule(int keyCode1, int keyCode2) {
        public TwoKeysCombinationRule(int keyCode1, int keyCode2) {
            mKeyCode1 = keyCode1;
            mKeyCode2 = keyCode2;
        }

        boolean preCondition() {
        public boolean preCondition() {
            return true;
        }

        boolean shouldInterceptKey(int keyCode) {
            return preCondition() && (keyCode == mKeyCode1 || keyCode == mKeyCode2);
            return (keyCode == mKeyCode1 || keyCode == mKeyCode2) && preCondition();
        }

        boolean shouldInterceptKeys(SparseLongArray downTimes) {
@@ -94,12 +94,12 @@ public class KeyCombinationManager {
        }

        // The excessive delay before it dispatching to client.
        long getKeyInterceptDelayMs() {
        public long getKeyInterceptDelayMs() {
            return COMBINE_KEY_DELAY_MILLIS;
        }

        abstract void execute();
        abstract void cancel();
        public abstract void execute();
        public abstract void cancel();

        @Override
        public String toString() {
@@ -128,18 +128,18 @@ public class KeyCombinationManager {
        }
    }

    KeyCombinationManager(Handler handler) {
    public KeyCombinationManager(Handler handler) {
        mHandler = handler;
    }

    void addRule(TwoKeysCombinationRule rule) {
    public void addRule(TwoKeysCombinationRule rule) {
        if (mRules.contains(rule)) {
            throw new IllegalArgumentException("Rule : " + rule + " already exists.");
        }
        mRules.add(rule);
    }

    void removeRule(TwoKeysCombinationRule rule) {
    public void removeRule(TwoKeysCombinationRule rule) {
        mRules.remove(rule);
    }

@@ -148,7 +148,7 @@ public class KeyCombinationManager {
     * to a window.
     * Return true if any active rule could be triggered by the key event, otherwise false.
     */
    boolean interceptKey(KeyEvent event, boolean interactive) {
    public boolean interceptKey(KeyEvent event, boolean interactive) {
        synchronized (mLock) {
            return interceptKeyLocked(event, interactive);
        }
@@ -226,7 +226,7 @@ public class KeyCombinationManager {
    /**
     * Return the interceptTimeout to tell InputDispatcher when is ready to deliver to window.
     */
    long getKeyInterceptTimeout(int keyCode) {
    public long getKeyInterceptTimeout(int keyCode) {
        synchronized (mLock) {
            if (mDownTimes.get(keyCode) == 0) {
                return 0;
@@ -246,7 +246,7 @@ public class KeyCombinationManager {
    /**
     * True if the key event had been handled.
     */
    boolean isKeyConsumed(KeyEvent event) {
    public boolean isKeyConsumed(KeyEvent event) {
        synchronized (mLock) {
            if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) != 0) {
                return false;
@@ -258,7 +258,7 @@ public class KeyCombinationManager {
    /**
     * True if power key is the candidate.
     */
    boolean isPowerKeyIntercepted() {
    public boolean isPowerKeyIntercepted() {
        synchronized (mLock) {
            if (forAllActiveRules((rule) -> rule.shouldInterceptKey(KEYCODE_POWER))) {
                // return false if only if power key pressed.
@@ -294,7 +294,7 @@ public class KeyCombinationManager {
        return false;
    }

    void dump(String prefix, PrintWriter pw) {
    public void dump(String prefix, PrintWriter pw) {
        pw.println(prefix + "KeyCombination rules:");
        forAllRules(mRules, (rule)-> {
            pw.println(prefix + "  " + rule);
Loading