Merge "Background location permission should elevate the standby bucket to FREQUENT" into sc-dev
This commit is contained in:
@@ -49,6 +49,7 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_NEVER;
|
||||
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_GRANTED;
|
||||
|
||||
import static com.android.server.SystemService.PHASE_BOOT_COMPLETED;
|
||||
import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
|
||||
@@ -1207,6 +1208,11 @@ public class AppStandbyController
|
||||
return STANDBY_BUCKET_ACTIVE;
|
||||
}
|
||||
|
||||
if (mPackageManager.checkPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
||||
packageName) == PERMISSION_GRANTED) {
|
||||
return STANDBY_BUCKET_FREQUENT;
|
||||
}
|
||||
|
||||
return STANDBY_BUCKET_NEVER;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_NEVER;
|
||||
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;
|
||||
@@ -56,6 +58,8 @@ 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.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
@@ -127,6 +131,8 @@ public class AppStandbyControllerTests {
|
||||
private static final int UID_SYSTEM_HEADLESS = 10003;
|
||||
private static final String PACKAGE_WELLBEING = "com.example.wellbeing";
|
||||
private static final int UID_WELLBEING = 10004;
|
||||
private static final String PACKAGE_BACKGROUND_LOCATION = "com.example.backgroundLocation";
|
||||
private static final int UID_BACKGROUND_LOCATION = 10005;
|
||||
private static final int USER_ID = 0;
|
||||
private static final int USER_ID2 = 10;
|
||||
private static final UserHandle USER_HANDLE_USER2 = new UserHandle(USER_ID2);
|
||||
@@ -391,7 +397,14 @@ public class AppStandbyControllerTests {
|
||||
piw.packageName = PACKAGE_WELLBEING;
|
||||
packages.add(piw);
|
||||
|
||||
PackageInfo pib = new PackageInfo();
|
||||
pib.applicationInfo = new ApplicationInfo();
|
||||
pib.applicationInfo.uid = UID_BACKGROUND_LOCATION;
|
||||
pib.packageName = PACKAGE_BACKGROUND_LOCATION;
|
||||
packages.add(pib);
|
||||
|
||||
doReturn(packages).when(mockPm).getInstalledPackagesAsUser(anyInt(), anyInt());
|
||||
|
||||
try {
|
||||
for (int i = 0; i < packages.size(); ++i) {
|
||||
PackageInfo pkg = packages.get(i);
|
||||
@@ -402,6 +415,18 @@ public class AppStandbyControllerTests {
|
||||
.getPackageUidAsUser(eq(pkg.packageName), anyInt(), anyInt());
|
||||
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) {}
|
||||
}
|
||||
@@ -1825,6 +1850,24 @@ public class AppStandbyControllerTests {
|
||||
assertEquals(93 * DAY_MS, mController.mAppStandbyScreenThresholds[4]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Package with ACCESS_BACKGROUND_LOCATION permission has minimum bucket
|
||||
* STANDBY_BUCKET_FREQUENT.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testBackgroundLocationBucket() throws Exception {
|
||||
reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime,
|
||||
PACKAGE_BACKGROUND_LOCATION);
|
||||
assertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_BACKGROUND_LOCATION);
|
||||
|
||||
mInjector.mElapsedRealtime += RESTRICTED_THRESHOLD;
|
||||
// Make sure PACKAGE_BACKGROUND_LOCATION does not get lowered than STANDBY_BUCKET_FREQUENT.
|
||||
mController.setAppStandbyBucket(PACKAGE_BACKGROUND_LOCATION, USER_ID, STANDBY_BUCKET_RARE,
|
||||
REASON_MAIN_TIMEOUT);
|
||||
assertBucket(STANDBY_BUCKET_FREQUENT, PACKAGE_BACKGROUND_LOCATION);
|
||||
}
|
||||
|
||||
private String getAdminAppsStr(int userId) {
|
||||
return getAdminAppsStr(userId, mController.getActiveAdminAppsForTest(userId));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user