Loading apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +14 −6 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import static com.android.server.SystemService.PHASE_BOOT_COMPLETED; import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY; import static com.android.server.usage.AppIdleHistory.STANDBY_BUCKET_UNKNOWN; import android.Manifest; import android.annotation.CurrentTimeMillisLong; import android.annotation.DurationMillisLong; import android.annotation.NonNull; Loading Loading @@ -100,6 +101,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.permission.PermissionManager; import android.provider.DeviceConfig; import android.provider.Settings.Global; import android.telephony.TelephonyManager; Loading Loading @@ -1523,8 +1525,8 @@ public class AppStandbyController return STANDBY_BUCKET_ACTIVE; } if (mPackageManager.checkPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, packageName) == PERMISSION_GRANTED) { if (mSystemServicesReady && mInjector.isBackgroundLocationPermissionGranted(packageName, userId)) { return STANDBY_BUCKET_FREQUENT; } Loading Loading @@ -2636,6 +2638,7 @@ public class AppStandbyController private IBatteryStats mBatteryStats; private BatteryManager mBatteryManager; private PackageManagerInternal mPackageManagerInternal; private PermissionManager mPermissionManager; private DisplayManager mDisplayManager; private PowerManager mPowerManager; private IDeviceIdleController mDeviceIdleController; Loading Loading @@ -2675,6 +2678,7 @@ public class AppStandbyController mBatteryStats = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); mPermissionManager = mContext.getSystemService(PermissionManager.class); mDisplayManager = (DisplayManager) mContext.getSystemService( Context.DISPLAY_SERVICE); mPowerManager = mContext.getSystemService(PowerManager.class); Loading Loading @@ -2710,10 +2714,6 @@ public class AppStandbyController return SystemClock.elapsedRealtime(); } long currentTimeMillis() { return System.currentTimeMillis(); } boolean isAppIdleEnabled() { final boolean buildFlag = mContext.getResources().getBoolean( com.android.internal.R.bool.config_enableAutoPowerModes); Loading Loading @@ -2754,6 +2754,14 @@ public class AppStandbyController return mAlarmManagerInternal.shouldGetBucketElevation(packageName, uid); } boolean isBackgroundLocationPermissionGranted(@NonNull String packageName, @UserIdInt int userId) { final int result = mPermissionManager.checkPackageNamePermission( Manifest.permission.ACCESS_BACKGROUND_LOCATION, packageName, Context.DEVICE_ID_DEFAULT, userId); return result == PERMISSION_GRANTED; } void updatePowerWhitelistCache() { try { // Don't call out to DeviceIdleController with the lock held. Loading services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +15 −20 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RARE; import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED; import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET; import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static com.android.server.usage.AppStandbyController.DEFAULT_ELAPSED_TIME_THRESHOLDS; import static com.android.server.usage.AppStandbyController.DEFAULT_SCREEN_TIME_THRESHOLDS; Loading @@ -58,12 +57,11 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; import static org.mockito.AdditionalMatchers.not; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.intThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; Loading Loading @@ -245,6 +243,7 @@ public class AppStandbyControllerTests { List<UserHandle> mCrossProfileTargets = Collections.emptyList(); boolean mDeviceIdleMode = false; Set<Pair<String, Integer>> mClockApps = new ArraySet<>(); Set<Pair<String, Integer>> mBgLocationGrantedApps = new ArraySet<>(); DeviceConfig.Properties.Builder mSettingsBuilder = new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_APP_STANDBY) .setLong("screen_threshold_active", 0) Loading Loading @@ -280,11 +279,6 @@ public class AppStandbyControllerTests { return mElapsedRealtime; } @Override long currentTimeMillis() { return mElapsedRealtime; } @Override boolean isAppIdleEnabled() { return mIsAppIdleEnabled; Loading @@ -310,6 +304,11 @@ public class AppStandbyControllerTests { return mClockApps.contains(Pair.create(packageName, uid)); } @Override boolean isBackgroundLocationPermissionGranted(String packageName, int userId) { return mBgLocationGrantedApps.contains(Pair.create(packageName, userId)); } @Override PackageManagerInternal getPackageManagerInternal() { return mPackageManagerInternal; Loading Loading @@ -393,6 +392,10 @@ public class AppStandbyControllerTests { // Internal methods void addBgLocationGrantedApps(String packageName, int userId) { mBgLocationGrantedApps.add(Pair.create(packageName, userId)); } void setDisplayOn(boolean on) { mDisplayOn = on; if (mDisplayListener != null) { Loading Loading @@ -484,18 +487,9 @@ public class AppStandbyControllerTests { doReturn(pkg.applicationInfo).when(mockPm) .getApplicationInfo(eq(pkg.packageName), anyInt()); if (pkg.packageName.equals(PACKAGE_BACKGROUND_LOCATION)) { doReturn(PERMISSION_GRANTED).when(mockPm).checkPermission( eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION), eq(pkg.packageName)); doReturn(PERMISSION_DENIED).when(mockPm).checkPermission( not(eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)), eq(pkg.packageName)); } else { doReturn(PERMISSION_DENIED).when(mockPm).checkPermission(anyString(), eq(pkg.packageName)); } } } catch (PackageManager.NameNotFoundException nnfe) {} } Loading Loading @@ -2077,6 +2071,7 @@ public class AppStandbyControllerTests { */ @Test public void testBackgroundLocationBucket() throws Exception { mInjector.addBgLocationGrantedApps(PACKAGE_BACKGROUND_LOCATION, USER_ID); reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime, PACKAGE_BACKGROUND_LOCATION); waitAndAssertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_BACKGROUND_LOCATION); Loading Loading
apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +14 −6 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import static com.android.server.SystemService.PHASE_BOOT_COMPLETED; import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY; import static com.android.server.usage.AppIdleHistory.STANDBY_BUCKET_UNKNOWN; import android.Manifest; import android.annotation.CurrentTimeMillisLong; import android.annotation.DurationMillisLong; import android.annotation.NonNull; Loading Loading @@ -100,6 +101,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.permission.PermissionManager; import android.provider.DeviceConfig; import android.provider.Settings.Global; import android.telephony.TelephonyManager; Loading Loading @@ -1523,8 +1525,8 @@ public class AppStandbyController return STANDBY_BUCKET_ACTIVE; } if (mPackageManager.checkPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, packageName) == PERMISSION_GRANTED) { if (mSystemServicesReady && mInjector.isBackgroundLocationPermissionGranted(packageName, userId)) { return STANDBY_BUCKET_FREQUENT; } Loading Loading @@ -2636,6 +2638,7 @@ public class AppStandbyController private IBatteryStats mBatteryStats; private BatteryManager mBatteryManager; private PackageManagerInternal mPackageManagerInternal; private PermissionManager mPermissionManager; private DisplayManager mDisplayManager; private PowerManager mPowerManager; private IDeviceIdleController mDeviceIdleController; Loading Loading @@ -2675,6 +2678,7 @@ public class AppStandbyController mBatteryStats = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); mPermissionManager = mContext.getSystemService(PermissionManager.class); mDisplayManager = (DisplayManager) mContext.getSystemService( Context.DISPLAY_SERVICE); mPowerManager = mContext.getSystemService(PowerManager.class); Loading Loading @@ -2710,10 +2714,6 @@ public class AppStandbyController return SystemClock.elapsedRealtime(); } long currentTimeMillis() { return System.currentTimeMillis(); } boolean isAppIdleEnabled() { final boolean buildFlag = mContext.getResources().getBoolean( com.android.internal.R.bool.config_enableAutoPowerModes); Loading Loading @@ -2754,6 +2754,14 @@ public class AppStandbyController return mAlarmManagerInternal.shouldGetBucketElevation(packageName, uid); } boolean isBackgroundLocationPermissionGranted(@NonNull String packageName, @UserIdInt int userId) { final int result = mPermissionManager.checkPackageNamePermission( Manifest.permission.ACCESS_BACKGROUND_LOCATION, packageName, Context.DEVICE_ID_DEFAULT, userId); return result == PERMISSION_GRANTED; } void updatePowerWhitelistCache() { try { // Don't call out to DeviceIdleController with the lock held. Loading
services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +15 −20 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RARE; import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED; import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET; import static android.content.pm.PackageManager.PERMISSION_DENIED; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static com.android.server.usage.AppStandbyController.DEFAULT_ELAPSED_TIME_THRESHOLDS; import static com.android.server.usage.AppStandbyController.DEFAULT_SCREEN_TIME_THRESHOLDS; Loading @@ -58,12 +57,11 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; import static org.mockito.AdditionalMatchers.not; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.intThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; Loading Loading @@ -245,6 +243,7 @@ public class AppStandbyControllerTests { List<UserHandle> mCrossProfileTargets = Collections.emptyList(); boolean mDeviceIdleMode = false; Set<Pair<String, Integer>> mClockApps = new ArraySet<>(); Set<Pair<String, Integer>> mBgLocationGrantedApps = new ArraySet<>(); DeviceConfig.Properties.Builder mSettingsBuilder = new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_APP_STANDBY) .setLong("screen_threshold_active", 0) Loading Loading @@ -280,11 +279,6 @@ public class AppStandbyControllerTests { return mElapsedRealtime; } @Override long currentTimeMillis() { return mElapsedRealtime; } @Override boolean isAppIdleEnabled() { return mIsAppIdleEnabled; Loading @@ -310,6 +304,11 @@ public class AppStandbyControllerTests { return mClockApps.contains(Pair.create(packageName, uid)); } @Override boolean isBackgroundLocationPermissionGranted(String packageName, int userId) { return mBgLocationGrantedApps.contains(Pair.create(packageName, userId)); } @Override PackageManagerInternal getPackageManagerInternal() { return mPackageManagerInternal; Loading Loading @@ -393,6 +392,10 @@ public class AppStandbyControllerTests { // Internal methods void addBgLocationGrantedApps(String packageName, int userId) { mBgLocationGrantedApps.add(Pair.create(packageName, userId)); } void setDisplayOn(boolean on) { mDisplayOn = on; if (mDisplayListener != null) { Loading Loading @@ -484,18 +487,9 @@ public class AppStandbyControllerTests { doReturn(pkg.applicationInfo).when(mockPm) .getApplicationInfo(eq(pkg.packageName), anyInt()); if (pkg.packageName.equals(PACKAGE_BACKGROUND_LOCATION)) { doReturn(PERMISSION_GRANTED).when(mockPm).checkPermission( eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION), eq(pkg.packageName)); doReturn(PERMISSION_DENIED).when(mockPm).checkPermission( not(eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)), eq(pkg.packageName)); } else { doReturn(PERMISSION_DENIED).when(mockPm).checkPermission(anyString(), eq(pkg.packageName)); } } } catch (PackageManager.NameNotFoundException nnfe) {} } Loading Loading @@ -2077,6 +2071,7 @@ public class AppStandbyControllerTests { */ @Test public void testBackgroundLocationBucket() throws Exception { mInjector.addBgLocationGrantedApps(PACKAGE_BACKGROUND_LOCATION, USER_ID); reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime, PACKAGE_BACKGROUND_LOCATION); waitAndAssertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_BACKGROUND_LOCATION); Loading