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

Commit 5b89de1e authored by Danny Baumann's avatar Danny Baumann
Browse files

policy: fix menu key for devices with no physical menu key

Initialize key behaviour correctly for the case where the respective key
isn't present in hardware.

Change-Id: I424f879dcf5e09c0897d7ebf7646efe36661d108
parent d5f0adbf
Loading
Loading
Loading
Loading
+68 −92
Original line number Diff line number Diff line
@@ -322,10 +322,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    int mBackKillTimeout;
    int mPointerLocationMode = 0; // guarded by mLock
    int mDeviceHardwareKeys;
    boolean mHasHomeKey;
    boolean mHasMenuKey;
    boolean mHasAssistKey;
    boolean mHasAppSwitchKey;
    boolean mHasMenuKeyEnabled;

    // The last window we were told about in focusChanged.
@@ -1142,11 +1138,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                com.android.internal.R.integer.config_backKillTimeout);
        mDeviceHardwareKeys = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_deviceHardwareKeys);
        mHasHomeKey = ((mDeviceHardwareKeys & KEY_MASK_HOME) != 0);
        mHasMenuKey = ((mDeviceHardwareKeys & KEY_MASK_MENU) != 0);
        mHasAssistKey = ((mDeviceHardwareKeys & KEY_MASK_ASSIST) != 0);
        mHasAppSwitchKey = ((mDeviceHardwareKeys & KEY_MASK_APP_SWITCH) != 0);
        readConfigurationDependentBehaviors();

        updateKeyAssignments();

        // register for dock events
        IntentFilter filter = new IntentFilter();
@@ -1206,12 +1199,25 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    /**
     * Read values from config.xml that may be overridden depending on
     * the configuration of the device.
     * eg. Disable long press on home goes to recents on sw600dp.
     */
    private void readConfigurationDependentBehaviors() {
    private void updateKeyAssignments() {
        final boolean hasMenu = (mDeviceHardwareKeys & KEY_MASK_MENU) != 0;
        final boolean hasHome = (mDeviceHardwareKeys & KEY_MASK_HOME) != 0;
        final boolean hasAssist = (mDeviceHardwareKeys & KEY_MASK_ASSIST) != 0;
        final boolean hasAppSwitch = (mDeviceHardwareKeys & KEY_MASK_APP_SWITCH) != 0;
        final ContentResolver resolver = mContext.getContentResolver();

        // initialize all assignments to sane defaults
        mPressOnMenuBehavior = KEY_ACTION_MENU;
        if (!hasMenu || hasAssist) {
            mLongPressOnMenuBehavior = KEY_ACTION_NOTHING;
        } else {
            mLongPressOnMenuBehavior = KEY_ACTION_SEARCH;
        }
        mPressOnAssistBehavior = KEY_ACTION_SEARCH;
        mLongPressOnAssistBehavior = KEY_ACTION_VOICE_SEARCH;
        mPressOnAppSwitchBehavior = KEY_ACTION_APP_SWITCH;
        mLongPressOnAppSwitchBehavior = KEY_ACTION_NOTHING;

        mLongPressOnHomeBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_longPressOnHomeBehavior);
        if (mLongPressOnHomeBehavior < KEY_ACTION_NOTHING ||
@@ -1225,6 +1231,52 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                mDoubleTapOnHomeBehavior > KEY_ACTION_IN_APP_SEARCH) {
            mDoubleTapOnHomeBehavior = KEY_ACTION_NOTHING;
        }

        boolean keyRebindingEnabled = Settings.System.getIntForUser(resolver,
                Settings.System.HARDWARE_KEY_REBINDING, 0, UserHandle.USER_CURRENT) == 1;
        if (!keyRebindingEnabled) {
            mHasMenuKeyEnabled = hasMenu;
            return;
        }

        if (hasHome) {
            mLongPressOnHomeBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_HOME_LONG_PRESS_ACTION,
                    hasAppSwitch ? KEY_ACTION_NOTHING : KEY_ACTION_APP_SWITCH,
                    UserHandle.USER_CURRENT);
            mHasMenuKeyEnabled = mLongPressOnHomeBehavior == KEY_ACTION_MENU;
        }
        if (hasMenu) {
            mPressOnMenuBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_MENU_ACTION,
                    KEY_ACTION_MENU, UserHandle.USER_CURRENT);
            mLongPressOnMenuBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_MENU_LONG_PRESS_ACTION,
                    hasAssist ? KEY_ACTION_NOTHING : KEY_ACTION_SEARCH,
                    UserHandle.USER_CURRENT);
            mHasMenuKeyEnabled |= mPressOnMenuBehavior == KEY_ACTION_MENU
                    || mLongPressOnMenuBehavior == KEY_ACTION_MENU;
        }
        if (hasAssist) {
            mPressOnAssistBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_ASSIST_ACTION,
                    KEY_ACTION_SEARCH, UserHandle.USER_CURRENT);
            mLongPressOnAssistBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_ASSIST_LONG_PRESS_ACTION,
                    KEY_ACTION_VOICE_SEARCH, UserHandle.USER_CURRENT);
            mHasMenuKeyEnabled |= mPressOnAssistBehavior == KEY_ACTION_MENU
                    || mLongPressOnAssistBehavior == KEY_ACTION_MENU;
        }
        if (hasAppSwitch) {
            mPressOnAppSwitchBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_APP_SWITCH_ACTION,
                    KEY_ACTION_APP_SWITCH, UserHandle.USER_CURRENT);
            mLongPressOnAppSwitchBehavior = Settings.System.getIntForUser(resolver,
                    Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION,
                    KEY_ACTION_NOTHING, UserHandle.USER_CURRENT);
            mHasMenuKeyEnabled |= mPressOnAppSwitchBehavior == KEY_ACTION_MENU
                    || mLongPressOnAppSwitchBehavior == KEY_ACTION_MENU;
        }
    }

    @Override
