Loading core/java/android/provider/Settings.java +22 −2 Original line number Diff line number Diff line Loading @@ -15279,6 +15279,7 @@ public final class Settings { * max_history_files (int) * max_history_buffer_kb (int) * battery_charged_delay_ms (int) * battery_charging_enforce_level (int) * </pre> * * <p> Loading Loading @@ -18306,8 +18307,11 @@ public final class Settings { /** * Delay for sending ACTION_CHARGING after device is plugged in. * This is used as an override for constants defined in BatteryStatsImpl for * ease of experimentation. * This is used as an override for constants defined in BatteryStatsImpl. Its purposes are: * <ol> * <li>Ease of experimentation</li> * <li>Customization of different device</li> * </ol> * * @see com.android.internal.os.BatteryStatsImpl.Constants.KEY_BATTERY_CHARGED_DELAY_MS * @hide Loading @@ -18316,6 +18320,22 @@ public final class Settings { public static final String BATTERY_CHARGING_STATE_UPDATE_DELAY = "battery_charging_state_update_delay"; /** * Threshold battery level to enforce battery state as charging. That means when battery * level is equal to or higher than this threshold, it is always considered charging, even * if battery level lowered. * This is used as an override for constants defined in BatteryStatsImpl. Its purposes are: * <ol> * <li>Ease of experimentation</li> * <li>Customization of different device</li> * </ol> * * @hide * @see com.android.internal.os.BatteryStatsImpl.Constants.BATTERY_CHARGING_ENFORCE_LEVEL */ public static final String BATTERY_CHARGING_STATE_ENFORCE_LEVEL = "battery_charging_state_enforce_level"; /** * A serialized string of params that will be loaded into a text classifier action model. * packages/SettingsProvider/res/values/defaults.xml +8 −0 Original line number Diff line number Diff line Loading @@ -327,4 +327,12 @@ <!-- Whether wifi is always requested by default. --> <bool name="def_enable_wifi_always_requested">false</bool> <!-- Default for Settings.BATTERY_CHARGING_STATE_UPDATE_DELAY in millisecond. -1 means system internal default value is used. --> <integer name="def_battery_charging_state_update_delay_ms">-1</integer> <!-- Default for Settings.BATTERY_CHARGING_STATE_ENFORCE_LEVEL. -1 means system internal default value is used. --> <integer name="def_battery_charging_state_enforce_level">-1</integer> </resources> packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +17 −2 Original line number Diff line number Diff line Loading @@ -3792,7 +3792,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { private static final int SETTINGS_VERSION = 223; private static final int SETTINGS_VERSION = 224; private final int mUserId; Loading Loading @@ -5965,8 +5965,23 @@ public class SettingsProvider extends ContentProvider { // Do nothing. Leave the value as is. } } } currentVersion = 223; // Version 223: make charging constraint update criteria customizable. if (currentVersion == 223) { initGlobalSettingsDefaultValLocked( Global.BATTERY_CHARGING_STATE_UPDATE_DELAY, getContext().getResources().getInteger( R.integer.def_battery_charging_state_update_delay_ms)); initGlobalSettingsDefaultValLocked( Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, getContext().getResources().getInteger( R.integer.def_battery_charging_state_enforce_level) ); currentVersion = 224; } // vXXX: Add new settings above this point. Loading packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ public class SettingsBackupTest { Settings.Global.AUTOFILL_MAX_VISIBLE_DATASETS, Settings.Global.AUTO_TIME_ZONE_EXPLICIT, Settings.Global.AVERAGE_TIME_TO_DISCHARGE, Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, Settings.Global.BATTERY_CHARGING_STATE_UPDATE_DELAY, Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME, Settings.Global.BROADCAST_BG_CONSTANTS, Loading services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +35 −3 Original line number Diff line number Diff line Loading @@ -14575,9 +14575,10 @@ public class BatteryStatsImpl extends BatteryStats { mModStepMode = 0; } } else { if (level >= 90) { // If the battery level is at least 90%, always consider the device to be // charging even if it happens to go down a level. if (level >= mConstants.BATTERY_CHARGING_ENFORCE_LEVEL) { // If the battery level is at least Constants.BATTERY_CHARGING_ENFORCE_LEVEL, // always consider the device to be charging even if it happens to go down a // level. changed |= setChargingLocked(true); } else if (!mCharging) { if (mLastChargeStepLevel < level) { Loading Loading @@ -15313,6 +15314,8 @@ public class BatteryStatsImpl extends BatteryStats { public static final String KEY_MAX_HISTORY_BUFFER_KB = "max_history_buffer_kb"; public static final String KEY_BATTERY_CHARGED_DELAY_MS = "battery_charged_delay_ms"; public static final String KEY_BATTERY_CHARGING_ENFORCE_LEVEL = "battery_charging_enforce_level"; public static final String KEY_PER_UID_MODEM_POWER_MODEL = "per_uid_modem_power_model"; public static final String KEY_PHONE_ON_EXTERNAL_STATS_COLLECTION = Loading Loading @@ -15363,6 +15366,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE = 64; private static final int DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB = 64; /*Kilo Bytes*/ private static final int DEFAULT_BATTERY_CHARGED_DELAY_MS = 900000; /* 15 min */ private static final int DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL = 90; @PerUidModemPowerModel private static final int DEFAULT_PER_UID_MODEM_MODEL = PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX; Loading @@ -15384,6 +15388,7 @@ public class BatteryStatsImpl extends BatteryStats { public int MAX_HISTORY_FILES; public int MAX_HISTORY_BUFFER; /*Bytes*/ public int BATTERY_CHARGED_DELAY_MS = DEFAULT_BATTERY_CHARGED_DELAY_MS; public int BATTERY_CHARGING_ENFORCE_LEVEL = DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL; public int PER_UID_MODEM_MODEL = DEFAULT_PER_UID_MODEM_MODEL; public boolean PHONE_ON_EXTERNAL_STATS_COLLECTION = DEFAULT_PHONE_ON_EXTERNAL_STATS_COLLECTION; Loading Loading @@ -15412,6 +15417,9 @@ public class BatteryStatsImpl extends BatteryStats { mResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.BATTERY_CHARGING_STATE_UPDATE_DELAY), false /* notifyForDescendants */, this); mResolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL), false /* notifyForDescendants */, this); updateConstants(); } Loading @@ -15424,6 +15432,12 @@ public class BatteryStatsImpl extends BatteryStats { updateBatteryChargedDelayMsLocked(); } return; } else if (uri.equals(Settings.Global.getUriFor( Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL))) { synchronized (BatteryStatsImpl.this) { updateBatteryChargingEnforceLevelLocked(); } return; } updateConstants(); } Loading Loading @@ -15477,6 +15491,7 @@ public class BatteryStatsImpl extends BatteryStats { DEFAULT_RESET_WHILE_PLUGGED_IN_MINIMUM_DURATION_HOURS); updateBatteryChargedDelayMsLocked(); updateBatteryChargingEnforceLevelLocked(); onChange(); } Loading Loading @@ -15507,6 +15522,21 @@ public class BatteryStatsImpl extends BatteryStats { } } private void updateBatteryChargingEnforceLevelLocked() { int lastChargingEnforceLevel = BATTERY_CHARGING_ENFORCE_LEVEL; final int level = Settings.Global.getInt(mResolver, Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, -1); BATTERY_CHARGING_ENFORCE_LEVEL = level >= 0 ? level : mParser.getInt( KEY_BATTERY_CHARGING_ENFORCE_LEVEL, DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL); if (BATTERY_CHARGING_ENFORCE_LEVEL <= mLastChargeStepLevel && mLastChargeStepLevel < lastChargingEnforceLevel) { setChargingLocked(true); } } private void updateKernelUidReadersThrottleTime(long oldTimeMs, long newTimeMs) { KERNEL_UID_READERS_THROTTLE_TIME = newTimeMs; if (oldTimeMs != newTimeMs) { Loading Loading @@ -15541,6 +15571,8 @@ public class BatteryStatsImpl extends BatteryStats { pw.println(MAX_HISTORY_BUFFER/1024); pw.print(KEY_BATTERY_CHARGED_DELAY_MS); pw.print("="); pw.println(BATTERY_CHARGED_DELAY_MS); pw.print(KEY_BATTERY_CHARGING_ENFORCE_LEVEL); pw.print("="); pw.println(BATTERY_CHARGING_ENFORCE_LEVEL); pw.print(KEY_PER_UID_MODEM_POWER_MODEL); pw.print("="); pw.println(getPerUidModemModelName(PER_UID_MODEM_MODEL)); pw.print(KEY_PHONE_ON_EXTERNAL_STATS_COLLECTION); pw.print("="); Loading
core/java/android/provider/Settings.java +22 −2 Original line number Diff line number Diff line Loading @@ -15279,6 +15279,7 @@ public final class Settings { * max_history_files (int) * max_history_buffer_kb (int) * battery_charged_delay_ms (int) * battery_charging_enforce_level (int) * </pre> * * <p> Loading Loading @@ -18306,8 +18307,11 @@ public final class Settings { /** * Delay for sending ACTION_CHARGING after device is plugged in. * This is used as an override for constants defined in BatteryStatsImpl for * ease of experimentation. * This is used as an override for constants defined in BatteryStatsImpl. Its purposes are: * <ol> * <li>Ease of experimentation</li> * <li>Customization of different device</li> * </ol> * * @see com.android.internal.os.BatteryStatsImpl.Constants.KEY_BATTERY_CHARGED_DELAY_MS * @hide Loading @@ -18316,6 +18320,22 @@ public final class Settings { public static final String BATTERY_CHARGING_STATE_UPDATE_DELAY = "battery_charging_state_update_delay"; /** * Threshold battery level to enforce battery state as charging. That means when battery * level is equal to or higher than this threshold, it is always considered charging, even * if battery level lowered. * This is used as an override for constants defined in BatteryStatsImpl. Its purposes are: * <ol> * <li>Ease of experimentation</li> * <li>Customization of different device</li> * </ol> * * @hide * @see com.android.internal.os.BatteryStatsImpl.Constants.BATTERY_CHARGING_ENFORCE_LEVEL */ public static final String BATTERY_CHARGING_STATE_ENFORCE_LEVEL = "battery_charging_state_enforce_level"; /** * A serialized string of params that will be loaded into a text classifier action model. *
packages/SettingsProvider/res/values/defaults.xml +8 −0 Original line number Diff line number Diff line Loading @@ -327,4 +327,12 @@ <!-- Whether wifi is always requested by default. --> <bool name="def_enable_wifi_always_requested">false</bool> <!-- Default for Settings.BATTERY_CHARGING_STATE_UPDATE_DELAY in millisecond. -1 means system internal default value is used. --> <integer name="def_battery_charging_state_update_delay_ms">-1</integer> <!-- Default for Settings.BATTERY_CHARGING_STATE_ENFORCE_LEVEL. -1 means system internal default value is used. --> <integer name="def_battery_charging_state_enforce_level">-1</integer> </resources>
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +17 −2 Original line number Diff line number Diff line Loading @@ -3792,7 +3792,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { private static final int SETTINGS_VERSION = 223; private static final int SETTINGS_VERSION = 224; private final int mUserId; Loading Loading @@ -5965,8 +5965,23 @@ public class SettingsProvider extends ContentProvider { // Do nothing. Leave the value as is. } } } currentVersion = 223; // Version 223: make charging constraint update criteria customizable. if (currentVersion == 223) { initGlobalSettingsDefaultValLocked( Global.BATTERY_CHARGING_STATE_UPDATE_DELAY, getContext().getResources().getInteger( R.integer.def_battery_charging_state_update_delay_ms)); initGlobalSettingsDefaultValLocked( Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, getContext().getResources().getInteger( R.integer.def_battery_charging_state_enforce_level) ); currentVersion = 224; } // vXXX: Add new settings above this point. Loading
packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ public class SettingsBackupTest { Settings.Global.AUTOFILL_MAX_VISIBLE_DATASETS, Settings.Global.AUTO_TIME_ZONE_EXPLICIT, Settings.Global.AVERAGE_TIME_TO_DISCHARGE, Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, Settings.Global.BATTERY_CHARGING_STATE_UPDATE_DELAY, Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME, Settings.Global.BROADCAST_BG_CONSTANTS, Loading
services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +35 −3 Original line number Diff line number Diff line Loading @@ -14575,9 +14575,10 @@ public class BatteryStatsImpl extends BatteryStats { mModStepMode = 0; } } else { if (level >= 90) { // If the battery level is at least 90%, always consider the device to be // charging even if it happens to go down a level. if (level >= mConstants.BATTERY_CHARGING_ENFORCE_LEVEL) { // If the battery level is at least Constants.BATTERY_CHARGING_ENFORCE_LEVEL, // always consider the device to be charging even if it happens to go down a // level. changed |= setChargingLocked(true); } else if (!mCharging) { if (mLastChargeStepLevel < level) { Loading Loading @@ -15313,6 +15314,8 @@ public class BatteryStatsImpl extends BatteryStats { public static final String KEY_MAX_HISTORY_BUFFER_KB = "max_history_buffer_kb"; public static final String KEY_BATTERY_CHARGED_DELAY_MS = "battery_charged_delay_ms"; public static final String KEY_BATTERY_CHARGING_ENFORCE_LEVEL = "battery_charging_enforce_level"; public static final String KEY_PER_UID_MODEM_POWER_MODEL = "per_uid_modem_power_model"; public static final String KEY_PHONE_ON_EXTERNAL_STATS_COLLECTION = Loading Loading @@ -15363,6 +15366,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final int DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE = 64; private static final int DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB = 64; /*Kilo Bytes*/ private static final int DEFAULT_BATTERY_CHARGED_DELAY_MS = 900000; /* 15 min */ private static final int DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL = 90; @PerUidModemPowerModel private static final int DEFAULT_PER_UID_MODEM_MODEL = PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX; Loading @@ -15384,6 +15388,7 @@ public class BatteryStatsImpl extends BatteryStats { public int MAX_HISTORY_FILES; public int MAX_HISTORY_BUFFER; /*Bytes*/ public int BATTERY_CHARGED_DELAY_MS = DEFAULT_BATTERY_CHARGED_DELAY_MS; public int BATTERY_CHARGING_ENFORCE_LEVEL = DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL; public int PER_UID_MODEM_MODEL = DEFAULT_PER_UID_MODEM_MODEL; public boolean PHONE_ON_EXTERNAL_STATS_COLLECTION = DEFAULT_PHONE_ON_EXTERNAL_STATS_COLLECTION; Loading Loading @@ -15412,6 +15417,9 @@ public class BatteryStatsImpl extends BatteryStats { mResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.BATTERY_CHARGING_STATE_UPDATE_DELAY), false /* notifyForDescendants */, this); mResolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL), false /* notifyForDescendants */, this); updateConstants(); } Loading @@ -15424,6 +15432,12 @@ public class BatteryStatsImpl extends BatteryStats { updateBatteryChargedDelayMsLocked(); } return; } else if (uri.equals(Settings.Global.getUriFor( Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL))) { synchronized (BatteryStatsImpl.this) { updateBatteryChargingEnforceLevelLocked(); } return; } updateConstants(); } Loading Loading @@ -15477,6 +15491,7 @@ public class BatteryStatsImpl extends BatteryStats { DEFAULT_RESET_WHILE_PLUGGED_IN_MINIMUM_DURATION_HOURS); updateBatteryChargedDelayMsLocked(); updateBatteryChargingEnforceLevelLocked(); onChange(); } Loading Loading @@ -15507,6 +15522,21 @@ public class BatteryStatsImpl extends BatteryStats { } } private void updateBatteryChargingEnforceLevelLocked() { int lastChargingEnforceLevel = BATTERY_CHARGING_ENFORCE_LEVEL; final int level = Settings.Global.getInt(mResolver, Settings.Global.BATTERY_CHARGING_STATE_ENFORCE_LEVEL, -1); BATTERY_CHARGING_ENFORCE_LEVEL = level >= 0 ? level : mParser.getInt( KEY_BATTERY_CHARGING_ENFORCE_LEVEL, DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL); if (BATTERY_CHARGING_ENFORCE_LEVEL <= mLastChargeStepLevel && mLastChargeStepLevel < lastChargingEnforceLevel) { setChargingLocked(true); } } private void updateKernelUidReadersThrottleTime(long oldTimeMs, long newTimeMs) { KERNEL_UID_READERS_THROTTLE_TIME = newTimeMs; if (oldTimeMs != newTimeMs) { Loading Loading @@ -15541,6 +15571,8 @@ public class BatteryStatsImpl extends BatteryStats { pw.println(MAX_HISTORY_BUFFER/1024); pw.print(KEY_BATTERY_CHARGED_DELAY_MS); pw.print("="); pw.println(BATTERY_CHARGED_DELAY_MS); pw.print(KEY_BATTERY_CHARGING_ENFORCE_LEVEL); pw.print("="); pw.println(BATTERY_CHARGING_ENFORCE_LEVEL); pw.print(KEY_PER_UID_MODEM_POWER_MODEL); pw.print("="); pw.println(getPerUidModemModelName(PER_UID_MODEM_MODEL)); pw.print(KEY_PHONE_ON_EXTERNAL_STATS_COLLECTION); pw.print("=");