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

Commit 8e9625e4 authored by Yeabkal Wubshit's avatar Yeabkal Wubshit
Browse files

Opt out of small battery values for Wear in DeviceIdleController

Before this change, there are some Idle related values that are applied
to small battery devices, without considering those devices' XML config
overlay. This change opts Wear out of the small battery values, so that
Wear devices can freely configure their Idle related constants via the
config overlay.

Bug: 431863848
Test: atest DeviceIdleControllerTest
Flag: EXEMPT trivial refactor
Change-Id: I04d3880e92dd1784a57289b58c0189dd4ec2af6b
parent be9e4032
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -1115,7 +1115,7 @@ public class DeviceIdleController extends SystemService
                !COMPRESS_TIME ? 30 * 1000L : 5 * 1000L;
        private long mDefaultInactiveTimeout =
                (30 * 60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);
        private static final long DEFAULT_INACTIVE_TIMEOUT_SMALL_BATTERY =
        @VisibleForTesting static final long DEFAULT_INACTIVE_TIMEOUT_SMALL_BATTERY =
                (60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);
        private long mDefaultSensingTimeout =
                !COMPRESS_TIME ? 4 * 60 * 1000L : 60 * 1000L;
@@ -1128,7 +1128,7 @@ public class DeviceIdleController extends SystemService
                !COMPRESS_TIME ? 60 * 1000L : 5 * 1000L;
        private long mDefaultIdleAfterInactiveTimeout =
                (30 * 60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);
        private static final long DEFAULT_IDLE_AFTER_INACTIVE_TIMEOUT_SMALL_BATTERY =
        @VisibleForTesting static final long DEFAULT_IDLE_AFTER_INACTIVE_TIMEOUT_SMALL_BATTERY =
                (60 * 1000L) / (!COMPRESS_TIME ? 1 : 10);
        private long mDefaultIdlePendingTimeout =
                !COMPRESS_TIME ? 5 * 60 * 1000L : 30 * 1000L;
@@ -1429,16 +1429,17 @@ public class DeviceIdleController extends SystemService
        public boolean USE_MODE_MANAGER = mDefaultUseModeManager;

        private final ContentResolver mResolver;
        private final boolean mSmallBatteryDevice;
        private final boolean mUseSmallBatteryDeviceValues;
        private final UserSettingDeviceConfigMediator mUserSettingDeviceConfigMediator =
                new UserSettingDeviceConfigMediator.SettingsOverridesIndividualMediator(',');

        public Constants(Handler handler, ContentResolver resolver) {
        public Constants(Handler handler, ContentResolver resolver, boolean isSmallBatteryDevice) {
            super(handler);
            mResolver = resolver;
            initDefault();
            mSmallBatteryDevice = ActivityManager.isSmallBatteryDevice();
            if (mSmallBatteryDevice) {

            mUseSmallBatteryDeviceValues = isSmallBatteryDevice && !isWatch();
            if (mUseSmallBatteryDeviceValues) {
                INACTIVE_TIMEOUT = DEFAULT_INACTIVE_TIMEOUT_SMALL_BATTERY;
                IDLE_AFTER_INACTIVE_TIMEOUT = DEFAULT_IDLE_AFTER_INACTIVE_TIMEOUT_SMALL_BATTERY;
            }
@@ -1680,7 +1681,7 @@ public class DeviceIdleController extends SystemService
                    KEY_MIN_DEEP_MAINTENANCE_TIME,
                    mDefaultMinDeepMaintenanceTime);

            final long defaultInactiveTimeout = mSmallBatteryDevice
            final long defaultInactiveTimeout = mUseSmallBatteryDeviceValues
                    ? DEFAULT_INACTIVE_TIMEOUT_SMALL_BATTERY
                    : mDefaultInactiveTimeout;
            INACTIVE_TIMEOUT = mUserSettingDeviceConfigMediator.getLong(
@@ -1702,7 +1703,7 @@ public class DeviceIdleController extends SystemService
                    KEY_MOTION_INACTIVE_TIMEOUT_FLEX,
                    mDefaultMotionInactiveTimeoutFlex);

            final long defaultIdleAfterInactiveTimeout = mSmallBatteryDevice
            final long defaultIdleAfterInactiveTimeout = mUseSmallBatteryDeviceValues
                    ? DEFAULT_IDLE_AFTER_INACTIVE_TIMEOUT_SMALL_BATTERY
                    : mDefaultIdleAfterInactiveTimeout;
            IDLE_AFTER_INACTIVE_TIMEOUT = mUserSettingDeviceConfigMediator.getLong(
@@ -1759,6 +1760,10 @@ public class DeviceIdleController extends SystemService
                    KEY_USE_MODE_MANAGER, mDefaultUseModeManager);
        }

        private boolean isWatch() {
            return getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
        }

        void dump(PrintWriter pw) {
            pw.println("  Settings:");

@@ -2502,7 +2507,7 @@ public class DeviceIdleController extends SystemService
        Constants getConstants(DeviceIdleController controller, Handler handler,
                ContentResolver resolver) {
            if (mConstants == null) {
                mConstants = controller.new Constants(handler, resolver);
                mConstants = controller.new Constants(handler, resolver, isSmallBatteryDevice());
            }
            return mConstants;
        }
@@ -2579,6 +2584,10 @@ public class DeviceIdleController extends SystemService
            return mContext.getResources().getBoolean(
                   com.android.internal.R.bool.config_autoPowerModeUseMotionSensor);
        }

        boolean isSmallBatteryDevice() {
            return ActivityManager.isSmallBatteryDevice();
        }
    }

    private final Injector mInjector;
