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

Commit 61430cbb authored by Alexandra-Mara Smau's avatar Alexandra-Mara Smau
Browse files

Add configurable behavior for short press of the settings button.

This is necessary because pressing the setting button must trigger the toggle of the notification panel for Google TV users. Facilitates logging of the corresponding KEYCODE_SETTINGS system event.

Test: atest ShortcutLoggingTests
Bug: b/269792324
Change-Id: I197826503bace4e890428554d58c831226e44035
parent 1f81948b
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
@@ -612,6 +617,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;

@@ -2768,6 +2776,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() {
@@ -3634,6 +3649,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)) {
@@ -6273,6 +6297,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);
@@ -6471,6 +6498,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();
@@ -329,4 +341,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
@@ -372,6 +372,10 @@ class TestPhoneWindowManager {
        mPhoneWindowManager.mDoubleTapOnHomeBehavior = behavior;
    }

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

    void overrideCanStartDreaming(boolean canDream) {
        doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
    }
@@ -477,6 +481,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();
    }