Adding enableNightMode flag to BatterySaverPolicy.
Also migrating UiModeManagerService to register a LowPowerModeListener so it uses the more standard interface for Battery Saver. Bug: 119261320 Bug: 122968431 Test: atest com.android.server.power.batterysaver.BatterySaverPolicyTest Change-Id: I669737d5985d0b2835740a53695526a2119cdf49
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11443,6 +11443,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)
|
||||
|
||||
@@ -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;
|
||||
@@ -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) {
|
||||
@@ -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();
|
||||
|
||||
@@ -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";
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -577,6 +585,7 @@ public class BatterySaverPolicy extends ContentObserver {
|
||||
boolean enableAdjustBrightness,
|
||||
boolean enableDataSaver,
|
||||
boolean enableFirewall,
|
||||
boolean enableNightMode,
|
||||
boolean enableQuickDoze,
|
||||
ArrayMap<String, String> filesForInteractive,
|
||||
ArrayMap<String, String> filesForNoninteractive,
|
||||
@@ -597,6 +606,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;
|
||||
@@ -618,6 +628,7 @@ public class BatterySaverPolicy extends ContentObserver {
|
||||
enableAdjustBrightness,
|
||||
enableDataSaver,
|
||||
enableFirewall,
|
||||
enableNightMode,
|
||||
enableQuickDoze,
|
||||
filesForInteractive,
|
||||
filesForNoninteractive,
|
||||
@@ -653,6 +664,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(),
|
||||
@@ -715,6 +728,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,
|
||||
@@ -738,6 +753,7 @@ public class BatterySaverPolicy extends ContentObserver {
|
||||
enableAdjustBrightness,
|
||||
enableDataSaver,
|
||||
enableFirewall,
|
||||
enableNightMode,
|
||||
enableQuickDoze,
|
||||
/* filesForInteractive */
|
||||
(new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(),
|
||||
@@ -767,6 +783,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
|
||||
@@ -832,6 +849,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();
|
||||
@@ -1008,6 +1028,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);
|
||||
|
||||
@@ -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;
|
||||
@@ -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("", "");
|
||||
|
||||
Reference in New Issue
Block a user