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

Commit aa1f3a82 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

Merge remote-tracking branch 'origin/lineage-23.2' into a16.2

parents 13d218b2 ee998e07
Loading
Loading
Loading
Loading
+66 −24
Original line number Diff line number Diff line
@@ -247,6 +247,9 @@ final class KeyGestureController {
    // Click volume down + power for partial screenshot
    private boolean mClickPartialScreenshot;

    // Volume Up and Down to mute on Android TV
    boolean mVolUpAndDownMute;

    // List of currently registered key gesture event listeners keyed by process pid
    @GuardedBy("mKeyGestureEventListenerRecords")
    private final SparseArray<KeyGestureEventListenerRecord>
@@ -327,6 +330,9 @@ final class KeyGestureController {
        mClickPartialScreenshot = LineageSettings.System.getIntForUser(resolver,
                LineageSettings.System.CLICK_PARTIAL_SCREENSHOT, 0,
                UserHandle.USER_CURRENT) == 1;
        mVolUpAndDownMute = LineageSettings.System.getIntForUser(resolver,
                LineageSettings.System.VOLUME_UP_AND_DOWN_MUTE, 0,
                UserHandle.USER_CURRENT) == 1;
    }

    private void initKeyCombinationRules() {
@@ -385,19 +391,50 @@ final class KeyGestureController {
            }
        }

        if (mHasFeatureLeanback) {
            mKeyCombinationManager.addRule(
                    new KeyCombinationManager.TwoKeysCombinationRule(KeyEvent.KEYCODE_VOLUME_DOWN,
                            KeyEvent.KEYCODE_VOLUME_UP) {
                        @Override
                        public boolean preCondition() {
                        return mAccessibilityShortcutController.isAccessibilityShortcutAvailable(
                            return mVolUpAndDownMute;
                        }
                        @Override
                        public void execute() {
                            InputManager im = mContext.getSystemService(InputManager.class);
                            long now = SystemClock.uptimeMillis();
                            final KeyEvent downEvent = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
                                    KeyEvent.KEYCODE_VOLUME_MUTE, 0, 0,
                                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FROM_SYSTEM,
                                    InputDevice.SOURCE_KEYBOARD);
                            final KeyEvent upEvent = KeyEvent.changeAction(downEvent,
                                    KeyEvent.ACTION_UP);

                            im.injectInputEvent(downEvent,
                                    InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
                            im.injectInputEvent(upEvent,
                                    InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
                        }
                        @Override
                        public void cancel() {
                        }
                    });
        } else {
            mKeyCombinationManager.addRule(
                    new KeyCombinationManager.TwoKeysCombinationRule(KeyEvent.KEYCODE_VOLUME_DOWN,
                            KeyEvent.KEYCODE_VOLUME_UP) {
                        @Override
                        public boolean preCondition() {
                            return mAccessibilityShortcutController
                                    .isAccessibilityShortcutAvailable(
                                    mWindowManagerCallbacks.isKeyguardLocked(DEFAULT_DISPLAY));
                        }

                        @Override
                        public void execute() {
                            handleMultiKeyGesture(
                                new int[]{KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP},
                                    new int[]{KeyEvent.KEYCODE_VOLUME_DOWN,
                                            KeyEvent.KEYCODE_VOLUME_UP},
                                    KeyGestureEvent.KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD,
                                    KeyGestureEvent.ACTION_GESTURE_START, 0);
                        }
@@ -405,12 +442,14 @@ final class KeyGestureController {
                        @Override
                        public void cancel() {
                            handleMultiKeyGesture(
                                new int[]{KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP},
                                    new int[]{KeyEvent.KEYCODE_VOLUME_DOWN,
                                            KeyEvent.KEYCODE_VOLUME_UP},
                                    KeyGestureEvent.KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT_CHORD,
                                    KeyGestureEvent.ACTION_GESTURE_COMPLETE,
                                    KeyGestureEvent.FLAG_CANCELLED);
                        }
                    });
        }

        // Volume up + power can either be the "ringer toggle chord" or as another way to
        // launch GlobalActions. This behavior can change at runtime so we must check behavior
@@ -1680,6 +1719,9 @@ final class KeyGestureController {
            resolver.registerContentObserver(LineageSettings.System.getUriFor(
                            LineageSettings.System.CLICK_PARTIAL_SCREENSHOT), false, this,
                    UserHandle.USER_ALL);
            resolver.registerContentObserver(LineageSettings.System.getUriFor(
                    LineageSettings.System.VOLUME_UP_AND_DOWN_MUTE), false, this,
                    UserHandle.USER_ALL);
        }

        @Override