Check device owner by callingUid in ActivityStarter
Bug: 129565838
Test: atest ActivityStarterTests
Change-Id: Ic75a3198f7de34078ba3b9c794db893779e7bb77
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 3b358e8..a134eb8 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1025,11 +1025,11 @@
if (mSupervisor.mRecentTasks.isCallerRecents(callingUid)) {
return false;
}
- // don't abort if the callingPackage is the device owner
- if (mService.isDeviceOwner(callingPackage)) {
+ // don't abort if the callingUid is the device owner
+ if (mService.isDeviceOwner(callingUid)) {
return false;
}
- // don't abort if the callingPackage has companion device
+ // don't abort if the callingUid has companion device
final int callingUserId = UserHandle.getUserId(callingUid);
if (mService.isAssociatedCompanionApp(callingUserId, callingUid)) {
return false;
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index b2e5b6a..7d25466 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -507,9 +507,9 @@
public abstract boolean isUidForeground(int uid);
/**
- * Called by DevicePolicyManagerService to set the package name of the device owner.
+ * Called by DevicePolicyManagerService to set the uid of the device owner.
*/
- public abstract void setDeviceOwnerPackageName(String deviceOwnerPkg);
+ public abstract void setDeviceOwnerUid(int uid);
/** Set all associated companion app that belongs to an userId. */
public abstract void setCompanionAppPackages(int userId, Set<String> companionAppPackages);
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index b64abdb..9717757 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -632,7 +632,7 @@
private FontScaleSettingObserver mFontScaleSettingObserver;
- private String mDeviceOwnerPackageName;
+ private int mDeviceOwnerUid = Process.INVALID_UID;
private final class FontScaleSettingObserver extends ContentObserver {
private final Uri mFontScaleUri = Settings.System.getUriFor(FONT_SCALE);
@@ -5829,15 +5829,12 @@
|| mWindowManager.mRoot.isAnyNonToastWindowVisibleForUid(uid);
}
- boolean isDeviceOwner(String packageName) {
- if (packageName == null) {
- return false;
- }
- return packageName.equals(mDeviceOwnerPackageName);
+ boolean isDeviceOwner(int uid) {
+ return uid >= 0 && mDeviceOwnerUid == uid;
}
- void setDeviceOwnerPackageName(String deviceOwnerPkg) {
- mDeviceOwnerPackageName = deviceOwnerPkg;
+ void setDeviceOwnerUid(int uid) {
+ mDeviceOwnerUid = uid;
}
/**
@@ -7283,9 +7280,9 @@
}
@Override
- public void setDeviceOwnerPackageName(String deviceOwnerPkg) {
+ public void setDeviceOwnerUid(int uid) {
synchronized (mGlobalLock) {
- ActivityTaskManagerService.this.setDeviceOwnerPackageName(deviceOwnerPkg);
+ ActivityTaskManagerService.this.setDeviceOwnerUid(uid);
}
}