Merge "Exempt the device/profile owner protected pkgs from FGS task manager" into tm-dev

This commit is contained in:
Jing Ji
2022-04-19 22:29:20 +00:00
committed by Android (Google) Code Review
4 changed files with 34 additions and 0 deletions

View File

@@ -369,6 +369,16 @@ public class PowerExemptionManager {
* @hide * @hide
*/ */
public static final int REASON_CARRIER_PRIVILEGED_APP = 321; public static final int REASON_CARRIER_PRIVILEGED_APP = 321;
/**
* Device/Profile owner protected apps.
* @hide
*/
public static final int REASON_DPO_PROTECTED_APP = 322;
/**
* Apps control is disallowed for the user.
* @hide
*/
public static final int REASON_DISALLOW_APPS_CONTROL = 323;
/** @hide The app requests out-out. */ /** @hide The app requests out-out. */
public static final int REASON_OPT_OUT_REQUESTED = 1000; public static final int REASON_OPT_OUT_REQUESTED = 1000;
@@ -447,6 +457,8 @@ public class PowerExemptionManager {
REASON_SYSTEM_MODULE, REASON_SYSTEM_MODULE,
REASON_CARRIER_PRIVILEGED_APP, REASON_CARRIER_PRIVILEGED_APP,
REASON_OPT_OUT_REQUESTED, REASON_OPT_OUT_REQUESTED,
REASON_DPO_PROTECTED_APP,
REASON_DISALLOW_APPS_CONTROL,
}) })
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface ReasonCode {} public @interface ReasonCode {}
@@ -653,6 +665,10 @@ public class PowerExemptionManager {
return AppBackgroundRestrictionsInfo.REASON_ROLE_DIALER; return AppBackgroundRestrictionsInfo.REASON_ROLE_DIALER;
case REASON_ROLE_EMERGENCY: case REASON_ROLE_EMERGENCY:
return AppBackgroundRestrictionsInfo.REASON_ROLE_EMERGENCY; return AppBackgroundRestrictionsInfo.REASON_ROLE_EMERGENCY;
case REASON_DPO_PROTECTED_APP:
return AppBackgroundRestrictionsInfo.REASON_DPO_PROTECTED_APP;
case REASON_DISALLOW_APPS_CONTROL:
return AppBackgroundRestrictionsInfo.REASON_DISALLOW_APPS_CONTROL;
default: default:
return AppBackgroundRestrictionsInfo.REASON_DENIED; return AppBackgroundRestrictionsInfo.REASON_DENIED;
} }
@@ -798,6 +814,10 @@ public class PowerExemptionManager {
return "SYSTEM_MODULE"; return "SYSTEM_MODULE";
case REASON_CARRIER_PRIVILEGED_APP: case REASON_CARRIER_PRIVILEGED_APP:
return "CARRIER_PRIVILEGED_APP"; return "CARRIER_PRIVILEGED_APP";
case REASON_DPO_PROTECTED_APP:
return "DPO_PROTECTED_APP";
case REASON_DISALLOW_APPS_CONTROL:
return "DISALLOW_APPS_CONTROL";
case REASON_OPT_OUT_REQUESTED: case REASON_OPT_OUT_REQUESTED:
return "REASON_OPT_OUT_REQUESTED"; return "REASON_OPT_OUT_REQUESTED";
default: default:

View File

@@ -169,6 +169,8 @@ message AppBackgroundRestrictionsInfo {
REASON_ROLE_EMERGENCY = 319; REASON_ROLE_EMERGENCY = 319;
REASON_SYSTEM_MODULE = 320; REASON_SYSTEM_MODULE = 320;
REASON_CARRIER_PRIVILEGED_APP = 321; REASON_CARRIER_PRIVILEGED_APP = 321;
REASON_DPO_PROTECTED_APP = 322;
REASON_DISALLOW_APPS_CONTROL = 323;
// app requested to be exempt // app requested to be exempt
REASON_OPT_OUT_REQUESTED = 1000; REASON_OPT_OUT_REQUESTED = 1000;
} }

View File

