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

Commit 4b976ad2 authored by Lei Yu's avatar Lei Yu Committed by Amith Yamasani
Browse files

Add ADAPTIVE_BATTERY_MANAGEMENT_ENABLED

APP_STANDBY_ENABLED is controlled by server side to do experiment.
Before this CL, Adaptive Battery is hooked up to this flag, so
even though if user turns it off, it may be turned on by server.

Add a high level ADAPTIVE_BATTERY_MANAGEMENT_ENABLED to control
the feature in settings UI side.

AppStandbyController looks at both flags and enables standby
only if both are true.

Bug: 78153913
Test: Build
      Manually change both flags (through UI and adb)
      Verify dumpsys usagestats shows the correct state
      for mAppIdleEnabled.
Change-Id: I1fb4461f382e1ee87000fdc38962d94a17891c1e
parent a5843ebb
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -10795,14 +10795,27 @@ public final class Settings {
        public static final String SYNC_MANAGER_CONSTANTS = "sync_manager_constants";
        /**
         * Whether or not App Standby feature is enabled. This controls throttling of apps
         * based on usage patterns and predictions.
         * Whether or not App Standby feature is enabled by system. This controls throttling of apps
         * based on usage patterns and predictions. Platform will turn on this feature if both this
         * flag and {@link #ADAPTIVE_BATTERY_MANAGEMENT_ENABLED} is on.
         * Type: int (0 for false, 1 for true)
         * Default: 1
         * @hide
         * @see #ADAPTIVE_BATTERY_MANAGEMENT_ENABLED
         */
        public static final String APP_STANDBY_ENABLED = "app_standby_enabled";
        /**
         * Whether or not adaptive battery feature is enabled by user. Platform will turn on this
         * feature if both this flag and {@link #APP_STANDBY_ENABLED} is on.
         * Type: int (0 for false, 1 for true)
         * Default: 1
         * @hide
         * @see #APP_STANDBY_ENABLED
         */
        public static final String ADAPTIVE_BATTERY_MANAGEMENT_ENABLED =
                "adaptive_battery_management_enabled";
        /**
         * Whether or not app auto restriction is enabled. When it is enabled, settings app will
         * auto restrict the app if it has bad behavior(e.g. hold wakelock for long time).
+1 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ public class SettingsBackupTest {
    private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS =
            newHashSet(
                    Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
                    Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED,
                    Settings.Global.ADB_ENABLED,
                    Settings.Global.ADD_USERS_WHEN_LOCKED,
                    Settings.Global.AIRPLANE_MODE_ON,
+20 −14
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.telephony.TelephonyManager;
import android.util.ArraySet;
import android.util.KeyValueListParser;
@@ -1397,8 +1397,10 @@ public class AppStandbyController {
        boolean isAppIdleEnabled() {
            final boolean buildFlag = mContext.getResources().getBoolean(
                    com.android.internal.R.bool.config_enableAutoPowerModes);
            final boolean runtimeFlag = Settings.Global.getInt(mContext.getContentResolver(),
                    Settings.Global.APP_STANDBY_ENABLED, 1) == 1;
            final boolean runtimeFlag = Global.getInt(mContext.getContentResolver(),
                    Global.APP_STANDBY_ENABLED, 1) == 1
                    && Global.getInt(mContext.getContentResolver(),
                    Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1) == 1;
            return buildFlag && runtimeFlag;
        }

@@ -1447,8 +1449,8 @@ public class AppStandbyController {
        }

        String getAppIdleSettings() {
            return Settings.Global.getString(mContext.getContentResolver(),
                    Settings.Global.APP_IDLE_CONSTANTS);
            return Global.getString(mContext.getContentResolver(),
                    Global.APP_IDLE_CONSTANTS);
        }
    }

@@ -1557,7 +1559,7 @@ public class AppStandbyController {
    };

    /**
     * Observe settings changes for {@link Settings.Global#APP_IDLE_CONSTANTS}.
     * Observe settings changes for {@link Global#APP_IDLE_CONSTANTS}.
     */
    private class SettingsObserver extends ContentObserver {
        /**
@@ -1596,10 +1598,11 @@ public class AppStandbyController {
        }

        void registerObserver() {
            mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(
                    Settings.Global.APP_IDLE_CONSTANTS), false, this);
            mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(
                    Settings.Global.APP_STANDBY_ENABLED), false, this);
            final ContentResolver cr = mContext.getContentResolver();
            cr.registerContentObserver(Global.getUriFor(Global.APP_IDLE_CONSTANTS), false, this);
            cr.registerContentObserver(Global.getUriFor(Global.APP_STANDBY_ENABLED), false, this);
            cr.registerContentObserver(Global.getUriFor(Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED),
                    false, this);
        }

        @Override
@@ -1611,11 +1614,14 @@ public class AppStandbyController {
        void updateSettings() {
            if (DEBUG) {
                Slog.d(TAG,
                        "appidle=" + Settings.Global.getString(mContext.getContentResolver(),
                                Settings.Global.APP_STANDBY_ENABLED));
                Slog.d(TAG, "appidleconstants=" + Settings.Global.getString(
                        "appidle=" + Global.getString(mContext.getContentResolver(),
                                Global.APP_STANDBY_ENABLED));
                Slog.d(TAG,
                        "adaptivebat=" + Global.getString(mContext.getContentResolver(),
                                Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED));
                Slog.d(TAG, "appidleconstants=" + Global.getString(
                        mContext.getContentResolver(),
                        Settings.Global.APP_IDLE_CONSTANTS));
                        Global.APP_IDLE_CONSTANTS));
            }
            // Check if app_idle_enabled has changed
            setAppIdleEnabled(mInjector.isAppIdleEnabled());