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

Commit aae89531 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Battery saver preliminary changes for P.

- Flags for force app standby for jobs and alarms, and sensors.
- Don't disable GPS when the screen is off.

Bug: 68769804
Test: manual
Change-Id: I13661498dbc25051f2be0423cb50a55e4e592dc4
parent a7d81598
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -526,7 +526,11 @@ public final class PowerManager {
            ServiceType.SCREEN_BRIGHTNESS,
            ServiceType.SOUND,
            ServiceType.BATTERY_STATS,
            ServiceType.DATA_SAVER})
            ServiceType.DATA_SAVER,
            ServiceType.FORCE_ALL_APPS_STANDBY_JOBS,
            ServiceType.FORCE_ALL_APPS_STANDBY_ALARMS,
            ServiceType.OPTIONAL_SENSORS,
    })
    public @interface ServiceType {
        int NULL = 0;
        int GPS = 1;
@@ -539,6 +543,21 @@ public final class PowerManager {
        int SOUND = 8;
        int BATTERY_STATS = 9;
        int DATA_SAVER = 10;

        /**
         * Whether the job scheduler should force app standby on all apps on battery saver or not.
         */
        int FORCE_ALL_APPS_STANDBY_JOBS = 11;

        /**
         * Whether the alarm manager should force app standby on all apps on battery saver or not.
         */
        int FORCE_ALL_APPS_STANDBY_ALARMS = 12;

        /**
         * Whether to disable non-essential sensors. (e.g. edge sensors.)
         */
        int OPTIONAL_SENSORS = 13;
    }

    final Context mContext;
+19 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.os;

import android.view.Display;

import java.util.function.Consumer;

/**
 * Power manager local system service interface.
 *
@@ -125,6 +127,23 @@ public abstract class PowerManagerInternal {

    public abstract void registerLowPowerModeObserver(LowPowerModeListener listener);

    /**
     * Same as {@link #registerLowPowerModeObserver} but can take a lambda.
     */
    public void registerLowPowerModeObserver(int serviceType, Consumer<PowerSaveState> listener) {
        registerLowPowerModeObserver(new LowPowerModeListener() {
            @Override
            public int getServiceType() {
                return serviceType;
            }

            @Override
            public void onLowPowerModeChanged(PowerSaveState state) {
                listener.accept(state);
            }
        });
    }

    public interface LowPowerModeListener {
        int getServiceType();
        void onLowPowerModeChanged(PowerSaveState state);
+3 −0
Original line number Diff line number Diff line
@@ -4744,4 +4744,7 @@
    A toast message shown when an app shortcut that wasn't restored due to an unknown issue is clicked,
    -->
    <string name="shortcut_restore_unknown_issue">Couldn\u2019t restore shortcut</string>

    <!--Battery saver warning. STOPSHIP: Remove it eventually. -->
    <string name="battery_saver_warning" translatable="false">Battery saver activated.\n\nSee go/extreme-battery-saver.\n\nThis contains aggressive experimental changes for P and may affect background app behavior.\n</string>
</resources>
+1 −0
Original line number Diff line number Diff line
@@ -3128,6 +3128,7 @@
  <java-symbol type="string" name="shortcut_restore_not_supported" />
  <java-symbol type="string" name="shortcut_restore_signature_mismatch" />
  <java-symbol type="string" name="shortcut_restore_unknown_issue" />
  <java-symbol type="string" name="battery_saver_warning" />

  <!-- From media projection -->
  <java-symbol type="string" name="config_mediaProjectionPermissionDialogComponent" />
+35 −2
Original line number Diff line number Diff line
@@ -56,6 +56,9 @@ public class BatterySaverPolicy extends ContentObserver {
    private static final String KEY_ADJUST_BRIGHTNESS_FACTOR = "adjust_brightness_factor";
    private static final String KEY_FULLBACKUP_DEFERRED = "fullbackup_deferred";
    private static final String KEY_KEYVALUE_DEFERRED = "keyvaluebackup_deferred";
    private static final String KEY_FORCE_ALL_APPS_STANDBY_JOBS = "force_all_apps_standby_jobs";
    private static final String KEY_FORCE_ALL_APPS_STANDBY_ALARMS = "force_all_apps_standby_alarms";
    private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled";

    private final KeyValueListParser mParser = new KeyValueListParser(',');

@@ -141,6 +144,21 @@ public class BatterySaverPolicy extends ContentObserver {
     */
    private float mAdjustBrightnessFactor;

    /**
     * Whether to put all apps in the stand-by mode or not for job scheduler.
     */
    private boolean mForceAllAppsStandbyJobs;

    /**
     * Whether to put all apps in the stand-by mode or not for alarms.
     */
    private boolean mForceAllAppsStandbyAlarms;

    /**
     * Weather to show non-essential sensors (e.g. edge sensors) or not.
     */
    private boolean mOptionalSensorsDisabled;

    private ContentResolver mContentResolver;

    public BatterySaverPolicy(Handler handler) {
@@ -180,10 +198,14 @@ public class BatterySaverPolicy extends ContentObserver {
            mAdjustBrightnessDisabled = mParser.getBoolean(KEY_ADJUST_BRIGHTNESS_DISABLED, false);
            mAdjustBrightnessFactor = mParser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR, 0.5f);
            mDataSaverDisabled = mParser.getBoolean(KEY_DATASAVER_DISABLED, true);
            mForceAllAppsStandbyJobs = mParser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_JOBS, true);
            mForceAllAppsStandbyAlarms =
                    mParser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY_ALARMS, true);
            mOptionalSensorsDisabled = mParser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true);

            // Get default value from Settings.Secure
            final int defaultGpsMode = Settings.Secure.getInt(mContentResolver, SECURE_KEY_GPS_MODE,
                    GPS_MODE_DISABLED_WHEN_SCREEN_OFF);
                    GPS_MODE_NO_CHANGE);
            mGpsMode = mParser.getInt(KEY_GPS_MODE, defaultGpsMode);
        }
    }
@@ -235,6 +257,15 @@ public class BatterySaverPolicy extends ContentObserver {
                case ServiceType.VIBRATION:
                    return builder.setBatterySaverEnabled(mVibrationDisabled)
                            .build();
                case ServiceType.FORCE_ALL_APPS_STANDBY_JOBS:
                    return builder.setBatterySaverEnabled(mForceAllAppsStandbyJobs)
                            .build();
                case ServiceType.FORCE_ALL_APPS_STANDBY_ALARMS:
                    return builder.setBatterySaverEnabled(mForceAllAppsStandbyAlarms)
                            .build();
                case ServiceType.OPTIONAL_SENSORS:
                    return builder.setBatterySaverEnabled(mOptionalSensorsDisabled)
                            .build();
                default:
                    return builder.setBatterySaverEnabled(realMode)
                            .build();
@@ -259,6 +290,8 @@ public class BatterySaverPolicy extends ContentObserver {
        pw.println("  " + KEY_ADJUST_BRIGHTNESS_DISABLED + "=" + mAdjustBrightnessDisabled);
        pw.println("  " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor);
        pw.println("  " + KEY_GPS_MODE + "=" + mGpsMode);

        pw.println("  " + KEY_FORCE_ALL_APPS_STANDBY_JOBS + "=" + mForceAllAppsStandbyJobs);
        pw.println("  " + KEY_FORCE_ALL_APPS_STANDBY_ALARMS + "=" + mForceAllAppsStandbyAlarms);
        pw.println("  " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled);
    }
}
Loading