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

Commit 2d922ed7 authored by LuK1337's avatar LuK1337 Committed by Bruno Martins
Browse files

PhoneWindowManager: Add support for back key long press customization

Change-Id: I28762c88d4777f8dbc8f213a2522875c3428fdab
parent fec75a24
Loading
Loading
Loading
Loading
+24 −19
Original line number Diff line number Diff line
@@ -585,6 +585,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    boolean mPendingCapsLockToggle;

    // Tracks user-customisable behavior for certain key events
    private Action mBackLongPressAction;
    private Action mHomeLongPressAction;
    private Action mHomeDoubleTapAction;
    private Action mMenuPressAction;
@@ -858,6 +859,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            resolver.registerContentObserver(LineageSettings.System.getUriFor(
                    LineageSettings.System.CLICK_PARTIAL_SCREENSHOT), false, this,
                    UserHandle.USER_ALL);
            resolver.registerContentObserver(LineageSettings.System.getUriFor(
                    LineageSettings.System.KEY_BACK_LONG_PRESS_ACTION), false, this,
                    UserHandle.USER_ALL);
            resolver.registerContentObserver(LineageSettings.System.getUriFor(
                    LineageSettings.System.KEY_HOME_LONG_PRESS_ACTION), false, this,
                    UserHandle.USER_ALL);
@@ -1375,13 +1379,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    private void backLongPress() {
        mBackKeyHandled = true;

        switch (mLongPressOnBackBehavior) {
            case LONG_PRESS_BACK_NOTHING:
                break;
            case LONG_PRESS_BACK_GO_TO_VOICE_ASSIST:
                launchVoiceAssist(false /* allowDuringSetup */);
                break;
        }
        long now = SystemClock.uptimeMillis();
        KeyEvent event = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
                KEYCODE_BACK, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                KeyEvent.FLAG_FROM_SYSTEM, InputDevice.SOURCE_KEYBOARD);

        performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
                "Back - Long Press");
        performKeyAction(mBackLongPressAction, event);
    }

    private void accessibilityShortcutActivated() {
@@ -1622,7 +1627,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    private boolean hasLongPressOnBackBehavior() {
        return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING;
        return mBackLongPressAction != Action.NOTHING;
    }

    private boolean hasLongPressOnStemPrimaryBehavior() {
@@ -2617,18 +2622,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            powerKeyGestures |= KEY_LONGPRESS;
        }
        mSingleKeyGestureDetector.addRule(new PowerKeyRule(powerKeyGestures));

        if (hasLongPressOnBackBehavior()) {
        mSingleKeyGestureDetector.addRule(new BackKeyRule(KEY_LONGPRESS));
    }
        if (hasStemPrimaryBehavior()) {
            int stemPrimaryKeyGestures = 0;
            if (hasLongPressOnStemPrimaryBehavior()) {
                stemPrimaryKeyGestures |= KEY_LONGPRESS;
            }
            mSingleKeyGestureDetector.addRule(new StemPrimaryKeyRule(stemPrimaryKeyGestures));
        }
    }

    private void updateKeyAssignments() {
        int activeHardwareKeys = mDeviceHardwareKeys;
@@ -2656,6 +2651,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mAppSwitchLongPressAction = Action.fromIntSafe(res.getInteger(
                org.lineageos.platform.internal.R.integer.config_longPressOnAppSwitchBehavior));

        mBackLongPressAction = Action.fromIntSafe(res.getInteger(
                org.lineageos.platform.internal.R.integer.config_longPressOnBackBehavior));
        if (mBackLongPressAction.ordinal() > Action.SLEEP.ordinal()) {
            mBackLongPressAction = Action.NOTHING;
        }

        mBackLongPressAction = Action.fromSettings(resolver,
                LineageSettings.System.KEY_BACK_LONG_PRESS_ACTION,
                mBackLongPressAction);

        mHomeLongPressAction = Action.fromIntSafe(res.getInteger(
                org.lineageos.platform.internal.R.integer.config_longPressOnHomeBehavior));
        if (mHomeLongPressAction.ordinal() > Action.SLEEP.ordinal()) {