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

Commit 9779e128 authored by Filip Gruszczynski's avatar Filip Gruszczynski
Browse files

Option for going home when going to sleep for devices without physical button.

Bug: 19623388
Change-Id: Iec16f83c64646ded12ec97d4b540510b7f9dfd47
parent 5be1afed
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -363,6 +363,12 @@ public final class PowerManager {
     */
    public static final int GO_TO_SLEEP_REASON_HDMI = 5;

    /**
     * Go to sleep reason code: Going to sleep due to the sleep button being pressed.
     * @hide
     */
    public static final int GO_TO_SLEEP_REASON_SLEEP_BUTTON = 6;

    /**
     * Go to sleep flag: Skip dozing state and directly go to full sleep.
     * @hide
+6 −0
Original line number Diff line number Diff line
@@ -671,6 +671,12 @@
    -->
    <integer name="config_triplePressOnPowerBehavior">0</integer>

    <!-- Control the behavior when the user presses the sleep button.
            0 - Go to sleep (doze)
            1 - Go to sleep (doze) and go home
    -->
    <integer name="config_shortPressOnSleepBehavior">0</integer>

    <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] -->
    <string name="widget_default_package_name"></string>

+1 −0
Original line number Diff line number Diff line
@@ -368,6 +368,7 @@
  <java-symbol type="integer" name="config_shortPressOnPowerBehavior" />
  <java-symbol type="integer" name="config_toastDefaultGravity" />
  <java-symbol type="integer" name="config_triplePressOnPowerBehavior" />
  <java-symbol type="integer" name="config_shortPressOnSleepBehavior" />
  <java-symbol type="integer" name="config_wifi_framework_scan_interval" />
  <java-symbol type="integer" name="config_wifi_supplicant_scan_interval" />
  <java-symbol type="integer" name="config_wifi_scan_interval_p2p_connected" />
+37 −10
Original line number Diff line number Diff line
@@ -175,6 +175,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final int DOUBLE_TAP_HOME_NOTHING = 0;
    static final int DOUBLE_TAP_HOME_RECENT_SYSTEM_UI = 1;

    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP = 0;
    static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME = 1;

    static final int APPLICATION_MEDIA_SUBLAYER = -2;
    static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
    static final int APPLICATION_PANEL_SUBLAYER = 1;
@@ -370,6 +373,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    int mLongPressOnPowerBehavior;
    int mDoublePressOnPowerBehavior;
    int mTriplePressOnPowerBehavior;
    int mShortPressOnSleepBehavior;
    boolean mAwake;
    boolean mScreenOnEarly;
    boolean mScreenOnFully;
@@ -1059,6 +1063,20 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private void sleepPress(KeyEvent event) {
        switch (mShortPressOnSleepBehavior) {
            case SHORT_PRESS_SLEEP_GO_TO_SLEEP:
                mPowerManager.goToSleep(event.getEventTime(),
                        PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0);
                break;
            case SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME:
                launchHomeFromHotKey(false /* awakenDreams */);
                mPowerManager.goToSleep(event.getEventTime(),
                        PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON, 0);
                break;
        }
    }

    private int getResolvedLongPressOnPowerBehavior() {
        if (FactoryTest.isLongPressOnPowerOffEnabled()) {
            return LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM;
@@ -1324,6 +1342,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                com.android.internal.R.integer.config_doublePressOnPowerBehavior);
        mTriplePressOnPowerBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_triplePressOnPowerBehavior);
        mShortPressOnSleepBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_shortPressOnSleepBehavior);

        readConfigurationDependentBehaviors();

@@ -3035,11 +3055,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    void launchHomeFromHotKey() {
        launchHomeFromHotKey(true /* awakenFromDreams */);
    }

    /**
     * A home key -> launch home action was detected.  Take the appropriate action
     * given the situation with the keyguard.
     */
    void launchHomeFromHotKey() {
    void launchHomeFromHotKey(final boolean awakenFromDreams) {
        if (isKeyguardShowingAndNotOccluded()) {
            // don't launch home if keyguard showing
        } else if (!mHideLockScreen && mKeyguardDelegate.isInputRestricted()) {
@@ -3054,7 +3078,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                        } catch (RemoteException e) {
                        }
                        sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
                        startDockOrHome(true /*fromHomeKey*/);
                        startDockOrHome(true /*fromHomeKey*/, awakenFromDreams);
                    }
                }
            });
@@ -3066,13 +3090,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            }
            if (mRecentsVisible) {
                // Hide Recents and notify it to launch Home
                if (awakenFromDreams) {
                    awakenDreams();
                }
                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
                hideRecentApps(false, true);
            } else {
                // Otherwise, just launch Home
                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_HOME_KEY);
                startDockOrHome(true /*fromHomeKey*/);
                startDockOrHome(true /*fromHomeKey*/, awakenFromDreams);
            }
        }
    }
@@ -4729,12 +4755,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {

            case KeyEvent.KEYCODE_SLEEP: {
                result &= ~ACTION_PASS_TO_USER;
                isWakeKey = false;
                if (!mPowerManager.isInteractive()) {
                    useHapticFeedback = false; // suppress feedback if already non-interactive
                }
                mPowerManager.goToSleep(event.getEventTime(),
                        PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
                isWakeKey = false;
                sleepPress(event);
                break;
            }

@@ -5884,8 +5909,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        return null;
    }

    void startDockOrHome(boolean fromHomeKey) {
    void startDockOrHome(boolean fromHomeKey, boolean awakenFromDreams) {
        if (awakenFromDreams) {
            awakenDreams();
        }

        Intent dock = createHomeDockIntent();
        if (dock != null) {
@@ -5923,7 +5950,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            } catch (RemoteException e) {
            }
            sendCloseSystemWindows();
            startDockOrHome(false /*fromHomeKey*/);
            startDockOrHome(false /*fromHomeKey*/, true /* awakenFromDreams */);
        } else {
            // This code brings home to the front or, if it is already
            // at the front, puts the device to sleep.
+3 −0
Original line number Diff line number Diff line
@@ -1080,6 +1080,9 @@ public final class PowerManagerService extends SystemService
                case PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON:
                    Slog.i(TAG, "Going to sleep due to power button (uid " + uid +")...");
                    break;
                case PowerManager.GO_TO_SLEEP_REASON_SLEEP_BUTTON:
                    Slog.i(TAG, "Going to sleep due to sleep button (uid " + uid +")...");
                    break;
                case PowerManager.GO_TO_SLEEP_REASON_HDMI:
                    Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")...");
                    break;