diff --git a/core/api/test-current.txt b/core/api/test-current.txt index bcc7e4a59c491..4a71ab93c1e06 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -1753,6 +1753,7 @@ package android.os { public class Process { method public static final int getThreadScheduler(int) throws java.lang.IllegalArgumentException; + method public static final int toSupplementalUid(int); field public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000; // 0x15f90 field public static final int FIRST_ISOLATED_UID = 99000; // 0x182b8 field public static final int LAST_APP_ZYGOTE_ISOLATED_UID = 98999; // 0x182b7 diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 2fe0622681127..17b5ec5ca01bd 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -929,6 +929,7 @@ public class Process { * @hide */ @SystemApi(client = MODULE_LIBRARIES) + @TestApi public static final int toSupplementalUid(int uid) { return uid + (FIRST_SUPPLEMENTAL_UID - FIRST_APPLICATION_UID); } diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 2011528eabcad..78aa45a812e45 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -2134,6 +2134,9 @@ public class ComputerEngine implements Computer { private String[] getPackagesForUidInternal(int uid, int callingUid) { final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null; final int userId = UserHandle.getUserId(uid); + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int appId = UserHandle.getAppId(uid); return getPackagesForUidInternalBody(callingUid, userId, appId, isCallerInstantApp); } @@ -4292,6 +4295,9 @@ public class ComputerEngine implements Computer { if (getInstantAppPackageName(callingUid) != null) { return null; } + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int callingUserId = UserHandle.getUserId(callingUid); final int appId = UserHandle.getAppId(uid); final Object obj = mSettings.getSettingBase(appId); @@ -4324,7 +4330,11 @@ public class ComputerEngine implements Computer { final int callingUserId = UserHandle.getUserId(callingUid); final String[] names = new String[uids.length]; for (int i = uids.length - 1; i >= 0; i--) { - final int appId = UserHandle.getAppId(uids[i]); + int uid = uids[i]; + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } + final int appId = UserHandle.getAppId(uid); final Object obj = mSettings.getSettingBase(appId); if (obj instanceof SharedUserSetting) { final SharedUserSetting sus = (SharedUserSetting) obj; @@ -4370,6 +4380,9 @@ public class ComputerEngine implements Computer { if (getInstantAppPackageName(callingUid) != null) { return 0; } + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int callingUserId = UserHandle.getUserId(callingUid); final int appId = UserHandle.getAppId(uid); final Object obj = mSettings.getSettingBase(appId); @@ -4395,6 +4408,9 @@ public class ComputerEngine implements Computer { if (getInstantAppPackageName(callingUid) != null) { return 0; } + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int callingUserId = UserHandle.getUserId(callingUid); final int appId = UserHandle.getAppId(uid); final Object obj = mSettings.getSettingBase(appId); @@ -4419,6 +4435,9 @@ public class ComputerEngine implements Computer { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return false; } + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int appId = UserHandle.getAppId(uid); final Object obj = mSettings.getSettingBase(appId); if (obj instanceof SharedUserSetting) { @@ -5543,6 +5562,9 @@ public class ComputerEngine implements Computer { @Override public int getUidTargetSdkVersion(int uid) { + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int appId = UserHandle.getAppId(uid); final SettingBase settingBase = mSettings.getSettingBase(appId); if (settingBase instanceof SharedUserSetting) { @@ -5569,6 +5591,9 @@ public class ComputerEngine implements Computer { @Nullable @Override public ArrayMap getProcessesForUid(int uid) { + if (Process.isSupplemental(uid)) { + uid = getSupplementalProcessUid(); + } final int appId = UserHandle.getAppId(uid); final SettingBase settingBase = mSettings.getSettingBase(appId); if (settingBase instanceof SharedUserSetting) { @@ -5598,4 +5623,8 @@ public class ComputerEngine implements Computer { return null; } } + + private int getSupplementalProcessUid() { + return getPackage(mService.getSupplementalProcessPackageName()).getUid(); + } }