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_RARE;
|
||||||
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
|
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
|
||||||
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
|
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_BOOT_COMPLETED;
|
||||||
import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
|
import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
|
||||||
@@ -1207,6 +1208,11 @@ public class AppStandbyController
|
|||||||
return STANDBY_BUCKET_ACTIVE;
|
return STANDBY_BUCKET_ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mPackageManager.checkPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION,
|
||||||
|
packageName) == PERMISSION_GRANTED) {
|
||||||
|
return STANDBY_BUCKET_FREQUENT;
|
||||||
|
}
|
||||||
|
|
||||||
return STANDBY_BUCKET_NEVER;
|
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_RARE;
|
||||||
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
|
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
|
||||||
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
|
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_ELAPSED_TIME_THRESHOLDS;
|
||||||
import static com.android.server.usage.AppStandbyController.DEFAULT_SCREEN_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.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.junit.Assume.assumeTrue;
|
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.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Matchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
@@ -127,6 +131,8 @@ public class AppStandbyControllerTests {
|
|||||||
private static final int UID_SYSTEM_HEADLESS = 10003;
|
private static final int UID_SYSTEM_HEADLESS = 10003;
|
||||||
private static final String PACKAGE_WELLBEING = "com.example.wellbeing";
|
private static final String PACKAGE_WELLBEING = "com.example.wellbeing";
|
||||||
private static final int UID_WELLBEING = 10004;
|
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_ID = 0;
|
||||||
private static final int USER_ID2 = 10;
|
private static final int USER_ID2 = 10;
|
||||||
private static final UserHandle USER_HANDLE_USER2 = new UserHandle(USER_ID2);
|
private static final UserHandle USER_HANDLE_USER2 = new UserHandle(USER_ID2);
|
||||||
@@ -391,7 +397,14 @@ public class AppStandbyControllerTests {
|
|||||||
piw.packageName = PACKAGE_WELLBEING;
|
piw.packageName = PACKAGE_WELLBEING;
|
||||||
packages.add(piw);
|
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());
|
doReturn(packages).when(mockPm).getInstalledPackagesAsUser(anyInt(), anyInt());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < packages.size(); ++i) {
|
for (int i = 0; i < packages.size(); ++i) {
|
||||||
PackageInfo pkg = packages.get(i);
|
PackageInfo pkg = packages.get(i);
|
||||||
@@ -402,6 +415,18 @@ public class AppStandbyControllerTests {
|
|||||||
.getPackageUidAsUser(eq(pkg.packageName), anyInt(), anyInt());
|
.getPackageUidAsUser(eq(pkg.packageName), anyInt(), anyInt());
|
||||||
doReturn(pkg.applicationInfo).when(mockPm)
|
doReturn(pkg.applicationInfo).when(mockPm)
|
||||||
.getApplicationInfo(eq(pkg.packageName), anyInt());
|
.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) {}
|
} catch (PackageManager.NameNotFoundException nnfe) {}
|
||||||
}
|
}
|
||||||
@@ -1825,6 +1850,24 @@ public class AppStandbyControllerTests {
|
|||||||
assertEquals(93 * DAY_MS, mController.mAppStandbyScreenThresholds[4]);
|
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) {
|
private String getAdminAppsStr(int userId) {
|
||||||
return getAdminAppsStr(userId, mController.getActiveAdminAppsForTest(userId));
|
return getAdminAppsStr(userId, mController.getActiveAdminAppsForTest(userId));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user