@@ -422,6 +422,8 @@ class FgsManagerController @Inject constructor(
PowerExemptionManager.REASON_ALLOWLISTED_PACKAGE, PowerExemptionManager.REASON_ALLOWLISTED_PACKAGE,
PowerExemptionManager.REASON_DEVICE_OWNER, PowerExemptionManager.REASON_DEVICE_OWNER,
PowerExemptionManager.REASON_DISALLOW_APPS_CONTROL,
PowerExemptionManager.REASON_DPO_PROTECTED_APP,
PowerExemptionManager.REASON_PROFILE_OWNER, PowerExemptionManager.REASON_PROFILE_OWNER,
PowerExemptionManager.REASON_PROC_STATE_PERSISTENT, PowerExemptionManager.REASON_PROC_STATE_PERSISTENT,
PowerExemptionManager.REASON_PROC_STATE_PERSISTENT_UI, PowerExemptionManager.REASON_PROC_STATE_PERSISTENT_UI,

View File

@@ -61,6 +61,8 @@ import static android.os.PowerExemptionManager.REASON_COMPANION_DEVICE_MANAGER;
import static android.os.PowerExemptionManager.REASON_DENIED; import static android.os.PowerExemptionManager.REASON_DENIED;
import static android.os.PowerExemptionManager.REASON_DEVICE_DEMO_MODE; import static android.os.PowerExemptionManager.REASON_DEVICE_DEMO_MODE;
import static android.os.PowerExemptionManager.REASON_DEVICE_OWNER; import static android.os.PowerExemptionManager.REASON_DEVICE_OWNER;
import static android.os.PowerExemptionManager.REASON_DISALLOW_APPS_CONTROL;
import static android.os.PowerExemptionManager.REASON_DPO_PROTECTED_APP;
import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_PLATFORM_VPN; import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_PLATFORM_VPN;
import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_VPN; import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_VPN;
import static android.os.PowerExemptionManager.REASON_PROC_STATE_PERSISTENT; import static android.os.PowerExemptionManager.REASON_PROC_STATE_PERSISTENT;
@@ -2616,6 +2618,11 @@ public final class AppRestrictionController {
if (UserManager.isDeviceInDemoMode(mContext)) { if (UserManager.isDeviceInDemoMode(mContext)) {
return REASON_DEVICE_DEMO_MODE; return REASON_DEVICE_DEMO_MODE;
} }
final int userId = UserHandle.getUserId(uid);
if (mInjector.getUserManagerInternal()
.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL, userId)) {
return REASON_DISALLOW_APPS_CONTROL;
}
if (am.isDeviceOwner(uid)) { if (am.isDeviceOwner(uid)) {
return REASON_DEVICE_OWNER; return REASON_DEVICE_OWNER;
} }
@@ -2631,6 +2638,7 @@ public final class AppRestrictionController {
final String[] packages = mInjector.getPackageManager().getPackagesForUid(uid); final String[] packages = mInjector.getPackageManager().getPackagesForUid(uid);
if (packages != null) { if (packages != null) {
final AppOpsManager appOpsManager = mInjector.getAppOpsManager(); final AppOpsManager appOpsManager = mInjector.getAppOpsManager();
final PackageManagerInternal pm = mInjector.getPackageManagerInternal();
for (String pkg : packages) { for (String pkg : packages) {
if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_VPN, if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_VPN,
uid, pkg) == AppOpsManager.MODE_ALLOWED) { uid, pkg) == AppOpsManager.MODE_ALLOWED) {
@@ -2646,6 +2654,8 @@ public final class AppRestrictionController {
return REASON_SYSTEM_ALLOW_LISTED; return REASON_SYSTEM_ALLOW_LISTED;
} else if (mConstantsObserver.mBgRestrictionExemptedPackages.contains(pkg)) { } else if (mConstantsObserver.mBgRestrictionExemptedPackages.contains(pkg)) {
return REASON_ALLOWLISTED_PACKAGE; return REASON_ALLOWLISTED_PACKAGE;
} else if (pm.isPackageStateProtected(pkg, userId)) {
return REASON_DPO_PROTECTED_APP;
} }
} }
} }