Loading core/java/android/os/PowerManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,11 @@ public final class PowerManager { * Whether to go into Deep Doze as soon as the screen turns off or not. */ int QUICK_DOZE = 15; /** * Whether to enable night mode when battery saver is enabled. */ int NIGHT_MODE = 16; } /** Loading core/java/android/provider/Settings.java +1 −0 Original line number Diff line number Diff line Loading @@ -11442,6 +11442,7 @@ public final class Settings { * <pre> * advertise_is_enabled (boolean) * datasaver_disabled (boolean) * enable_night_mode (boolean) * launch_boost_disabled (boolean) * vibration_disabled (boolean) * animation_disabled (boolean) Loading services/core/java/com/android/server/UiModeManagerService.java +18 −4 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ import android.os.BatteryManager; import android.os.Binder; import android.os.Handler; import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; Loading Loading @@ -161,9 +163,6 @@ final class UiModeManagerService extends SystemService { case Intent.ACTION_BATTERY_CHANGED: mCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; break; case PowerManager.ACTION_POWER_SAVE_MODE_CHANGING: mPowerSave = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false); break; } synchronized (mLock) { if (mSystemReady) { Loading Loading @@ -208,9 +207,24 @@ final class UiModeManagerService extends SystemService { context.registerReceiver(mDockModeReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT)); IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING); context.registerReceiver(mBatteryReceiver, batteryFilter); PowerManagerInternal localPowerManager = LocalServices.getService(PowerManagerInternal.class); mPowerSave = localPowerManager.getLowPowerState(ServiceType.NIGHT_MODE).batterySaverEnabled; localPowerManager.registerLowPowerModeObserver(ServiceType.NIGHT_MODE, state -> { synchronized (mLock) { if (mPowerSave == state.batterySaverEnabled) { return; } mPowerSave = state.batterySaverEnabled; if (mSystemReady) { updateLocked(0, 0); } } }); mConfiguration.setToDefaults(); final Resources res = context.getResources(); Loading services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java +22 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_AOD_DISABLED = "aod_disabled"; // 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"; private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n"; Loading @@ -123,6 +124,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ false, /* enableFireWall */ false, /* enableNightMode */ false, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ Loading @@ -147,6 +149,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ true, /* enableFirewall */ true, /* enableNightMode */ true, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ Loading Loading @@ -522,6 +525,11 @@ public class BatterySaverPolicy extends ContentObserver { */ public final boolean enableFirewall; /** * Whether to enable night mode or not. */ public final boolean enableNightMode; /** * Whether Quick Doze is enabled or not. */ Loading Loading @@ -578,6 +586,7 @@ public class BatterySaverPolicy extends ContentObserver { boolean enableAdjustBrightness, boolean enableDataSaver, boolean enableFirewall, boolean enableNightMode, boolean enableQuickDoze, ArrayMap<String, String> filesForInteractive, ArrayMap<String, String> filesForNoninteractive, Loading @@ -598,6 +607,7 @@ public class BatterySaverPolicy extends ContentObserver { this.enableAdjustBrightness = enableAdjustBrightness; this.enableDataSaver = enableDataSaver; this.enableFirewall = enableFirewall; this.enableNightMode = enableNightMode; this.enableQuickDoze = enableQuickDoze; this.filesForInteractive = filesForInteractive; this.filesForNoninteractive = filesForNoninteractive; Loading @@ -619,6 +629,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, enableNightMode, enableQuickDoze, filesForInteractive, filesForNoninteractive, Loading Loading @@ -654,6 +665,8 @@ public class BatterySaverPolicy extends ContentObserver { config.getEnableAdjustBrightness(), config.getEnableDataSaver(), config.getEnableFirewall(), // TODO: add option to config config.getAdvertiseIsEnabled(), config.getEnableQuickDoze(), /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), Loading Loading @@ -716,6 +729,8 @@ public class BatterySaverPolicy extends ContentObserver { !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, Loading @@ -739,6 +754,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, enableNightMode, enableQuickDoze, /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), Loading Loading @@ -768,6 +784,7 @@ public class BatterySaverPolicy extends ContentObserver { && enableAdjustBrightness == other.enableAdjustBrightness && enableDataSaver == other.enableDataSaver && enableFirewall == other.enableFirewall && enableNightMode == other.enableNightMode && enableQuickDoze == other.enableQuickDoze && forceAllAppsStandby == other.forceAllAppsStandby && forceBackgroundCheck == other.forceBackgroundCheck Loading Loading @@ -833,6 +850,9 @@ public class BatterySaverPolicy extends ContentObserver { case ServiceType.FORCE_BACKGROUND_CHECK: return builder.setBatterySaverEnabled(currPolicy.forceBackgroundCheck) .build(); case ServiceType.NIGHT_MODE: return builder.setBatterySaverEnabled(currPolicy.enableNightMode) .build(); case ServiceType.OPTIONAL_SENSORS: return builder.setBatterySaverEnabled(currPolicy.disableOptionalSensors) .build(); Loading Loading @@ -1009,6 +1029,8 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger); pw.print(indent); pw.println(" " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze); pw.print(indent); pw.println(" " + KEY_ENABLE_NIGHT_MODE + "=" + p.enableNightMode); pw.print(" Interactive File values:\n"); dumpMap(pw, " ", p.filesForInteractive); Loading services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ import org.mockito.MockitoAnnotations; * Tests for {@link com.android.server.power.batterysaver.BatterySaverPolicy} */ public class BatterySaverPolicyTest extends AndroidTestCase { private static final int MAX_SERVICE_TYPE = 15; private static final int MAX_SERVICE_TYPE = 16; private static final float BRIGHTNESS_FACTOR = 0.7f; private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f; private static final float PRECISION = 0.001f; Loading Loading @@ -145,6 +145,11 @@ public class BatterySaverPolicyTest extends AndroidTestCase { testServiceDefaultValue_On(ServiceType.NETWORK_FIREWALL); } @SmallTest public void testGetBatterySaverPolicy_PolicyNightMode_DefaultValueCorrect() { testServiceDefaultValue_On(ServiceType.NIGHT_MODE); } @SmallTest public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() { mBatterySaverPolicy.updateConstantsLocked("", ""); Loading Loading
core/java/android/os/PowerManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,11 @@ public final class PowerManager { * Whether to go into Deep Doze as soon as the screen turns off or not. */ int QUICK_DOZE = 15; /** * Whether to enable night mode when battery saver is enabled. */ int NIGHT_MODE = 16; } /** Loading
core/java/android/provider/Settings.java +1 −0 Original line number Diff line number Diff line Loading @@ -11442,6 +11442,7 @@ public final class Settings { * <pre> * advertise_is_enabled (boolean) * datasaver_disabled (boolean) * enable_night_mode (boolean) * launch_boost_disabled (boolean) * vibration_disabled (boolean) * animation_disabled (boolean) Loading
services/core/java/com/android/server/UiModeManagerService.java +18 −4 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ import android.os.BatteryManager; import android.os.Binder; import android.os.Handler; import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; Loading Loading @@ -161,9 +163,6 @@ final class UiModeManagerService extends SystemService { case Intent.ACTION_BATTERY_CHANGED: mCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; break; case PowerManager.ACTION_POWER_SAVE_MODE_CHANGING: mPowerSave = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false); break; } synchronized (mLock) { if (mSystemReady) { Loading Loading @@ -208,9 +207,24 @@ final class UiModeManagerService extends SystemService { context.registerReceiver(mDockModeReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT)); IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING); context.registerReceiver(mBatteryReceiver, batteryFilter); PowerManagerInternal localPowerManager = LocalServices.getService(PowerManagerInternal.class); mPowerSave = localPowerManager.getLowPowerState(ServiceType.NIGHT_MODE).batterySaverEnabled; localPowerManager.registerLowPowerModeObserver(ServiceType.NIGHT_MODE, state -> { synchronized (mLock) { if (mPowerSave == state.batterySaverEnabled) { return; } mPowerSave = state.batterySaverEnabled; if (mSystemReady) { updateLocked(0, 0); } } }); mConfiguration.setToDefaults(); final Resources res = context.getResources(); Loading
services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java +22 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_AOD_DISABLED = "aod_disabled"; // 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"; private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n"; Loading @@ -123,6 +124,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ false, /* enableFireWall */ false, /* enableNightMode */ false, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ Loading @@ -147,6 +149,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ true, /* enableFirewall */ true, /* enableNightMode */ true, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ Loading Loading @@ -522,6 +525,11 @@ public class BatterySaverPolicy extends ContentObserver { */ public final boolean enableFirewall; /** * Whether to enable night mode or not. */ public final boolean enableNightMode; /** * Whether Quick Doze is enabled or not. */ Loading Loading @@ -578,6 +586,7 @@ public class BatterySaverPolicy extends ContentObserver { boolean enableAdjustBrightness, boolean enableDataSaver, boolean enableFirewall, boolean enableNightMode, boolean enableQuickDoze, ArrayMap<String, String> filesForInteractive, ArrayMap<String, String> filesForNoninteractive, Loading @@ -598,6 +607,7 @@ public class BatterySaverPolicy extends ContentObserver { this.enableAdjustBrightness = enableAdjustBrightness; this.enableDataSaver = enableDataSaver; this.enableFirewall = enableFirewall; this.enableNightMode = enableNightMode; this.enableQuickDoze = enableQuickDoze; this.filesForInteractive = filesForInteractive; this.filesForNoninteractive = filesForNoninteractive; Loading @@ -619,6 +629,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, enableNightMode, enableQuickDoze, filesForInteractive, filesForNoninteractive, Loading Loading @@ -654,6 +665,8 @@ public class BatterySaverPolicy extends ContentObserver { config.getEnableAdjustBrightness(), config.getEnableDataSaver(), config.getEnableFirewall(), // TODO: add option to config config.getAdvertiseIsEnabled(), config.getEnableQuickDoze(), /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), Loading Loading @@ -716,6 +729,8 @@ public class BatterySaverPolicy extends ContentObserver { !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, Loading @@ -739,6 +754,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, enableNightMode, enableQuickDoze, /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), Loading Loading @@ -768,6 +784,7 @@ public class BatterySaverPolicy extends ContentObserver { && enableAdjustBrightness == other.enableAdjustBrightness && enableDataSaver == other.enableDataSaver && enableFirewall == other.enableFirewall && enableNightMode == other.enableNightMode && enableQuickDoze == other.enableQuickDoze && forceAllAppsStandby == other.forceAllAppsStandby && forceBackgroundCheck == other.forceBackgroundCheck Loading Loading @@ -833,6 +850,9 @@ public class BatterySaverPolicy extends ContentObserver { case ServiceType.FORCE_BACKGROUND_CHECK: return builder.setBatterySaverEnabled(currPolicy.forceBackgroundCheck) .build(); case ServiceType.NIGHT_MODE: return builder.setBatterySaverEnabled(currPolicy.enableNightMode) .build(); case ServiceType.OPTIONAL_SENSORS: return builder.setBatterySaverEnabled(currPolicy.disableOptionalSensors) .build(); Loading Loading @@ -1009,6 +1029,8 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger); pw.print(indent); pw.println(" " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze); pw.print(indent); pw.println(" " + KEY_ENABLE_NIGHT_MODE + "=" + p.enableNightMode); pw.print(" Interactive File values:\n"); dumpMap(pw, " ", p.filesForInteractive); Loading
services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ import org.mockito.MockitoAnnotations; * Tests for {@link com.android.server.power.batterysaver.BatterySaverPolicy} */ public class BatterySaverPolicyTest extends AndroidTestCase { private static final int MAX_SERVICE_TYPE = 15; private static final int MAX_SERVICE_TYPE = 16; private static final float BRIGHTNESS_FACTOR = 0.7f; private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f; private static final float PRECISION = 0.001f; Loading Loading @@ -145,6 +145,11 @@ public class BatterySaverPolicyTest extends AndroidTestCase { testServiceDefaultValue_On(ServiceType.NETWORK_FIREWALL); } @SmallTest public void testGetBatterySaverPolicy_PolicyNightMode_DefaultValueCorrect() { testServiceDefaultValue_On(ServiceType.NIGHT_MODE); } @SmallTest public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() { mBatterySaverPolicy.updateConstantsLocked("", ""); Loading