Implement OP_SYSTEM_EXEMPT_FROM_POWER_RESTRICTIONS exemption
OP_SYSTEM_EXEMPT_FROM_POWER_RESTRICTIONS details: * An app with this appop will be made exempt from all power restrictions, including app standby and doze. * In addition, the app will be able to start fgs from the bg, and the user will not be able to stop fgs run by the app. Changes: * Implement the OP_SYSTEM_EXEMPT_FROM_POWER_RESTRICTIONS Bug: 246330879 Test: atest PowerAllowlistBackendTest Manual testing: - Give OP_SYSTEM_EXEMPT_FROM_POWER_RESTRICTIONS appop to TestDPC app - Verify the app can start fg services from the bg - Verify fgs started by the app cannot be stopped - Verify the app cannot be put into background restricted via Settings Change-Id: If9e76076c59195f1e6e5f3eee3c8e7a0c754d8de
This commit is contained in:
@@ -85,7 +85,7 @@ public class BatteryOptimizeUtils {
|
||||
mPowerAllowListBackend = PowerAllowlistBackend.getInstance(context);
|
||||
mMode = mAppOpsManager
|
||||
.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mPackageName);
|
||||
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
|
||||
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName, mUid);
|
||||
}
|
||||
|
||||
/** Gets the {@link OptimizationMode} based on mode and allowed list. */
|
||||
@@ -138,7 +138,7 @@ public class BatteryOptimizeUtils {
|
||||
*/
|
||||
public boolean isSystemOrDefaultApp() {
|
||||
mPowerAllowListBackend.refreshList();
|
||||
return isSystemOrDefaultApp(mPowerAllowListBackend, mPackageName);
|
||||
return isSystemOrDefaultApp(mPowerAllowListBackend, mPackageName, mUid);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -186,11 +186,11 @@ public class BatteryOptimizeUtils {
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
|
||||
@OptimizationMode
|
||||
final int optimizationMode = getAppOptimizationMode(
|
||||
mode, allowlistBackend.isAllowlisted(info.packageName));
|
||||
mode, allowlistBackend.isAllowlisted(info.packageName, info.uid));
|
||||
// Ignores default optimized/unknown state or system/default apps.
|
||||
if (optimizationMode == MODE_OPTIMIZED
|
||||
|| optimizationMode == MODE_UNKNOWN
|
||||
|| isSystemOrDefaultApp(allowlistBackend, info.packageName)) {
|
||||
|| isSystemOrDefaultApp(allowlistBackend, info.packageName, info.uid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -205,9 +205,9 @@ public class BatteryOptimizeUtils {
|
||||
}
|
||||
|
||||
private static boolean isSystemOrDefaultApp(
|
||||
PowerAllowlistBackend powerAllowlistBackend, String packageName) {
|
||||
PowerAllowlistBackend powerAllowlistBackend, String packageName, int uid) {
|
||||
return powerAllowlistBackend.isSysAllowlisted(packageName)
|
||||
|| powerAllowlistBackend.isDefaultActiveApp(packageName);
|
||||
|| powerAllowlistBackend.isDefaultActiveApp(packageName, uid);
|
||||
}
|
||||
|
||||
private static void setAppUsageStateInternal(
|
||||
@@ -257,7 +257,7 @@ public class BatteryOptimizeUtils {
|
||||
|
||||
private void refreshState() {
|
||||
mPowerAllowListBackend.refreshList();
|
||||
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
|
||||
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName, mUid);
|
||||
mMode = mAppOpsManager
|
||||
.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mPackageName);
|
||||
Log.d(TAG, String.format("refresh %s state, allowlisted = %s, mode = %d",
|
||||
|
||||
Reference in New Issue
Block a user