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

Commit 55307861 authored by Alexandra-Mara Smau's avatar Alexandra-Mara Smau Committed by Android (Google) Code Review
Browse files

Merge "Add configurable behavior for short press of the settings button." into main

parents c41764f9 61430cbb
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1151,6 +1151,14 @@
    <!-- Allows activities to be launched on a long press on power during device setup. -->
    <bool name="config_allowStartActivityForLongPressOnPowerInSetup">false</bool>

    <!-- Control the behavior when the user short presses the settings button.
            0 - Nothing
            1 - Launch notification panel
         This needs to match the constants in
         com/android/server/policy/PhoneWindowManager.java
    -->
    <integer name="config_shortPressOnSettingsBehavior">0</integer>

    <!-- Control the behavior when the user short presses the power button.
            0 - Nothing
            1 - Go to sleep (doze)
+1 −0
Original line number Diff line number Diff line
@@ -1816,6 +1816,7 @@
  <java-symbol type="integer" name="config_lidNavigationAccessibility" />
  <java-symbol type="integer" name="config_lidOpenRotation" />
  <java-symbol type="integer" name="config_longPressOnHomeBehavior" />
  <java-symbol type="integer" name="config_shortPressOnSettingsBehavior" />
  <java-symbol type="layout" name="global_actions" />
  <java-symbol type="layout" name="global_actions_item" />
  <java-symbol type="layout" name="global_actions_silent_mode" />
+38 −0
Original line number Diff line number Diff line
@@ -333,6 +333,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP = 0;
    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME = 1;

    // must match: config_shortPressOnSettingsBehavior in config.xml
    static final int SHORT_PRESS_SETTINGS_NOTHING = 0;
    static final int SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL = 1;
    static final int LAST_SHORT_PRESS_SETTINGS_BEHAVIOR = SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL;

    static final int PENDING_KEY_NULL = -1;

    // Must match: config_shortPressOnStemPrimaryBehavior in config.xml
@@ -611,6 +616,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    // What we do when the user double-taps on home
    int mDoubleTapOnHomeBehavior;

    // What we do when the user presses on settings
    int mShortPressOnSettingsBehavior;

    // Must match config_primaryShortPressTargetActivity in config.xml
    ComponentName mPrimaryShortPressTargetActivity;

@@ -2766,6 +2774,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
            mShortPressOnWindowBehavior = SHORT_PRESS_WINDOW_PICTURE_IN_PICTURE;
        }

        mShortPressOnSettingsBehavior = res.getInteger(
                com.android.internal.R.integer.config_shortPressOnSettingsBehavior);
        if (mShortPressOnSettingsBehavior < SHORT_PRESS_SETTINGS_NOTHING
                || mShortPressOnSettingsBehavior > LAST_SHORT_PRESS_SETTINGS_BEHAVIOR) {
            mShortPressOnSettingsBehavior = SHORT_PRESS_SETTINGS_NOTHING;
        }
    }

    private void updateSettings() {
@@ -3632,6 +3647,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                Slog.wtf(TAG, "KEYCODE_STYLUS_BUTTON_* should be handled in"
                        + " interceptKeyBeforeQueueing");
                return true;
            case KeyEvent.KEYCODE_SETTINGS:
                if (mShortPressOnSettingsBehavior == SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL) {
                    if (!down) {
                        toggleNotificationPanel();
                        logKeyboardSystemsEvent(event, KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL);
                    }
                    return true;
                }
                break;
        }
        if (isValidGlobalKey(keyCode)
                && mGlobalKeyManager.handleGlobalKey(mContext, keyCode, event)) {
@@ -6272,6 +6296,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                pw.print("mLongPressOnPowerBehavior=");
                pw.println(longPressOnPowerBehaviorToString(mLongPressOnPowerBehavior));
        pw.print(prefix);
        pw.print("mShortPressOnSettingsBehavior=");
        pw.println(shortPressOnSettingsBehaviorToString(mShortPressOnSettingsBehavior));
        pw.print(prefix);
        pw.print("mLongPressOnPowerAssistantTimeoutMs=");
        pw.println(mLongPressOnPowerAssistantTimeoutMs);
        pw.print(prefix);
@@ -6470,6 +6497,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private static String shortPressOnSettingsBehaviorToString(int behavior) {
        switch (behavior) {
            case SHORT_PRESS_SETTINGS_NOTHING:
                return "SHORT_PRESS_SETTINGS_NOTHING";
            case SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL:
                return "SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL";
            default:
                return Integer.toString(behavior);
        }
    }

    private static String veryLongPressOnPowerBehaviorToString(int behavior) {
        switch (behavior) {
            case VERY_LONG_PRESS_POWER_NOTHING:
+23 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.policy.PhoneWindowManager.DOUBLE_TAP_HOME_RECEN
import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ALL_APPS;
import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ASSIST;
import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_NOTIFICATION_PANEL;
import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL;

import android.platform.test.annotations.Presubmit;
import android.view.KeyEvent;
@@ -284,6 +285,16 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase {
                        KeyboardLogEvent.APP_SWITCH, KeyEvent.KEYCODE_H, META_ON}};
    }

    @Keep
    private static Object[][] shortPressOnSettingsTestArguments() {
        // testName, testKeys, shortPressOnSettingsBehavior, expectedLogEvent, expectedKey,
        // expectedModifierState
        return new Object[][]{
                {"SETTINGS key -> Toggle Notification panel", new int[]{KeyEvent.KEYCODE_SETTINGS},
                        SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL,
                        KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL, KeyEvent.KEYCODE_SETTINGS, 0}};
    }

    @Before
    public void setUp() {
        setUpPhoneWindowManager(/*supportSettingsUpdate*/ true);
@@ -294,6 +305,7 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase {
        mPhoneWindowManager.overrideEnableBugReportTrigger(true);
        mPhoneWindowManager.overrideStatusBarManagerInternal();
        mPhoneWindowManager.overrideStartActivity();
        mPhoneWindowManager.overrideSendBroadcast();
        mPhoneWindowManager.overrideUserSetupComplete();
        mPhoneWindowManager.setupAssistForLaunch();
        mPhoneWindowManager.overrideTogglePanel();
@@ -330,4 +342,15 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase {
        mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent,
                expectedKey, expectedModifierState, "Failed while executing " + testName);
    }

    @Test
    @Parameters(method = "shortPressOnSettingsTestArguments")
    public void testShortPressOnSettings(String testName, int[] testKeys,
            int shortPressOnSettingsBehavior, KeyboardLogEvent expectedLogEvent, int expectedKey,
            int expectedModifierState) {
        mPhoneWindowManager.overrideShortPressOnSettingsBehavior(shortPressOnSettingsBehavior);
        sendKeyCombination(testKeys, 0 /* duration */);
        mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent,
                expectedKey, expectedModifierState, "Failed while executing " + testName);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -375,6 +375,10 @@ class TestPhoneWindowManager {
        mPhoneWindowManager.mDoubleTapOnHomeBehavior = behavior;
    }

    void overrideShortPressOnSettingsBehavior(int behavior) {
        mPhoneWindowManager.mShortPressOnSettingsBehavior = behavior;
    }

    void overrideCanStartDreaming(boolean canDream) {
        doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
    }
@@ -484,6 +488,10 @@ class TestPhoneWindowManager {
        doNothing().when(mContext).startActivityAsUser(any(), any(), any());
    }

    void overrideSendBroadcast() {
        doNothing().when(mContext).sendBroadcastAsUser(any(), any(), any());
    }

    void overrideUserSetupComplete() {
        doReturn(true).when(mPhoneWindowManager).isUserSetupComplete();
    }