Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9e21f71 authored by Nikita Ioffe's avatar Nikita Ioffe
Browse files

Handle supplemental process uid range for uid-based PM apis

This change teaches uid-based PackageManager APIs (e.g.
getPackagesForUid, getNameForUid, etc.) about supplemental process uid
range. These uids are resolved to the "installed" supplemental process
uid.

Bug: 215241564
Test: atest PackageManagerShellCommandTest
Change-Id: Icf9ac7282f6a5309a816be354ef4a7ca427b6c40
parent 5c5cdad7
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -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);
    }
@@ -4288,6 +4291,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);
@@ -4320,7 +4326,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;
@@ -4366,6 +4376,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);
@@ -4391,6 +4404,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);
@@ -4415,6 +4431,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) {
@@ -5539,6 +5558,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) {
@@ -5565,6 +5587,9 @@ public class ComputerEngine implements Computer {
    @Nullable
    @Override
    public ArrayMap<String, ProcessInfo> 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) {
@@ -5594,4 +5619,8 @@ public class ComputerEngine implements Computer {
            return null;
        }
    }

    private int getSupplementalProcessUid() {
        return getPackage(mService.getSupplementalProcessPackageName()).getUid();
    }
}