Loading apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +18 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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( Loading @@ -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( Loading Loading @@ -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:"); Loading Loading @@ -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; } Loading Loading @@ -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; Loading services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +66 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -177,6 +178,7 @@ public class DeviceIdleControllerTest { volatile long nowUptime; boolean useMotionSensor = true; boolean isLocationPrefetchEnabled = true; boolean isSmallBatteryDevice = false; InjectorForTest(Context ctx) { super(ctx); Loading Loading @@ -276,6 +278,11 @@ public class DeviceIdleControllerTest { boolean useMotionSensor() { return useMotionSensor; } @Override boolean isSmallBatteryDevice() { return isSmallBatteryDevice; } } private class AnyMotionDetectorForTest extends AnyMotionDetector { Loading Loading @@ -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)) Loading Loading @@ -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: Loading Loading @@ -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( Loading Loading
apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +18 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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( Loading @@ -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( Loading Loading @@ -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:"); Loading Loading @@ -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; } Loading Loading @@ -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; Loading
services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java +66 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -177,6 +178,7 @@ public class DeviceIdleControllerTest { volatile long nowUptime; boolean useMotionSensor = true; boolean isLocationPrefetchEnabled = true; boolean isSmallBatteryDevice = false; InjectorForTest(Context ctx) { super(ctx); Loading Loading @@ -276,6 +278,11 @@ public class DeviceIdleControllerTest { boolean useMotionSensor() { return useMotionSensor; } @Override boolean isSmallBatteryDevice() { return isSmallBatteryDevice; } } private class AnyMotionDetectorForTest extends AnyMotionDetector { Loading Loading @@ -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)) Loading Loading @@ -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: Loading Loading @@ -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( Loading