@@ -1375,82 +1427,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            mVolBtnMusicControls = (Settings.System.getIntForUser(resolver,
                    Settings.System.VOLBTN_MUSIC_CONTROLS, 1, UserHandle.USER_CURRENT) == 1);

            boolean keyRebindingEnabled = Settings.System.getIntForUser(resolver,
                    Settings.System.HARDWARE_KEY_REBINDING, 0, UserHandle.USER_CURRENT) == 1;

            mHasMenuKeyEnabled = false;

            if (!keyRebindingEnabled) {
                // Grab default configuration for home key
                readConfigurationDependentBehaviors();

                if (mHasMenuKey) {
                    mPressOnMenuBehavior = KEY_ACTION_MENU;
                    if (mHasAssistKey) {
                        mLongPressOnMenuBehavior = KEY_ACTION_NOTHING;
                    } else {
                        mLongPressOnMenuBehavior = KEY_ACTION_SEARCH;
                    }
                    mHasMenuKeyEnabled = true;
                }
                if (mHasAssistKey) {
                    mPressOnAssistBehavior = KEY_ACTION_SEARCH;
                    mLongPressOnAssistBehavior = KEY_ACTION_VOICE_SEARCH;
                }
                if (mHasAppSwitchKey) {
                    mPressOnAppSwitchBehavior = KEY_ACTION_APP_SWITCH;
                    mLongPressOnAppSwitchBehavior = KEY_ACTION_NOTHING;
                }
            } else {
                if (mHasHomeKey) {
                    if (mHasAppSwitchKey) {
                        mLongPressOnHomeBehavior = Settings.System.getIntForUser(resolver,
                                Settings.System.KEY_HOME_LONG_PRESS_ACTION,
                                KEY_ACTION_NOTHING, UserHandle.USER_CURRENT);
                    } else {
                        mLongPressOnHomeBehavior = Settings.System.getIntForUser(resolver,
                                Settings.System.KEY_HOME_LONG_PRESS_ACTION,
                                KEY_ACTION_APP_SWITCH, UserHandle.USER_CURRENT);
                    }
                    mHasMenuKeyEnabled = (mLongPressOnHomeBehavior == KEY_ACTION_MENU);
                }
                if (mHasMenuKey) {
                    mPressOnMenuBehavior = Settings.System.getIntForUser(resolver,
                            Settings.System.KEY_MENU_ACTION,
                            KEY_ACTION_MENU, UserHandle.USER_CURRENT);
                    if (mHasAssistKey) {
                        mLongPressOnMenuBehavior = Settings.System.getIntForUser(resolver,
                                Settings.System.KEY_MENU_LONG_PRESS_ACTION,
                                KEY_ACTION_NOTHING, UserHandle.USER_CURRENT);
                    } else {
                        mLongPressOnMenuBehavior = Settings.System.getIntForUser(resolver,
                                Settings.System.KEY_MENU_LONG_PRESS_ACTION,
                                KEY_ACTION_SEARCH, UserHandle.USER_CURRENT);
                    }
                    mHasMenuKeyEnabled |= (mPressOnMenuBehavior == KEY_ACTION_MENU) ||
                        (mLongPressOnMenuBehavior == KEY_ACTION_MENU);
                }
                if (mHasAssistKey) {
                    mPressOnAssistBehavior = Settings.System.getIntForUser(resolver,
                            Settings.System.KEY_ASSIST_ACTION,
                            KEY_ACTION_SEARCH, UserHandle.USER_CURRENT);
                    mLongPressOnAssistBehavior = Settings.System.getIntForUser(resolver,
                            Settings.System.KEY_ASSIST_LONG_PRESS_ACTION,
                            KEY_ACTION_VOICE_SEARCH, UserHandle.USER_CURRENT);
                    mHasMenuKeyEnabled |= (mPressOnAssistBehavior == KEY_ACTION_MENU) ||
                        (mLongPressOnAssistBehavior == KEY_ACTION_MENU);
                }
                if (mHasAppSwitchKey) {
                    mPressOnAppSwitchBehavior = Settings.System.getIntForUser(resolver,
                            Settings.System.KEY_APP_SWITCH_ACTION,
                            KEY_ACTION_APP_SWITCH, UserHandle.USER_CURRENT);
                    mLongPressOnAppSwitchBehavior = Settings.System.getIntForUser(resolver,
                            Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION,
                            KEY_ACTION_NOTHING, UserHandle.USER_CURRENT);
                    mHasMenuKeyEnabled |= (mPressOnAppSwitchBehavior == KEY_ACTION_MENU) ||
                        (mLongPressOnAppSwitchBehavior == KEY_ACTION_MENU);
                }
            }
            updateKeyAssignments();

            int expandedDesktopStyle = Settings.System.getIntForUser(resolver,
                    Settings.System.EXPANDED_DESKTOP_STYLE, 0, UserHandle.USER_CURRENT);
@@ -1714,7 +1691,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            int navigationPresence) {
        mHaveBuiltInKeyboard = (keyboardPresence & PRESENCE_INTERNAL) != 0;

        readConfigurationDependentBehaviors();
        readLidState();
        applyLidSwitchState();