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

Commit f042176c authored by Yeabkal Wubshit's avatar Yeabkal Wubshit Committed by Android (Google) Code Review
Browse files

Merge "Opt out of small battery values for Wear in DeviceIdleController" into main

parents 2194a344 8e9625e4
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(