+66 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ import android.app.IActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@@ -177,6 +178,7 @@ public class DeviceIdleControllerTest {
        volatile long nowUptime;
        boolean useMotionSensor = true;
        boolean isLocationPrefetchEnabled = true;
        boolean isSmallBatteryDevice = false;

        InjectorForTest(Context ctx) {
            super(ctx);
@@ -276,6 +278,11 @@ public class DeviceIdleControllerTest {
        boolean useMotionSensor() {
            return useMotionSensor;
        }

        @Override
        boolean isSmallBatteryDevice() {
            return isSmallBatteryDevice;
        }
    }

    private class AnyMotionDetectorForTest extends AnyMotionDetector {
@@ -341,6 +348,8 @@ public class DeviceIdleControllerTest {
                .spyStatic(LocalServices.class)
                .startMocking();
        spyOn(getContext());
        spyOn(getContext().getResources());
        spyOn(getContext().getPackageManager());
        doReturn(null).when(getContext()).registerReceiver(any(), any());
        doReturn(mock(IBatteryStats.class)).when(() -> BatteryStatsService.getService());
        doReturn(mock(ActivityManagerInternal.class))
@@ -2762,6 +2771,54 @@ public class DeviceIdleControllerTest {
        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
    }

    @Test
    public void testInactiveConstants_smallBatteryDevice_configValuesOverriden() {
        setupIntResource(com.android.internal.R.integer.device_idle_inactive_to_ms, 1234);
        setupIntResource(com.android.internal.R.integer.device_idle_idle_after_inactive_to_ms, 567);
        setupPackageManagerFeature(PackageManager.FEATURE_WATCH, false);
        mInjector = new InjectorForTest(getContext());
        mInjector.isSmallBatteryDevice = true;

        cleanupDeviceIdleController();
        setupDeviceIdleController();

        assertEquals(
                mConstants.DEFAULT_INACTIVE_TIMEOUT_SMALL_BATTERY, mConstants.INACTIVE_TIMEOUT);
        assertEquals(
                mConstants.DEFAULT_IDLE_AFTER_INACTIVE_TIMEOUT_SMALL_BATTERY,
                mConstants.IDLE_AFTER_INACTIVE_TIMEOUT);
    }

    @Test
    public void testInactiveConstants_nonSmallBatteryDevice_configValuesNotOverriden() {
        setupIntResource(com.android.internal.R.integer.device_idle_inactive_to_ms, 1234);
        setupIntResource(com.android.internal.R.integer.device_idle_idle_after_inactive_to_ms, 567);
        setupPackageManagerFeature(PackageManager.FEATURE_WATCH, false);
        mInjector = new InjectorForTest(getContext());
        mInjector.isSmallBatteryDevice = false;

        cleanupDeviceIdleController();
        setupDeviceIdleController();

        assertEquals(1234, mConstants.INACTIVE_TIMEOUT);
        assertEquals(567, mConstants.IDLE_AFTER_INACTIVE_TIMEOUT);
    }

    @Test
    public void testInactiveConstants_smallBatteryWatch_configValuesNotOverriden() {
        setupIntResource(com.android.internal.R.integer.device_idle_inactive_to_ms, 1234);
        setupIntResource(com.android.internal.R.integer.device_idle_idle_after_inactive_to_ms, 567);
        setupPackageManagerFeature(PackageManager.FEATURE_WATCH, true);
        mInjector = new InjectorForTest(getContext());
        mInjector.isSmallBatteryDevice = true;

        cleanupDeviceIdleController();
        setupDeviceIdleController();

        assertEquals(1234, mConstants.INACTIVE_TIMEOUT);
        assertEquals(567, mConstants.IDLE_AFTER_INACTIVE_TIMEOUT);
    }

    private void enterDeepState(int state) {
        switch (state) {
            case STATE_ACTIVE:
@@ -2896,6 +2953,15 @@ public class DeviceIdleControllerTest {
        }
    }

    private void setupIntResource(int resId, int value) {
        when(getContext().getResources().getInteger(resId)).thenReturn(value);
    }

    private void setupPackageManagerFeature(String feature, boolean isFeaturePresent) {
        when(getContext().getPackageManager().hasSystemFeature(feature))
                .thenReturn(isFeaturePresent);
    }

    private void verifyStateConditions(int expectedState) {
        int curState = mDeviceIdleController.getState();
        assertEquals(