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;
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);
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);
|| 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;
}
/**
}
@Override
- public void setDeviceOwnerPackageName(String deviceOwnerPkg) {
+ public void setDeviceOwnerUid(int uid) {
synchronized (mGlobalLock) {
- ActivityTaskManagerService.this.setDeviceOwnerPackageName(deviceOwnerPkg);
+ ActivityTaskManagerService.this.setDeviceOwnerUid(uid);
}
}
import android.content.pm.UserInfo;
import android.os.Binder;
import android.os.Environment;
+import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManagerInternal;
}
private void pushToActivityTaskManagerLocked() {
- mActivityTaskManagerInternal.setDeviceOwnerPackageName(mDeviceOwner != null
- ? mDeviceOwner.packageName : null);
+ final int uid = mDeviceOwner != null ? mPackageManagerInternal.getPackageUid(
+ mDeviceOwner.packageName,
+ PackageManager.MATCH_ALL | PackageManager.MATCH_KNOWN_PACKAGES, mDeviceOwnerUserId)
+ : Process.INVALID_UID;
+ mActivityTaskManagerInternal.setDeviceOwnerUid(uid);
}
String getDeviceOwnerPackageName() {
boolean hasForegroundActivities, boolean callerIsRecents,
boolean callerIsTempWhitelisted,
boolean callerIsInstrumentingWithBackgroundActivityStartPrivileges,
- boolean isCallingPackageNameDeviceOwner, boolean isCallingPackageTempWhitelisted) {
+ boolean isCallingUidDeviceOwner, boolean isCallingPackageTempWhitelisted) {
// window visibility
doReturn(callingUidHasVisibleWindow).when(mService.mWindowManager.mRoot)
.isAnyNonToastWindowVisibleForUid(callingUid);
// caller is instrumenting with background activity starts privileges
callerApp.setInstrumenting(callerIsInstrumentingWithBackgroundActivityStartPrivileges,
callerIsInstrumentingWithBackgroundActivityStartPrivileges);
- // calling package name is the device owner
- doReturn(isCallingPackageNameDeviceOwner).when(mService).isDeviceOwner(any());
+ // callingUid is the device owner
+ doReturn(isCallingUidDeviceOwner).when(mService).isDeviceOwner(callingUid);
// calling package name is temporarily whitelisted
doReturn(isCallingPackageTempWhitelisted).when(mService)
.isPackageNameWhitelistedForBgActivityStarts("com.whatever.dude");