Merge "Prevent default wellbeing app from falling below WORKING_SET bucket" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
711cdc2220
@@ -1120,6 +1120,10 @@ public class AppStandbyController implements AppStandbyInternal {
|
|||||||
if (isDeviceProvisioningPackage(packageName)) {
|
if (isDeviceProvisioningPackage(packageName)) {
|
||||||
return STANDBY_BUCKET_EXEMPTED;
|
return STANDBY_BUCKET_EXEMPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mInjector.isWellbeingPackage(packageName)) {
|
||||||
|
return STANDBY_BUCKET_WORKING_SET;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check this last, as it can be the most expensive check
|
// Check this last, as it can be the most expensive check
|
||||||
@@ -1929,6 +1933,7 @@ public class AppStandbyController implements AppStandbyInternal {
|
|||||||
*/
|
*/
|
||||||
@GuardedBy("mPowerWhitelistedApps")
|
@GuardedBy("mPowerWhitelistedApps")
|
||||||
private final ArraySet<String> mPowerWhitelistedApps = new ArraySet<>();
|
private final ArraySet<String> mPowerWhitelistedApps = new ArraySet<>();
|
||||||
|
private String mWellbeingApp = null;
|
||||||
|
|
||||||
Injector(Context context, Looper looper) {
|
Injector(Context context, Looper looper) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -1962,6 +1967,9 @@ public class AppStandbyController implements AppStandbyInternal {
|
|||||||
if (activityManager.isLowRamDevice() || ActivityManager.isSmallBatteryDevice()) {
|
if (activityManager.isLowRamDevice() || ActivityManager.isSmallBatteryDevice()) {
|
||||||
mAutoRestrictedBucketDelayMs = 12 * ONE_HOUR;
|
mAutoRestrictedBucketDelayMs = 12 * ONE_HOUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final PackageManager packageManager = mContext.getPackageManager();
|
||||||
|
mWellbeingApp = packageManager.getWellbeingPackageName();
|
||||||
}
|
}
|
||||||
mBootPhase = phase;
|
mBootPhase = phase;
|
||||||
}
|
}
|
||||||
@@ -2006,6 +2014,14 @@ public class AppStandbyController implements AppStandbyInternal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if the supplied package is the wellbeing app. Otherwise,
|
||||||
|
* returns {@code false}.
|
||||||
|
*/
|
||||||
|
boolean isWellbeingPackage(String packageName) {
|
||||||
|
return mWellbeingApp != null && mWellbeingApp.equals(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
void updatePowerWhitelistCache() {
|
void updatePowerWhitelistCache() {
|
||||||
try {
|
try {
|
||||||
// Don't call out to DeviceIdleController with the lock held.
|
// Don't call out to DeviceIdleController with the lock held.
|
||||||
|
|||||||
@@ -112,6 +112,8 @@ public class AppStandbyControllerTests {
|
|||||||
private static final int UID_SYSTEM_HEADFULL = 10002;
|
private static final int UID_SYSTEM_HEADFULL = 10002;
|
||||||
private static final String PACKAGE_SYSTEM_HEADLESS = "com.example.system.headless";
|
private static final String PACKAGE_SYSTEM_HEADLESS = "com.example.system.headless";
|
||||||
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 int UID_WELLBEING = 10004;
|
||||||
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);
|
||||||
@@ -217,6 +219,11 @@ public class AppStandbyControllerTests {
|
|||||||
return mNonIdleWhitelistApps.contains(packageName);
|
return mNonIdleWhitelistApps.contains(packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
boolean isWellbeingPackage(String packageName) {
|
||||||
|
return PACKAGE_WELLBEING.equals(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void updatePowerWhitelistCache() {
|
void updatePowerWhitelistCache() {
|
||||||
}
|
}
|
||||||
@@ -329,6 +336,12 @@ public class AppStandbyControllerTests {
|
|||||||
pish.packageName = PACKAGE_SYSTEM_HEADLESS;
|
pish.packageName = PACKAGE_SYSTEM_HEADLESS;
|
||||||
packages.add(pish);
|
packages.add(pish);
|
||||||
|
|
||||||
|
PackageInfo piw = new PackageInfo();
|
||||||
|
piw.applicationInfo = new ApplicationInfo();
|
||||||
|
piw.applicationInfo.uid = UID_WELLBEING;
|
||||||
|
piw.packageName = PACKAGE_WELLBEING;
|
||||||
|
packages.add(piw);
|
||||||
|
|
||||||
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) {
|
||||||
@@ -1516,6 +1529,25 @@ public class AppStandbyControllerTests {
|
|||||||
assertBucket(STANDBY_BUCKET_RARE, PACKAGE_1);
|
assertBucket(STANDBY_BUCKET_RARE, PACKAGE_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWellbeingAppElevated() {
|
||||||
|
reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime, PACKAGE_WELLBEING);
|
||||||
|
assertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_WELLBEING);
|
||||||
|
reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime, PACKAGE_1);
|
||||||
|
assertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_1);
|
||||||
|
mInjector.mElapsedRealtime += RESTRICTED_THRESHOLD;
|
||||||
|
|
||||||
|
// Make sure the default wellbeing app does not get lowered below WORKING_SET.
|
||||||
|
mController.setAppStandbyBucket(PACKAGE_WELLBEING, USER_ID, STANDBY_BUCKET_RARE,
|
||||||
|
REASON_MAIN_TIMEOUT);
|
||||||
|
assertBucket(STANDBY_BUCKET_WORKING_SET, PACKAGE_WELLBEING);
|
||||||
|
|
||||||
|
// A non default wellbeing app should be able to fall lower than WORKING_SET.
|
||||||
|
mController.setAppStandbyBucket(PACKAGE_1, USER_ID, STANDBY_BUCKET_RARE,
|
||||||
|
REASON_MAIN_TIMEOUT);
|
||||||
|
assertBucket(STANDBY_BUCKET_RARE, PACKAGE_1);
|
||||||
|
}
|
||||||
|
|
||||||
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