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

Commit 171d5602 authored by Chen Bai's avatar Chen Bai
Browse files

job: make charging constraint update criteria customizable

Make JobScheduler's charging constraint update criteria customizable to
adapt devices other than phone.

The criterias are:
  1. BATTERY_CHARGING_STATE_UPDATE_DELAY
  2. (newly added) BATTERY_CHARGING_STATE_ENFORCE_LEVEL

Their default values are init by SettingsProvider
and configured by res/values/default.xml as:
  - def_battery_charging_state_update_delay_ms
  - def_battery_charging_state_enforce_level

Other device now can override the default values by defining them in
device overlay default.xml.

Test: go/wear-charging-constraints-verification
BUG: 258718987
BUG: 308679533
Change-Id: I5d329db0ab67df203353f18a5afa5f9a182b5867
parent ff0bd87d
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -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>
@@ -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
@@ -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.
         *
+8 −0
Original line number Diff line number Diff line
@@ -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>
+17 −2
Original line number Diff line number Diff line
@@ -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;

@@ -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.
+1 −0
Original line number Diff line number Diff line
@@ -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,
+35 −3
Original line number Diff line number Diff line
@@ -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) {
@@ -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 =
@@ -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;
@@ -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;
@@ -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();
        }
@@ -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();
        }
@@ -15477,6 +15491,7 @@ public class BatteryStatsImpl extends BatteryStats {
                        DEFAULT_RESET_WHILE_PLUGGED_IN_MINIMUM_DURATION_HOURS);
                updateBatteryChargedDelayMsLocked();
                updateBatteryChargingEnforceLevelLocked();
                onChange();
            }
@@ -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) {
@@ -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("=");