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

Commit c6646b0c authored by Erik Pasternak's avatar Erik Pasternak Committed by Android Git Automerger
Browse files

am 739bf81d: am 4d82c46e: Merge "Implement auto-sleep functionality." into lmp-dev

* commit '739bf81d':
  Implement auto-sleep functionality.
parents b6ea4676 739bf81d
Loading
Loading
Loading
Loading
+20 −2
Original line number Original line Diff line number Diff line
@@ -2001,7 +2001,10 @@ public final class Settings {
        public static final String DIM_SCREEN = "dim_screen";
        public static final String DIM_SCREEN = "dim_screen";


        /**
        /**
         * The timeout before the screen turns off.
         * The amount of time in milliseconds before the device goes to sleep or begins
         * to dream after a period of inactivity.  This value is also known as the
         * user activity timeout period since the screen isn't necessarily turned off
         * when it expires.
         */
         */
        public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
        public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";


@@ -4816,6 +4819,20 @@ public final class Settings {
        public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
        public static final String USB_AUDIO_AUTOMATIC_ROUTING_DISABLED =
                "usb_audio_automatic_routing_disabled";
                "usb_audio_automatic_routing_disabled";


        /**
         * The timeout in milliseconds before the device fully goes to sleep after
         * a period of inactivity.  This value sets an upper bound on how long the device
         * will stay awake or dreaming without user activity.  It should generally
         * be longer than {@link #SCREEN_OFF_TIMEOUT} as otherwise the device
         * will sleep before it ever has a chance to dream.
         * <p>
         * Use -1 to disable this timeout.
         * </p>
         *
         * @hide
         */
        public static final String SLEEP_TIMEOUT = "sleep_timeout";

        /**
        /**
         * This are the settings to be backed up.
         * This are the settings to be backed up.
         *
         *
@@ -4865,7 +4882,8 @@ public final class Settings {
            MOUNT_UMS_AUTOSTART,
            MOUNT_UMS_AUTOSTART,
            MOUNT_UMS_PROMPT,
            MOUNT_UMS_PROMPT,
            MOUNT_UMS_NOTIFY_ENABLED,
            MOUNT_UMS_NOTIFY_ENABLED,
            UI_NIGHT_MODE
            UI_NIGHT_MODE,
            SLEEP_TIMEOUT
        };
        };


        /**
        /**
+1 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
<resources>
<resources>
    <bool name="def_dim_screen">true</bool>
    <bool name="def_dim_screen">true</bool>
    <integer name="def_screen_off_timeout">60000</integer>
    <integer name="def_screen_off_timeout">60000</integer>
    <integer name="def_sleep_timeout">-1</integer>
    <bool name="def_airplane_mode_on">false</bool>
    <bool name="def_airplane_mode_on">false</bool>
    <!-- Comma-separated list of bluetooth, wifi, and cell. -->
    <!-- Comma-separated list of bluetooth, wifi, and cell. -->
    <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc,wimax</string>
    <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc,wimax</string>
+19 −1
Original line number Original line Diff line number Diff line
@@ -70,7 +70,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
    // is properly propagated through your change.  Not doing so will result in a loss of user
    // is properly propagated through your change.  Not doing so will result in a loss of user
    // settings.
    // settings.
    private static final int DATABASE_VERSION = 112;
    private static final int DATABASE_VERSION = 113;


    private Context mContext;
    private Context mContext;
    private int mUserHandle;
    private int mUserHandle;
@@ -1811,6 +1811,22 @@ public class DatabaseHelper extends SQLiteOpenHelper {
            upgradeVersion = 112;
            upgradeVersion = 112;
        }
        }


        if (upgradeVersion < 113) {
            db.beginTransaction();
            SQLiteStatement stmt = null;
            try {
                stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
                        + " VALUES(?,?);");
                loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
                        R.integer.def_sleep_timeout);
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
                if (stmt != null) stmt.close();
            }
            upgradeVersion = 113;
        }

        // *** Remember to update DATABASE_VERSION above!
        // *** Remember to update DATABASE_VERSION above!


        if (upgradeVersion != currentVersion) {
        if (upgradeVersion != currentVersion) {
@@ -2382,6 +2398,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
            loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
            loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
                    R.bool.def_lock_screen_allow_private_notifications);
                    R.bool.def_lock_screen_allow_private_notifications);


            loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
                    R.integer.def_sleep_timeout);
        } finally {
        } finally {
            if (stmt != null) stmt.close();
            if (stmt != null) stmt.close();
        }
        }
+57 −10
Original line number Original line Diff line number Diff line
@@ -142,10 +142,12 @@ public final class PowerManagerService extends SystemService
    // Summarizes the user activity state.
    // Summarizes the user activity state.
    private static final int USER_ACTIVITY_SCREEN_BRIGHT = 1 << 0;
    private static final int USER_ACTIVITY_SCREEN_BRIGHT = 1 << 0;
    private static final int USER_ACTIVITY_SCREEN_DIM = 1 << 1;
    private static final int USER_ACTIVITY_SCREEN_DIM = 1 << 1;
    private static final int USER_ACTIVITY_SCREEN_DREAM = 1 << 2;


    // Default timeout in milliseconds.  This is only used until the settings
    // Default timeout in milliseconds.  This is only used until the settings
    // provider populates the actual default value (R.integer.def_screen_off_timeout).
    // provider populates the actual default value (R.integer.def_screen_off_timeout).
    private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;
    private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;
    private static final int DEFAULT_SLEEP_TIMEOUT = -1;


    // Power hints defined in hardware/libhardware/include/hardware/power.h.
    // Power hints defined in hardware/libhardware/include/hardware/power.h.
    private static final int POWER_HINT_INTERACTION = 2;
    private static final int POWER_HINT_INTERACTION = 2;
@@ -214,7 +216,6 @@ public final class PowerManagerService extends SystemService
    private long mLastInteractivePowerHintTime;
    private long mLastInteractivePowerHintTime;


    // A bitfield that summarizes the effect of the user activity timer.
    // A bitfield that summarizes the effect of the user activity timer.
    // A zero value indicates that the user activity timer has expired.
    private int mUserActivitySummary;
    private int mUserActivitySummary;


    // The desired display power state.  The actual state may lag behind the
    // The desired display power state.  The actual state may lag behind the
@@ -340,6 +341,9 @@ public final class PowerManagerService extends SystemService
    // The screen off timeout setting value in milliseconds.
    // The screen off timeout setting value in milliseconds.
    private int mScreenOffTimeoutSetting;
    private int mScreenOffTimeoutSetting;


    // The sleep timeout setting value in milliseconds.
    private int mSleepTimeoutSetting;

    // The maximum allowable screen off timeout according to the device
    // The maximum allowable screen off timeout according to the device
    // administration policy.  Overrides other settings.
    // administration policy.  Overrides other settings.
    private int mMaximumScreenOffTimeoutFromDeviceAdmin = Integer.MAX_VALUE;
    private int mMaximumScreenOffTimeoutFromDeviceAdmin = Integer.MAX_VALUE;
@@ -543,6 +547,9 @@ public final class PowerManagerService extends SystemService
            resolver.registerContentObserver(Settings.System.getUriFor(
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.SCREEN_OFF_TIMEOUT),
                    Settings.System.SCREEN_OFF_TIMEOUT),
                    false, mSettingsObserver, UserHandle.USER_ALL);
                    false, mSettingsObserver, UserHandle.USER_ALL);
            resolver.registerContentObserver(Settings.Secure.getUriFor(
                    Settings.Secure.SLEEP_TIMEOUT),
                    false, mSettingsObserver, UserHandle.USER_ALL);
            resolver.registerContentObserver(Settings.Global.getUriFor(
            resolver.registerContentObserver(Settings.Global.getUriFor(
                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN),
                    Settings.Global.STAY_ON_WHILE_PLUGGED_IN),
                    false, mSettingsObserver, UserHandle.USER_ALL);
                    false, mSettingsObserver, UserHandle.USER_ALL);
@@ -624,6 +631,9 @@ public final class PowerManagerService extends SystemService
        mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,
        mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,
                Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,
                Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,
                UserHandle.USER_CURRENT);
                UserHandle.USER_CURRENT);
        mSleepTimeoutSetting = Settings.Secure.getIntForUser(resolver,
                Settings.Secure.SLEEP_TIMEOUT, DEFAULT_SLEEP_TIMEOUT,
                UserHandle.USER_CURRENT);
        mStayOnWhilePluggedInSetting = Settings.Global.getInt(resolver,
        mStayOnWhilePluggedInSetting = Settings.Global.getInt(resolver,
                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);


@@ -1431,7 +1441,8 @@ public final class PowerManagerService extends SystemService
            if (mWakefulness == WAKEFULNESS_AWAKE
            if (mWakefulness == WAKEFULNESS_AWAKE
                    || mWakefulness == WAKEFULNESS_DREAMING
                    || mWakefulness == WAKEFULNESS_DREAMING
                    || mWakefulness == WAKEFULNESS_DOZING) {
                    || mWakefulness == WAKEFULNESS_DOZING) {
                final int screenOffTimeout = getScreenOffTimeoutLocked();
                final int sleepTimeout = getSleepTimeoutLocked();
                final int screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout);
                final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
                final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);


                mUserActivitySummary = 0;
                mUserActivitySummary = 0;
@@ -1439,11 +1450,11 @@ public final class PowerManagerService extends SystemService
                    nextTimeout = mLastUserActivityTime
                    nextTimeout = mLastUserActivityTime
                            + screenOffTimeout - screenDimDuration;
                            + screenOffTimeout - screenDimDuration;
                    if (now < nextTimeout) {
                    if (now < nextTimeout) {
                        mUserActivitySummary |= USER_ACTIVITY_SCREEN_BRIGHT;
                        mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
                    } else {
                    } else {
                        nextTimeout = mLastUserActivityTime + screenOffTimeout;
                        nextTimeout = mLastUserActivityTime + screenOffTimeout;
                        if (now < nextTimeout) {
                        if (now < nextTimeout) {
                            mUserActivitySummary |= USER_ACTIVITY_SCREEN_DIM;
                            mUserActivitySummary = USER_ACTIVITY_SCREEN_DIM;
                        }
                        }
                    }
                    }
                }
                }
@@ -1458,7 +1469,22 @@ public final class PowerManagerService extends SystemService
                        }
                        }
                    }
                    }
                }
                }
                if (mUserActivitySummary != 0) {
                if (mUserActivitySummary == 0) {
                    if (sleepTimeout >= 0) {
                        final long anyUserActivity = Math.max(mLastUserActivityTime,
                                mLastUserActivityTimeNoChangeLights);
                        if (anyUserActivity >= mLastWakeTime) {
                            nextTimeout = anyUserActivity + sleepTimeout;
                            if (now < nextTimeout) {
                                mUserActivitySummary = USER_ACTIVITY_SCREEN_DREAM;
                            }
                        }
                    } else {
                        mUserActivitySummary = USER_ACTIVITY_SCREEN_DREAM;
                        nextTimeout = -1;
                    }
                }
                if (mUserActivitySummary != 0 && nextTimeout >= 0) {
                    Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY_TIMEOUT);
                    Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY_TIMEOUT);
                    msg.setAsynchronous(true);
                    msg.setAsynchronous(true);
                    mHandler.sendMessageAtTime(msg, nextTimeout);
                    mHandler.sendMessageAtTime(msg, nextTimeout);
@@ -1495,7 +1521,15 @@ public final class PowerManagerService extends SystemService
        }
        }
    }
    }


    private int getScreenOffTimeoutLocked() {
    private int getSleepTimeoutLocked() {
        int timeout = mSleepTimeoutSetting;
        if (timeout <= 0) {
            return -1;
        }
        return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
    }

    private int getScreenOffTimeoutLocked(int sleepTimeout) {
        int timeout = mScreenOffTimeoutSetting;
        int timeout = mScreenOffTimeoutSetting;
        if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {
        if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {
            timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);
            timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);
@@ -1503,6 +1537,9 @@ public final class PowerManagerService extends SystemService
        if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {
        if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {
            timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);
            timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);
        }
        }
        if (sleepTimeout >= 0) {
            timeout = Math.min(timeout, sleepTimeout);
        }
        return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
        return Math.max(timeout, mMinimumScreenOffTimeoutConfig);
    }
    }


@@ -1619,8 +1656,7 @@ public final class PowerManagerService extends SystemService
            mSandmanScheduled = false;
            mSandmanScheduled = false;
            wakefulness = mWakefulness;
            wakefulness = mWakefulness;
            if (mSandmanSummoned && mDisplayReady) {
            if (mSandmanSummoned && mDisplayReady) {
                startDreaming = ((wakefulness == WAKEFULNESS_DREAMING && canDreamLocked())
                startDreaming = canDreamLocked() || canDozeLocked();
                        || wakefulness == WAKEFULNESS_DOZING);
                mSandmanSummoned = false;
                mSandmanSummoned = false;
            } else {
            } else {
                startDreaming = false;
                startDreaming = false;
@@ -1708,13 +1744,14 @@ public final class PowerManagerService extends SystemService


    /**
    /**
     * Returns true if the device is allowed to dream in its current state.
     * Returns true if the device is allowed to dream in its current state.
     * This function is not called when dozing.
     */
     */
    private boolean canDreamLocked() {
    private boolean canDreamLocked() {
        if (mWakefulness != WAKEFULNESS_DREAMING
        if (mWakefulness != WAKEFULNESS_DREAMING
                || !mDreamsSupportedConfig
                || !mDreamsSupportedConfig
                || !mDreamsEnabledSetting
                || !mDreamsEnabledSetting
                || !mDisplayPowerRequest.isBrightOrDim()
                || !mDisplayPowerRequest.isBrightOrDim()
                || (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT
                        | USER_ACTIVITY_SCREEN_DIM | USER_ACTIVITY_SCREEN_DREAM)) == 0
                || !mBootCompleted) {
                || !mBootCompleted) {
            return false;
            return false;
        }
        }
@@ -1736,6 +1773,13 @@ public final class PowerManagerService extends SystemService
        return true;
        return true;
    }
    }


    /**
     * Returns true if the device is allowed to doze in its current state.
     */
    private boolean canDozeLocked() {
        return mWakefulness == WAKEFULNESS_DOZING;
    }

    /**
    /**
     * Updates the display power state asynchronously.
     * Updates the display power state asynchronously.
     * When the update is finished, mDisplayReady will be set to true.  The display
     * When the update is finished, mDisplayReady will be set to true.  The display
@@ -2343,6 +2387,7 @@ public final class PowerManagerService extends SystemService
            pw.println("  mMaximumScreenDimDurationConfig=" + mMaximumScreenDimDurationConfig);
            pw.println("  mMaximumScreenDimDurationConfig=" + mMaximumScreenDimDurationConfig);
            pw.println("  mMaximumScreenDimRatioConfig=" + mMaximumScreenDimRatioConfig);
            pw.println("  mMaximumScreenDimRatioConfig=" + mMaximumScreenDimRatioConfig);
            pw.println("  mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting);
            pw.println("  mScreenOffTimeoutSetting=" + mScreenOffTimeoutSetting);
            pw.println("  mSleepTimeoutSetting=" + mSleepTimeoutSetting);
            pw.println("  mMaximumScreenOffTimeoutFromDeviceAdmin="
            pw.println("  mMaximumScreenOffTimeoutFromDeviceAdmin="
                    + mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced="
                    + mMaximumScreenOffTimeoutFromDeviceAdmin + " (enforced="
                    + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
                    + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
@@ -2367,9 +2412,11 @@ public final class PowerManagerService extends SystemService
            pw.println("  mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
            pw.println("  mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
            pw.println("  mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
            pw.println("  mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);


            final int screenOffTimeout = getScreenOffTimeoutLocked();
            final int sleepTimeout = getSleepTimeoutLocked();
            final int screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout);
            final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
            final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
            pw.println();
            pw.println();
            pw.println("Sleep timeout: " + sleepTimeout + " ms");
            pw.println("Screen off timeout: " + screenOffTimeout + " ms");
            pw.println("Screen off timeout: " + screenOffTimeout + " ms");
            pw.println("Screen dim duration: " + screenDimDuration + " ms");
            pw.println("Screen dim duration: " + screenDimDuration + " ms");