summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt1
-rw-r--r--core/java/android/provider/DeviceConfig.java8
-rw-r--r--core/java/android/provider/Settings.java18
-rw-r--r--packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java2
-rw-r--r--services/core/java/com/android/server/power/batterysaver/BatterySaverController.java6
-rw-r--r--services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java345
-rw-r--r--services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java217
7 files changed, 424 insertions, 173 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 3a769d5d5a71..01c97ccab198 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -8411,6 +8411,7 @@ package android.provider {
field public static final String NAMESPACE_APP_COMPAT = "app_compat";
field public static final String NAMESPACE_ATTENTION_MANAGER_SERVICE = "attention_manager_service";
field public static final String NAMESPACE_AUTOFILL = "autofill";
+ field public static final String NAMESPACE_BATTERY_SAVER = "battery_saver";
field public static final String NAMESPACE_BIOMETRICS = "biometrics";
field public static final String NAMESPACE_BLOBSTORE = "blobstore";
field public static final String NAMESPACE_BLUETOOTH = "bluetooth";
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index 44cc0f5c330d..f58fa1595f4a 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -126,6 +126,14 @@ public final class DeviceConfig {
public static final String NAMESPACE_AUTOFILL = "autofill";
/**
+ * Namespace for battery saver feature.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String NAMESPACE_BATTERY_SAVER = "battery_saver";
+
+ /**
* Namespace for blobstore feature that allows apps to share data blobs.
*
* @hide
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 833c87445bb0..12791bcc194b 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -11717,24 +11717,6 @@ public final class Settings {
"battery_saver_device_specific_constants";
/**
- * Settings for adaptive Battery Saver mode. Uses the same flags as
- * {@link #BATTERY_SAVER_CONSTANTS}.
- *
- * @hide
- */
- public static final String BATTERY_SAVER_ADAPTIVE_CONSTANTS =
- "battery_saver_adaptive_constants";
-
- /**
- * Device specific settings for adaptive Battery Saver mode. Uses the same flags as
- * {@link #BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS}.
- *
- * @hide
- */
- public static final String BATTERY_SAVER_ADAPTIVE_DEVICE_SPECIFIC_CONSTANTS =
- "battery_saver_adaptive_device_specific_constants";
-
- /**
* Battery tip specific settings
* This is encoded as a key=value list, separated by commas. Ex:
*
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 75eea8db8085..c740bac4d0b4 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -146,7 +146,6 @@ public class SettingsBackupTest {
Settings.Global.BROADCAST_OFFLOAD_CONSTANTS,
Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
- Settings.Global.BATTERY_SAVER_ADAPTIVE_DEVICE_SPECIFIC_CONSTANTS,
Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS,
Settings.Global.BATTERY_STATS_CONSTANTS,
Settings.Global.BINDER_CALLS_STATS,
@@ -232,7 +231,6 @@ public class SettingsBackupTest {
Settings.Global.DEVELOPMENT_USE_BLAST_ADAPTER_VR,
Settings.Global.DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH,
Settings.Global.DEVICE_DEMO_MODE,
- Settings.Global.BATTERY_SAVER_ADAPTIVE_CONSTANTS,
Settings.Global.BATTERY_SAVER_CONSTANTS,
Settings.Global.BATTERY_TIP_CONSTANTS,
Settings.Global.DEFAULT_SM_DP_PLUS,
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
index 1e4e0a6a04bc..68d038bb5cf6 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverController.java
@@ -368,12 +368,6 @@ public class BatterySaverController implements BatterySaverPolicyListener {
}
}
- boolean setAdaptivePolicyLocked(String settings, String deviceSpecificSettings, int reason) {
- return setAdaptivePolicyLocked(
- BatterySaverPolicy.Policy.fromSettings(settings, deviceSpecificSettings),
- reason);
- }
-
boolean setAdaptivePolicyLocked(BatterySaverPolicyConfig config, int reason) {
return setAdaptivePolicyLocked(BatterySaverPolicy.Policy.fromConfig(config), reason);
}
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
index ccd4e0ffa3e7..8eb66cdee5cd 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
@@ -26,6 +26,7 @@ import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerSaveState;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -48,6 +49,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
/**
* Class to decide whether to turn on battery saver mode for specific services.
@@ -57,60 +59,81 @@ import java.util.Objects;
*
* Test: atest com.android.server.power.batterysaver.BatterySaverPolicyTest
*/
-public class BatterySaverPolicy extends ContentObserver {
+public class BatterySaverPolicy extends ContentObserver implements
+ DeviceConfig.OnPropertiesChangedListener {
private static final String TAG = "BatterySaverPolicy";
static final boolean DEBUG = false; // DO NOT SUBMIT WITH TRUE.
- private static final String KEY_GPS_MODE = "gps_mode";
- private static final String KEY_VIBRATION_DISABLED = "vibration_disabled";
- private static final String KEY_ANIMATION_DISABLED = "animation_disabled";
- private static final String KEY_SOUNDTRIGGER_DISABLED = "soundtrigger_disabled";
+ @VisibleForTesting
+ static final String KEY_LOCATION_MODE = "location_mode";
+ @VisibleForTesting
+ static final String KEY_DISABLE_VIBRATION = "disable_vibration";
+ @VisibleForTesting
+ static final String KEY_DISABLE_ANIMATION = "disable_animation";
+ @VisibleForTesting
+ static final String KEY_DISABLE_SOUNDTRIGGER = "disable_soundtrigger";
/**
- * Disable turning on the network firewall when Battery Saver is turned on.
- * If set to false, the firewall WILL be turned on when Battery Saver is turned on.
- * If set to true, the firewall WILL NOT be turned on when Battery Saver is turned on.
+ * Turn on the network firewall when Battery Saver is turned on.
+ * If set to false, the firewall WILL NOT be turned on when Battery Saver is turned on.
+ * If set to true, the firewall WILL be turned on when Battery Saver is turned on.
*/
- private static final String KEY_ACTIVATE_FIREWALL_DISABLED = "firewall_disabled";
+ @VisibleForTesting
+ static final String KEY_ENABLE_FIREWALL = "enable_firewall";
/**
- * Disable turning on the special low power screen brightness dimming when Battery Saver is
+ * Turn on the special low power screen brightness dimming when Battery Saver is
* turned on.
- * If set to false, the screen brightness dimming WILL be turned on by Battery Saver.
- * If set to true, the screen brightness WILL NOT be turned on by Battery Saver.
+ * If set to false, the screen brightness dimming WILL NOT be turned on by Battery Saver.
+ * If set to true, the screen brightness WILL be turned on by Battery Saver.
*/
- private static final String KEY_ADJUST_BRIGHTNESS_DISABLED = "adjust_brightness_disabled";
+ @VisibleForTesting
+ static final String KEY_ENABLE_BRIGHTNESS_ADJUSTMENT = "enable_brightness_adjustment";
/**
- * Disable turning on Data Saver when Battery Saver is turned on.
- * If set to false, Data Saver WILL be turned on when Battery Saver is turned on.
- * If set to true, Data Saver WILL NOT be turned on when Battery Saver is turned on.
+ * Turn on Data Saver when Battery Saver is turned on.
+ * If set to false, Data Saver WILL NOT be turned on when Battery Saver is turned on.
+ * If set to true, Data Saver WILL be turned on when Battery Saver is turned on.
*/
- private static final String KEY_ACTIVATE_DATASAVER_DISABLED = "datasaver_disabled";
+ @VisibleForTesting
+ static final String KEY_ENABLE_DATASAVER = "enable_datasaver";
/**
* {@code true} if the Policy should advertise to the rest of the system that battery saver
* is enabled. This advertising could cause other system components to change their
* behavior. This will not affect other policy flags and what they change.
*/
- private static final String KEY_ADVERTISE_IS_ENABLED = "advertise_is_enabled";
-
- private static final String KEY_LAUNCH_BOOST_DISABLED = "launch_boost_disabled";
- 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 = "force_all_apps_standby";
- private static final String KEY_FORCE_BACKGROUND_CHECK = "force_background_check";
- private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled";
- private static final String KEY_AOD_DISABLED = "aod_disabled";
+ @VisibleForTesting
+ static final String KEY_ADVERTISE_IS_ENABLED = "advertise_is_enabled";
+
+ @VisibleForTesting
+ static final String KEY_DISABLE_LAUNCH_BOOST = "disable_launch_boost";
+ @VisibleForTesting
+ static final String KEY_ADJUST_BRIGHTNESS_FACTOR = "adjust_brightness_factor";
+ @VisibleForTesting
+ static final String KEY_DEFER_FULL_BACKUP = "defer_full_backup";
+ @VisibleForTesting
+ static final String KEY_DEFER_KEYVALUE_BACKUP = "defer_keyvalue_backup";
+ @VisibleForTesting
+ static final String KEY_FORCE_ALL_APPS_STANDBY = "force_all_apps_standby";
+ @VisibleForTesting
+ static final String KEY_FORCE_BACKGROUND_CHECK = "force_background_check";
+ @VisibleForTesting
+ static final String KEY_DISABLE_OPTIONAL_SENSORS = "disable_optional_sensors";
+ @VisibleForTesting
+ static final String KEY_DISABLE_AOD = "disable_aod";
// Go into deep Doze as soon as the screen turns off.
- private static final String KEY_QUICK_DOZE_ENABLED = "quick_doze_enabled";
- private static final String KEY_ENABLE_NIGHT_MODE = "enable_night_mode";
+ @VisibleForTesting
+ static final String KEY_ENABLE_QUICK_DOZE = "enable_quick_doze";
+ @VisibleForTesting
+ static final String KEY_ENABLE_NIGHT_MODE = "enable_night_mode";
private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i";
private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n";
+ private static final String KEY_SUFFIX_ADAPTIVE = "_adaptive";
+
@VisibleForTesting
static final Policy OFF_POLICY = new Policy(
1f, /* adjustBrightnessFactor */
@@ -173,10 +196,7 @@ public class BatterySaverPolicy extends ContentObserver {
private String mDeviceSpecificSettingsSource; // For dump() only.
@GuardedBy("mLock")
- private String mAdaptiveSettings;
-
- @GuardedBy("mLock")
- private String mAdaptiveDeviceSpecificSettings;
+ private DeviceConfig.Properties mLastDeviceConfigProperties;
/**
* A short string describing which battery saver is now enabled, which we dump in the eventlog.
@@ -261,10 +281,6 @@ public class BatterySaverPolicy extends ContentObserver {
Settings.Global.BATTERY_SAVER_CONSTANTS), false, this);
mContentResolver.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS), false, this);
- mContentResolver.registerContentObserver(Settings.Global.getUriFor(
- Settings.Global.BATTERY_SAVER_ADAPTIVE_CONSTANTS), false, this);
- mContentResolver.registerContentObserver(Settings.Global.getUriFor(
- Settings.Global.BATTERY_SAVER_ADAPTIVE_DEVICE_SPECIFIC_CONSTANTS), false, this);
final AccessibilityManager acm = mContext.getSystemService(AccessibilityManager.class);
@@ -277,6 +293,10 @@ public class BatterySaverPolicy extends ContentObserver {
mAutomotiveProjectionActive.initialize(
uiModeManager.getActiveProjectionTypes() != UiModeManager.PROJECTION_TYPE_NONE);
+ DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_BATTERY_SAVER,
+ mContext.getMainExecutor(), this);
+ mLastDeviceConfigProperties =
+ DeviceConfig.getProperties(DeviceConfig.NAMESPACE_BATTERY_SAVER);
onChange(true, null);
}
@@ -305,7 +325,7 @@ public class BatterySaverPolicy extends ContentObserver {
/**
* Notifies listeners of a policy change on the handler thread only if the current policy level
- * is not {@link POLICY_LEVEL_OFF}.
+ * is not {@link #POLICY_LEVEL_OFF}.
*/
private void maybeNotifyListenersOfPolicyChange() {
final BatterySaverPolicyListener[] listeners;
@@ -330,6 +350,55 @@ public class BatterySaverPolicy extends ContentObserver {
refreshSettings();
}
+ @Override
+ public void onPropertiesChanged(DeviceConfig.Properties properties) {
+ // Need to get all of the flags atomically.
+ mLastDeviceConfigProperties =
+ DeviceConfig.getProperties(DeviceConfig.NAMESPACE_BATTERY_SAVER);
+ Policy newAdaptivePolicy = null;
+ Policy newFullPolicy = null;
+
+ boolean changed = false;
+
+ synchronized (mLock) {
+ for (String name : properties.getKeyset()) {
+ if (name == null) {
+ continue;
+ }
+ if (name.endsWith(KEY_SUFFIX_ADAPTIVE)) {
+ if (newAdaptivePolicy == null) {
+ newAdaptivePolicy = Policy.fromSettings("", "",
+ mLastDeviceConfigProperties, KEY_SUFFIX_ADAPTIVE,
+ DEFAULT_ADAPTIVE_POLICY);
+ }
+ } else if (newFullPolicy == null) {
+ newFullPolicy = Policy.fromSettings(mSettings, mDeviceSpecificSettings,
+ mLastDeviceConfigProperties, null, DEFAULT_FULL_POLICY);
+ }
+ }
+
+ if (newFullPolicy != null && !mFullPolicy.equals(newFullPolicy)) {
+ mFullPolicy = newFullPolicy;
+ changed |= (mPolicyLevel == POLICY_LEVEL_FULL);
+ }
+
+ if (newAdaptivePolicy != null && !mAdaptivePolicy.equals(newAdaptivePolicy)) {
+ mDefaultAdaptivePolicy = newAdaptivePolicy;
+ // This will override any config set by an external source. This should be fine
+ // for now.
+ // TODO(119261320): make sure it doesn't override what's set externally
+ mAdaptivePolicy = mDefaultAdaptivePolicy;
+ changed |= (mPolicyLevel == POLICY_LEVEL_ADAPTIVE);
+ }
+
+ updatePolicyDependenciesLocked();
+ }
+
+ if (changed) {
+ maybeNotifyListenersOfPolicyChange();
+ }
+ }
+
private void refreshSettings() {
synchronized (mLock) {
// Load the non-device-specific setting.
@@ -349,13 +418,7 @@ public class BatterySaverPolicy extends ContentObserver {
mDeviceSpecificSettingsSource = "(overlay)";
}
- final String adaptiveSetting =
- getGlobalSetting(Settings.Global.BATTERY_SAVER_ADAPTIVE_CONSTANTS);
- final String adaptiveDeviceSpecificSetting = getGlobalSetting(
- Settings.Global.BATTERY_SAVER_ADAPTIVE_DEVICE_SPECIFIC_CONSTANTS);
-
- if (!updateConstantsLocked(setting, deviceSpecificSetting,
- adaptiveSetting, adaptiveDeviceSpecificSetting)) {
+ if (!updateConstantsLocked(setting, deviceSpecificSetting)) {
// Nothing of note changed.
return;
}
@@ -366,47 +429,34 @@ public class BatterySaverPolicy extends ContentObserver {
@GuardedBy("mLock")
@VisibleForTesting
- void updateConstantsLocked(final String setting, final String deviceSpecificSetting) {
- updateConstantsLocked(setting, deviceSpecificSetting, "", "");
- }
-
/** @return true if the currently active policy changed. */
- private boolean updateConstantsLocked(String setting, String deviceSpecificSetting,
- String adaptiveSetting, String adaptiveDeviceSpecificSetting) {
+ boolean updateConstantsLocked(String setting, String deviceSpecificSetting) {
setting = TextUtils.emptyIfNull(setting);
deviceSpecificSetting = TextUtils.emptyIfNull(deviceSpecificSetting);
- adaptiveSetting = TextUtils.emptyIfNull(adaptiveSetting);
- adaptiveDeviceSpecificSetting = TextUtils.emptyIfNull(adaptiveDeviceSpecificSetting);
if (setting.equals(mSettings)
- && deviceSpecificSetting.equals(mDeviceSpecificSettings)
- && adaptiveSetting.equals(mAdaptiveSettings)
- && adaptiveDeviceSpecificSetting.equals(mAdaptiveDeviceSpecificSettings)) {
+ && deviceSpecificSetting.equals(mDeviceSpecificSettings)) {
return false;
}
mSettings = setting;
mDeviceSpecificSettings = deviceSpecificSetting;
- mAdaptiveSettings = adaptiveSetting;
- mAdaptiveDeviceSpecificSettings = adaptiveDeviceSpecificSetting;
if (DEBUG) {
Slog.i(TAG, "mSettings=" + mSettings);
Slog.i(TAG, "mDeviceSpecificSettings=" + mDeviceSpecificSettings);
- Slog.i(TAG, "mAdaptiveSettings=" + mAdaptiveSettings);
- Slog.i(TAG, "mAdaptiveDeviceSpecificSettings=" + mAdaptiveDeviceSpecificSettings);
}
boolean changed = false;
Policy newFullPolicy = Policy.fromSettings(setting, deviceSpecificSetting,
- DEFAULT_FULL_POLICY);
+ mLastDeviceConfigProperties, null, DEFAULT_FULL_POLICY);
if (mPolicyLevel == POLICY_LEVEL_FULL && !mFullPolicy.equals(newFullPolicy)) {
changed = true;
}
mFullPolicy = newFullPolicy;
- mDefaultAdaptivePolicy = Policy.fromSettings(adaptiveSetting, adaptiveDeviceSpecificSetting,
- DEFAULT_ADAPTIVE_POLICY);
+ mDefaultAdaptivePolicy = Policy.fromSettings("", "",
+ mLastDeviceConfigProperties, KEY_SUFFIX_ADAPTIVE, DEFAULT_ADAPTIVE_POLICY);
if (mPolicyLevel == POLICY_LEVEL_ADAPTIVE
&& !mAdaptivePolicy.equals(mDefaultAdaptivePolicy)) {
changed = true;
@@ -509,7 +559,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if full backup is deferred in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_FULLBACKUP_DEFERRED
+ * @see #KEY_DEFER_FULL_BACKUP
*/
public final boolean deferFullBackup;
@@ -517,7 +567,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if key value backup is deferred in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_KEYVALUE_DEFERRED
+ * @see #KEY_DEFER_KEYVALUE_BACKUP
*/
public final boolean deferKeyValueBackup;
@@ -525,7 +575,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if animation is disabled in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_ANIMATION_DISABLED
+ * @see #KEY_DISABLE_ANIMATION
*/
public final boolean disableAnimation;
@@ -549,7 +599,7 @@ public class BatterySaverPolicy extends ContentObserver {
* in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_SOUNDTRIGGER_DISABLED
+ * @see #KEY_DISABLE_SOUNDTRIGGER
*/
public final boolean disableSoundTrigger;
@@ -557,7 +607,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if vibration is disabled in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_VIBRATION_DISABLED
+ * @see #KEY_DISABLE_VIBRATION
*/
public final boolean disableVibration;
@@ -566,7 +616,7 @@ public class BatterySaverPolicy extends ContentObserver {
* mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_ADJUST_BRIGHTNESS_DISABLED
+ * @see #KEY_ENABLE_BRIGHTNESS_ADJUSTMENT
*/
public final boolean enableAdjustBrightness;
@@ -574,7 +624,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if data saver should be turned on in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_ACTIVATE_DATASAVER_DISABLED
+ * @see #KEY_ENABLE_DATASAVER
*/
public final boolean enableDataSaver;
@@ -582,7 +632,7 @@ public class BatterySaverPolicy extends ContentObserver {
* {@code true} if network policy firewall should be turned on in battery saver mode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_ACTIVATE_FIREWALL_DISABLED
+ * @see #KEY_ENABLE_FIREWALL
*/
public final boolean enableFirewall;
@@ -627,7 +677,7 @@ public class BatterySaverPolicy extends ContentObserver {
* previously called gpsMode.
*
* @see Settings.Global#BATTERY_SAVER_CONSTANTS
- * @see #KEY_GPS_MODE
+ * @see #KEY_LOCATION_MODE
*/
public final int locationMode;
@@ -745,13 +795,17 @@ public class BatterySaverPolicy extends ContentObserver {
);
}
- static Policy fromSettings(String settings, String deviceSpecificSettings) {
- return fromSettings(settings, deviceSpecificSettings, OFF_POLICY);
+ @VisibleForTesting
+ static Policy fromSettings(String settings, String deviceSpecificSettings,
+ DeviceConfig.Properties properties, String configSuffix) {
+ return fromSettings(settings, deviceSpecificSettings, properties, configSuffix,
+ OFF_POLICY);
}
- static Policy fromSettings(String settings, String deviceSpecificSettings,
- Policy defaultPolicy) {
+ private static Policy fromSettings(String settings, String deviceSpecificSettings,
+ DeviceConfig.Properties properties, String configSuffix, Policy defaultPolicy) {
final KeyValueListParser parser = new KeyValueListParser(',');
+ configSuffix = TextUtils.emptyIfNull(configSuffix);
// Device-specific parameters.
try {
@@ -771,40 +825,63 @@ public class BatterySaverPolicy extends ContentObserver {
Slog.wtf(TAG, "Bad battery saver constants: " + settings);
}
- float adjustBrightnessFactor = parser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR,
- defaultPolicy.adjustBrightnessFactor);
- boolean advertiseIsEnabled = parser.getBoolean(KEY_ADVERTISE_IS_ENABLED,
- defaultPolicy.advertiseIsEnabled);
- boolean deferFullBackup = parser.getBoolean(KEY_FULLBACKUP_DEFERRED,
- defaultPolicy.deferFullBackup);
- boolean deferKeyValueBackup = parser.getBoolean(KEY_KEYVALUE_DEFERRED,
- defaultPolicy.deferKeyValueBackup);
- boolean disableAnimation = parser.getBoolean(KEY_ANIMATION_DISABLED,
- defaultPolicy.disableAnimation);
- boolean disableAod = parser.getBoolean(KEY_AOD_DISABLED, defaultPolicy.disableAod);
- boolean disableLaunchBoost = parser.getBoolean(KEY_LAUNCH_BOOST_DISABLED,
- defaultPolicy.disableLaunchBoost);
- boolean disableOptionalSensors = parser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED,
- defaultPolicy.disableOptionalSensors);
- boolean disableSoundTrigger = parser.getBoolean(KEY_SOUNDTRIGGER_DISABLED,
- defaultPolicy.disableSoundTrigger);
- boolean disableVibrationConfig = parser.getBoolean(KEY_VIBRATION_DISABLED,
- defaultPolicy.disableVibration);
- boolean enableAdjustBrightness = !parser.getBoolean(KEY_ADJUST_BRIGHTNESS_DISABLED,
- !defaultPolicy.enableAdjustBrightness);
- boolean enableDataSaver = !parser.getBoolean(KEY_ACTIVATE_DATASAVER_DISABLED,
- !defaultPolicy.enableDataSaver);
- boolean enableFirewall = !parser.getBoolean(KEY_ACTIVATE_FIREWALL_DISABLED,
- !defaultPolicy.enableFirewall);
- boolean enableNightMode = parser.getBoolean(KEY_ENABLE_NIGHT_MODE,
- defaultPolicy.enableNightMode);
- boolean enableQuickDoze = parser.getBoolean(KEY_QUICK_DOZE_ENABLED,
- defaultPolicy.enableQuickDoze);
- boolean forceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY,
- defaultPolicy.forceAllAppsStandby);
- boolean forceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK,
- defaultPolicy.forceBackgroundCheck);
- int locationMode = parser.getInt(KEY_GPS_MODE, defaultPolicy.locationMode);
+ // The Settings value overrides everything, since that will be set by the user.
+ // The DeviceConfig value takes second place, with the default as the last choice.
+ final float adjustBrightnessFactor = parser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR,
+ properties.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR + configSuffix,
+ defaultPolicy.adjustBrightnessFactor));
+ final boolean advertiseIsEnabled = parser.getBoolean(KEY_ADVERTISE_IS_ENABLED,
+ properties.getBoolean(KEY_ADVERTISE_IS_ENABLED + configSuffix,
+ defaultPolicy.advertiseIsEnabled));
+ final boolean deferFullBackup = parser.getBoolean(KEY_DEFER_FULL_BACKUP,
+ properties.getBoolean(KEY_DEFER_FULL_BACKUP + configSuffix,
+ defaultPolicy.deferFullBackup));
+ final boolean deferKeyValueBackup = parser.getBoolean(KEY_DEFER_KEYVALUE_BACKUP,
+ properties.getBoolean(KEY_DEFER_KEYVALUE_BACKUP + configSuffix,
+ defaultPolicy.deferKeyValueBackup));
+ final boolean disableAnimation = parser.getBoolean(KEY_DISABLE_ANIMATION,
+ properties.getBoolean(KEY_DISABLE_ANIMATION + configSuffix,
+ defaultPolicy.disableAnimation));
+ final boolean disableAod = parser.getBoolean(KEY_DISABLE_AOD,
+ properties.getBoolean(KEY_DISABLE_AOD + configSuffix,
+ defaultPolicy.disableAod));
+ final boolean disableLaunchBoost = parser.getBoolean(KEY_DISABLE_LAUNCH_BOOST,
+ properties.getBoolean(KEY_DISABLE_LAUNCH_BOOST + configSuffix,
+ defaultPolicy.disableLaunchBoost));
+ final boolean disableOptionalSensors = parser.getBoolean(KEY_DISABLE_OPTIONAL_SENSORS,
+ properties.getBoolean(KEY_DISABLE_OPTIONAL_SENSORS + configSuffix,
+ defaultPolicy.disableOptionalSensors));
+ final boolean disableSoundTrigger = parser.getBoolean(KEY_DISABLE_SOUNDTRIGGER,
+ properties.getBoolean(KEY_DISABLE_SOUNDTRIGGER + configSuffix,
+ defaultPolicy.disableSoundTrigger));
+ final boolean disableVibrationConfig = parser.getBoolean(KEY_DISABLE_VIBRATION,
+ properties.getBoolean(KEY_DISABLE_VIBRATION + configSuffix,
+ defaultPolicy.disableVibration));
+ final boolean enableBrightnessAdjustment = parser.getBoolean(
+ KEY_ENABLE_BRIGHTNESS_ADJUSTMENT,
+ properties.getBoolean(KEY_ENABLE_BRIGHTNESS_ADJUSTMENT + configSuffix,
+ defaultPolicy.enableAdjustBrightness));
+ final boolean enableDataSaver = parser.getBoolean(KEY_ENABLE_DATASAVER,
+ properties.getBoolean(KEY_ENABLE_DATASAVER + configSuffix,
+ defaultPolicy.enableDataSaver));
+ final boolean enableFirewall = parser.getBoolean(KEY_ENABLE_FIREWALL,
+ properties.getBoolean(KEY_ENABLE_FIREWALL + configSuffix,
+ defaultPolicy.enableFirewall));
+ final boolean enableNightMode = parser.getBoolean(KEY_ENABLE_NIGHT_MODE,
+ properties.getBoolean(KEY_ENABLE_NIGHT_MODE + configSuffix,
+ defaultPolicy.enableNightMode));
+ final boolean enableQuickDoze = parser.getBoolean(KEY_ENABLE_QUICK_DOZE,
+ properties.getBoolean(KEY_ENABLE_QUICK_DOZE + configSuffix,
+ defaultPolicy.enableQuickDoze));
+ final boolean forceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY,
+ properties.getBoolean(KEY_FORCE_ALL_APPS_STANDBY + configSuffix,
+ defaultPolicy.forceAllAppsStandby));
+ final boolean forceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK,
+ properties.getBoolean(KEY_FORCE_BACKGROUND_CHECK + configSuffix,
+ defaultPolicy.forceBackgroundCheck));
+ final int locationMode = parser.getInt(KEY_LOCATION_MODE,
+ properties.getInt(KEY_LOCATION_MODE + configSuffix,
+ defaultPolicy.locationMode));
return new Policy(
adjustBrightnessFactor,
@@ -818,7 +895,7 @@ public class BatterySaverPolicy extends ContentObserver {
disableSoundTrigger,
/* disableVibration */
disableVibrationConfig,
- enableAdjustBrightness,
+ enableBrightnessAdjustment,
enableDataSaver,
enableFirewall,
enableNightMode,
@@ -1049,16 +1126,18 @@ public class BatterySaverPolicy extends ContentObserver {
ipw.increaseIndent();
ipw.println("value: " + mDeviceSpecificSettings);
ipw.decreaseIndent();
-
- ipw.println("Adaptive Settings: " + Settings.Global.BATTERY_SAVER_ADAPTIVE_CONSTANTS);
- ipw.increaseIndent();
- ipw.println("value: " + mAdaptiveSettings);
- ipw.decreaseIndent();
- ipw.println("Adaptive Device Specific Settings: "
- + Settings.Global.BATTERY_SAVER_ADAPTIVE_DEVICE_SPECIFIC_CONSTANTS);
+ ipw.println("DeviceConfig: " + DeviceConfig.NAMESPACE_BATTERY_SAVER);
ipw.increaseIndent();
- ipw.println("value: " + mAdaptiveDeviceSpecificSettings);
- ipw.decreaseIndent();
+ final Set<String> keys = mLastDeviceConfigProperties.getKeyset();
+ if (keys.size() == 0) {
+ ipw.println("N/A");
+ } else {
+ for (final String key : keys) {
+ ipw.print(key);
+ ipw.print(": ");
+ ipw.println(mLastDeviceConfigProperties.getString(key, null));
+ }
+ }
ipw.println("mAccessibilityEnabled=" + mAccessibilityEnabled.get());
ipw.println("mAutomotiveProjectionActive=" + mAutomotiveProjectionActive.get());
@@ -1078,22 +1157,22 @@ public class BatterySaverPolicy extends ContentObserver {
pw.println("Policy '" + label + "'");
pw.increaseIndent();
pw.println(KEY_ADVERTISE_IS_ENABLED + "=" + p.advertiseIsEnabled);
- pw.println(KEY_VIBRATION_DISABLED + "=" + p.disableVibration);
- pw.println(KEY_ANIMATION_DISABLED + "=" + p.disableAnimation);
- pw.println(KEY_FULLBACKUP_DEFERRED + "=" + p.deferFullBackup);
- pw.println(KEY_KEYVALUE_DEFERRED + "=" + p.deferKeyValueBackup);
- pw.println(KEY_ACTIVATE_FIREWALL_DISABLED + "=" + !p.enableFirewall);
- pw.println(KEY_ACTIVATE_DATASAVER_DISABLED + "=" + !p.enableDataSaver);
- pw.println(KEY_LAUNCH_BOOST_DISABLED + "=" + p.disableLaunchBoost);
- pw.println(KEY_ADJUST_BRIGHTNESS_DISABLED + "=" + !p.enableAdjustBrightness);
+ pw.println(KEY_DISABLE_VIBRATION + "=" + p.disableVibration);
+ pw.println(KEY_DISABLE_ANIMATION + "=" + p.disableAnimation);
+ pw.println(KEY_DEFER_FULL_BACKUP + "=" + p.deferFullBackup);
+ pw.println(KEY_DEFER_KEYVALUE_BACKUP + "=" + p.deferKeyValueBackup);
+ pw.println(KEY_ENABLE_FIREWALL + "=" + p.enableFirewall);
+ pw.println(KEY_ENABLE_DATASAVER + "=" + p.enableDataSaver);
+ pw.println(KEY_DISABLE_LAUNCH_BOOST + "=" + p.disableLaunchBoost);
+ pw.println(KEY_ENABLE_BRIGHTNESS_ADJUSTMENT + "=" + p.enableAdjustBrightness);
pw.println(KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + p.adjustBrightnessFactor);
- pw.println(KEY_GPS_MODE + "=" + p.locationMode);
+ pw.println(KEY_LOCATION_MODE + "=" + p.locationMode);
pw.println(KEY_FORCE_ALL_APPS_STANDBY + "=" + p.forceAllAppsStandby);
pw.println(KEY_FORCE_BACKGROUND_CHECK + "=" + p.forceBackgroundCheck);
- pw.println(KEY_OPTIONAL_SENSORS_DISABLED + "=" + p.disableOptionalSensors);
- pw.println(KEY_AOD_DISABLED + "=" + p.disableAod);
- pw.println(KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger);
- pw.println(KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze);
+ pw.println(KEY_DISABLE_OPTIONAL_SENSORS + "=" + p.disableOptionalSensors);
+ pw.println(KEY_DISABLE_AOD + "=" + p.disableAod);
+ pw.println(KEY_DISABLE_SOUNDTRIGGER + "=" + p.disableSoundTrigger);
+ pw.println(KEY_ENABLE_QUICK_DOZE + "=" + p.enableQuickDoze);
pw.println(KEY_ENABLE_NIGHT_MODE + "=" + p.enableNightMode);
pw.println("Interactive File values:");
diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
index fb6b29e4188e..9bd488d3df7e 100644
--- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
@@ -25,6 +25,7 @@ import android.content.Context;
import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerSaveState;
+import android.provider.DeviceConfig;
import android.provider.Settings.Global;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -47,19 +48,19 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
private static final int GPS_MODE = 0; // LOCATION_MODE_NO_CHANGE
private static final int DEFAULT_GPS_MODE =
PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF;
- private static final String BATTERY_SAVER_CONSTANTS = "vibration_disabled=true,"
+ private static final String BATTERY_SAVER_CONSTANTS = "disable_vibration=true,"
+ "advertise_is_enabled=true,"
- + "animation_disabled=false,"
- + "soundtrigger_disabled=true,"
- + "firewall_disabled=false,"
- + "datasaver_disabled=false,"
- + "adjust_brightness_disabled=true,"
+ + "disable_animation=false,"
+ + "disable_soundtrigger=true,"
+ + "enable_firewall=true,"
+ + "enable_datasaver=true,"
+ + "enable_brightness_adjustment=false,"
+ "adjust_brightness_factor=0.7,"
- + "fullbackup_deferred=true,"
- + "keyvaluebackup_deferred=false,"
- + "gps_mode=0," // LOCATION_MODE_NO_CHANGE
+ + "defer_full_backup=true,"
+ + "defer_keyvalue_backup=false,"
+ + "location_mode=0," // LOCATION_MODE_NO_CHANGE
+ "enable_night_mode=false,"
- + "quick_doze_enabled=true";
+ + "enable_quick_doze=true";
private static final String BATTERY_SAVER_INCORRECT_CONSTANTS = "vi*,!=,,true";
private class BatterySaverPolicyForTest extends BatterySaverPolicy {
@@ -336,13 +337,15 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
}
mBatterySaverPolicy.setAdaptivePolicyLocked(
- Policy.fromSettings(BATTERY_SAVER_CONSTANTS, ""));
+ Policy.fromSettings(BATTERY_SAVER_CONSTANTS, "",
+ new DeviceConfig.Properties.Builder(
+ DeviceConfig.NAMESPACE_BATTERY_SAVER).build(), null));
verifyBatterySaverConstantsUpdated();
}
public void testAutomotiveProjectionChanges_Full() {
mBatterySaverPolicy.updateConstantsLocked(
- "gps_mode=" + PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF
+ "location_mode=" + PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF
+ ",enable_night_mode=true", "");
mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
assertThat(mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.LOCATION).locationMode)
@@ -369,8 +372,10 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
public void testAutomotiveProjectionChanges_Adaptive() {
mBatterySaverPolicy.setAdaptivePolicyLocked(
Policy.fromSettings(
- "gps_mode=" + PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF
- + ",enable_night_mode=true", ""));
+ "location_mode=" + PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF
+ + ",enable_night_mode=true", "",
+ new DeviceConfig.Properties.Builder(
+ DeviceConfig.NAMESPACE_BATTERY_SAVER).build(), null));
mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_ADAPTIVE);
assertThat(mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.LOCATION).locationMode)
.isEqualTo(PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF);
@@ -392,4 +397,188 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
assertTrue(mBatterySaverPolicy.getBatterySaverPolicy(
ServiceType.NIGHT_MODE).batterySaverEnabled);
}
+
+ public void testUserSettingsOverrideDeviceConfig() {
+ Policy policy = Policy.fromSettings(
+ BatterySaverPolicy.KEY_ADJUST_BRIGHTNESS_FACTOR + "=.1"
+ + "," + BatterySaverPolicy.KEY_ADVERTISE_IS_ENABLED + "=true"
+ + "," + BatterySaverPolicy.KEY_DEFER_FULL_BACKUP + "=true"
+ + "," + BatterySaverPolicy.KEY_DEFER_KEYVALUE_BACKUP + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_ANIMATION + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_AOD + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_LAUNCH_BOOST + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_OPTIONAL_SENSORS + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_SOUNDTRIGGER + "=true"
+ + "," + BatterySaverPolicy.KEY_DISABLE_VIBRATION + "=true"
+ + "," + BatterySaverPolicy.KEY_ENABLE_BRIGHTNESS_ADJUSTMENT + "=true"
+ + "," + BatterySaverPolicy.KEY_ENABLE_DATASAVER + "=true"
+ + "," + BatterySaverPolicy.KEY_ENABLE_FIREWALL + "=true"
+ + "," + BatterySaverPolicy.KEY_ENABLE_NIGHT_MODE + "=true"
+ + "," + BatterySaverPolicy.KEY_ENABLE_QUICK_DOZE + "=true"
+ + "," + BatterySaverPolicy.KEY_FORCE_ALL_APPS_STANDBY + "=true"
+ + "," + BatterySaverPolicy.KEY_FORCE_BACKGROUND_CHECK + "=true"
+ + "," + BatterySaverPolicy.KEY_LOCATION_MODE
+ + "=" + PowerManager.LOCATION_MODE_FOREGROUND_ONLY,
+ "",
+ new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_BATTERY_SAVER)
+ .setFloat(BatterySaverPolicy.KEY_ADJUST_BRIGHTNESS_FACTOR, .5f)
+ .setBoolean(BatterySaverPolicy.KEY_ADVERTISE_IS_ENABLED, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_FULL_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_KEYVALUE_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_ANIMATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_AOD, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_LAUNCH_BOOST, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_OPTIONAL_SENSORS, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_SOUNDTRIGGER, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_VIBRATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_BRIGHTNESS_ADJUSTMENT, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_DATASAVER, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_FIREWALL, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_NIGHT_MODE, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_QUICK_DOZE, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_ALL_APPS_STANDBY, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_BACKGROUND_CHECK, false)
+ .setInt(BatterySaverPolicy.KEY_LOCATION_MODE,
+ PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF)
+ .build(),
+ null);
+ assertEquals(.1f, policy.adjustBrightnessFactor);
+ assertTrue(policy.advertiseIsEnabled);
+ assertTrue(policy.deferFullBackup);
+ assertTrue(policy.deferKeyValueBackup);
+ assertTrue(policy.disableAnimation);
+ assertTrue(policy.disableAod);
+ assertTrue(policy.disableLaunchBoost);
+ assertTrue(policy.disableOptionalSensors);
+ assertTrue(policy.disableSoundTrigger);
+ assertTrue(policy.disableVibration);
+ assertTrue(policy.enableAdjustBrightness);
+ assertTrue(policy.enableDataSaver);
+ assertTrue(policy.enableFirewall);
+ assertTrue(policy.enableNightMode);
+ assertTrue(policy.enableQuickDoze);
+ assertTrue(policy.forceAllAppsStandby);
+ assertTrue(policy.forceBackgroundCheck);
+ assertEquals(PowerManager.LOCATION_MODE_FOREGROUND_ONLY, policy.locationMode);
+ }
+
+ public void testDeviceConfigOverridesDefaults() {
+ Policy policy = Policy.fromSettings(
+ "", "",
+ new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_BATTERY_SAVER)
+ .setFloat(BatterySaverPolicy.KEY_ADJUST_BRIGHTNESS_FACTOR, .5f)
+ .setBoolean(BatterySaverPolicy.KEY_ADVERTISE_IS_ENABLED, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_FULL_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_KEYVALUE_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_ANIMATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_AOD, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_LAUNCH_BOOST, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_OPTIONAL_SENSORS, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_SOUNDTRIGGER, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_VIBRATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_BRIGHTNESS_ADJUSTMENT, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_DATASAVER, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_FIREWALL, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_NIGHT_MODE, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_QUICK_DOZE, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_ALL_APPS_STANDBY, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_BACKGROUND_CHECK, false)
+ .setInt(BatterySaverPolicy.KEY_LOCATION_MODE,
+ PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF)
+ .build(),
+ null);
+ assertEquals(.5f, policy.adjustBrightnessFactor);
+ assertFalse(policy.advertiseIsEnabled);
+ assertFalse(policy.deferFullBackup);
+ assertFalse(policy.deferKeyValueBackup);
+ assertFalse(policy.disableAnimation);
+ assertFalse(policy.disableAod);
+ assertFalse(policy.disableLaunchBoost);
+ assertFalse(policy.disableOptionalSensors);
+ assertFalse(policy.disableSoundTrigger);
+ assertFalse(policy.disableVibration);
+ assertFalse(policy.enableAdjustBrightness);
+ assertFalse(policy.enableDataSaver);
+ assertFalse(policy.enableFirewall);
+ assertFalse(policy.enableNightMode);
+ assertFalse(policy.enableQuickDoze);
+ assertFalse(policy.forceAllAppsStandby);
+ assertFalse(policy.forceBackgroundCheck);
+ assertEquals(PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF,
+ policy.locationMode);
+ }
+
+ public void testDeviceConfig_AdaptiveValues() {
+ final String adaptiveSuffix = "_adaptive";
+ Policy policy = Policy.fromSettings(
+ "", "",
+ new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_BATTERY_SAVER)
+ .setFloat(BatterySaverPolicy.KEY_ADJUST_BRIGHTNESS_FACTOR, .5f)
+ .setBoolean(BatterySaverPolicy.KEY_ADVERTISE_IS_ENABLED, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_FULL_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_KEYVALUE_BACKUP, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_ANIMATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_AOD, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_LAUNCH_BOOST, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_OPTIONAL_SENSORS, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_SOUNDTRIGGER, false)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_VIBRATION, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_BRIGHTNESS_ADJUSTMENT, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_DATASAVER, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_FIREWALL, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_NIGHT_MODE, false)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_QUICK_DOZE, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_ALL_APPS_STANDBY, false)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_BACKGROUND_CHECK, false)
+ .setInt(BatterySaverPolicy.KEY_LOCATION_MODE,
+ PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF)
+ .setFloat(BatterySaverPolicy.KEY_ADJUST_BRIGHTNESS_FACTOR + adaptiveSuffix,
+ .9f)
+ .setBoolean(BatterySaverPolicy.KEY_ADVERTISE_IS_ENABLED + adaptiveSuffix,
+ true)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_FULL_BACKUP + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_DEFER_KEYVALUE_BACKUP + adaptiveSuffix,
+ true)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_ANIMATION + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_AOD + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_LAUNCH_BOOST + adaptiveSuffix,
+ true)
+ .setBoolean(
+ BatterySaverPolicy.KEY_DISABLE_OPTIONAL_SENSORS + adaptiveSuffix,
+ true)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_SOUNDTRIGGER + adaptiveSuffix,
+ true)
+ .setBoolean(BatterySaverPolicy.KEY_DISABLE_VIBRATION + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_BRIGHTNESS_ADJUSTMENT
+ + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_DATASAVER + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_FIREWALL + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_NIGHT_MODE + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_ENABLE_QUICK_DOZE + adaptiveSuffix, true)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_ALL_APPS_STANDBY + adaptiveSuffix,
+ true)
+ .setBoolean(BatterySaverPolicy.KEY_FORCE_BACKGROUND_CHECK + adaptiveSuffix,
+ true)
+ .setInt(BatterySaverPolicy.KEY_LOCATION_MODE + adaptiveSuffix,
+ PowerManager.LOCATION_MODE_FOREGROUND_ONLY)
+ .build(), adaptiveSuffix);
+ assertEquals(.9f, policy.adjustBrightnessFactor);
+ assertTrue(policy.advertiseIsEnabled);
+ assertTrue(policy.deferFullBackup);
+ assertTrue(policy.deferKeyValueBackup);
+ assertTrue(policy.disableAnimation);
+ assertTrue(policy.disableAod);
+ assertTrue(policy.disableLaunchBoost);
+ assertTrue(policy.disableOptionalSensors);
+ assertTrue(policy.disableSoundTrigger);
+ assertTrue(policy.disableVibration);
+ assertTrue(policy.enableAdjustBrightness);
+ assertTrue(policy.enableDataSaver);
+ assertTrue(policy.enableFirewall);
+ assertTrue(policy.enableNightMode);
+ assertTrue(policy.enableQuickDoze);
+ assertTrue(policy.forceAllAppsStandby);
+ assertTrue(policy.forceBackgroundCheck);
+ assertEquals(PowerManager.LOCATION_MODE_FOREGROUND_ONLY, policy.locationMode);
+ }
}