summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java10
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java13
2 files changed, 23 insertions, 0 deletions
diff --git a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
index fea7a11ba61a..da1948007a80 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
@@ -176,6 +176,10 @@ public class PowerExemptionManager {
public static final int REASON_APPOP = 66;
/** @hide */
public static final int REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD = 67;
+ /** @hide */
+ public static final int REASON_OP_ACTIVATE_VPN = 68;
+ /** @hide */
+ public static final int REASON_OP_ACTIVATE_PLATFORM_VPN = 69;
/* BG-FGS-launch is allowed by temp-allow-list or system-allow-list.
Reason code for temp and system allow list starts here.
@@ -337,6 +341,8 @@ public class PowerExemptionManager {
REASON_ALLOWLISTED_PACKAGE,
REASON_APPOP,
REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD,
+ REASON_OP_ACTIVATE_VPN,
+ REASON_OP_ACTIVATE_PLATFORM_VPN,
// temp and system allow list reasons.
REASON_GEOFENCING,
REASON_PUSH_MESSAGING,
@@ -596,6 +602,10 @@ public class PowerExemptionManager {
return "APPOP";
case REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD:
return "ACTIVITY_VISIBILITY_GRACE_PERIOD";
+ case REASON_OP_ACTIVATE_VPN:
+ return "OP_ACTIVATE_VPN";
+ case REASON_OP_ACTIVATE_PLATFORM_VPN:
+ return "OP_ACTIVATE_PLATFORM_VPN";
case REASON_GEOFENCING:
return "GEOFENCING";
case REASON_PUSH_MESSAGING:
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 7f8d944cf668..1b9bebe2866d 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -24,6 +24,8 @@ import static android.app.ActivityManager.PROCESS_STATE_TOP;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST;
import static android.os.PowerExemptionManager.REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD;
+import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_PLATFORM_VPN;
+import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_VPN;
import static android.os.PowerWhitelistManager.REASON_ACTIVITY_STARTER;
import static android.os.PowerWhitelistManager.REASON_ALLOWLISTED_PACKAGE;
import static android.os.PowerWhitelistManager.REASON_BACKGROUND_ACTIVITY_PERMISSION;
@@ -5772,6 +5774,17 @@ public final class ActiveServices {
}
}
+ if (ret == REASON_DENIED) {
+ final AppOpsManager appOpsManager = mAm.getAppOpsManager();
+ if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_VPN, callingUid,
+ callingPackage) == AppOpsManager.MODE_ALLOWED) {
+ ret = REASON_OP_ACTIVATE_VPN;
+ } else if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_PLATFORM_VPN,
+ callingUid, callingPackage) == AppOpsManager.MODE_ALLOWED) {
+ ret = REASON_OP_ACTIVATE_PLATFORM_VPN;
+ }
+ }
+
return ret;
}