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

Commit d9b6b204 authored by Sarup Dalwani's avatar Sarup Dalwani
Browse files

Adding userHandle in ResolveInfo

Adding userHandle in ResolveInfo so that system can identify
originating user to differentiate cross user results.

Bug: 251373122
Test: Tested manually
Change-Id: Idd94d29bd5bc7ff6e54900eeb70713d4950470c0
parent 20a77a58
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.content.pm;

import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
@@ -106,6 +107,14 @@ public class ResolveInfo implements Parcelable {
     */
    public int match;

    /**
     * UserHandle of originating user for ResolveInfo. This will help caller distinguish cross
     * profile results from intent resolution.
     * @hide
     */
    @Nullable
    public UserHandle userHandle;

    /**
     * Only set when returned by
     * {@link PackageManager#queryIntentActivityOptions}, this tells you
@@ -418,6 +427,7 @@ public class ResolveInfo implements Parcelable {
        handleAllWebDataURI = orig.handleAllWebDataURI;
        mAutoResolutionAllowed = orig.mAutoResolutionAllowed;
        isInstantAppAvailable = orig.isInstantAppAvailable;
        userHandle = orig.userHandle;
    }

    public String toString() {
@@ -441,6 +451,10 @@ public class ResolveInfo implements Parcelable {
            sb.append(" targetUserId=");
            sb.append(targetUserId);
        }

        sb.append(" userHandle=");
        sb.append(userHandle);

        sb.append('}');
        return sb.toString();
    }
@@ -483,6 +497,7 @@ public class ResolveInfo implements Parcelable {
        dest.writeInt(handleAllWebDataURI ? 1 : 0);
        dest.writeInt(mAutoResolutionAllowed ? 1 : 0);
        dest.writeInt(isInstantAppAvailable ? 1 : 0);
        dest.writeInt(userHandle != null ? userHandle.getIdentifier() : UserHandle.USER_CURRENT);
    }

    public static final @android.annotation.NonNull Creator<ResolveInfo> CREATOR
@@ -532,6 +547,10 @@ public class ResolveInfo implements Parcelable {
        handleAllWebDataURI = source.readInt() != 0;
        mAutoResolutionAllowed = source.readInt() != 0;
        isInstantAppAvailable = source.readInt() != 0;
        int userHandleId = source.readInt();
        if (userHandleId != UserHandle.USER_CURRENT) {
            userHandle = UserHandle.of(userHandleId);
        }
    }

    public static class DisplayNameComparator
+1 −0
Original line number Diff line number Diff line
@@ -1755,6 +1755,7 @@ public class ComputerEngine implements Computer {
        forwardingResolveInfo.isDefault = true;
        forwardingResolveInfo.filter = new IntentFilter(filter.getIntentFilter());
        forwardingResolveInfo.targetUserId = targetUserId;
        forwardingResolveInfo.userHandle = UserHandle.of(sourceUserId);
        return forwardingResolveInfo;
    }

+1 −0
Original line number Diff line number Diff line
@@ -281,6 +281,7 @@ final class ResolveIntentHelper {
                ri.handleAllWebDataURI = browserCount == n;
                ri.activityInfo = new ActivityInfo(ri.activityInfo);
                ri.activityInfo.labelRes = ResolverActivity.getLabelRes(intent.getAction());
                if (ri.userHandle == null) ri.userHandle = UserHandle.of(userId);
                // If all of the options come from the same package, show the application's
                // label and icon instead of the generic resolver's.
                // Some calls like Intent.resolveActivityInfo query the ResolveInfo from here
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.DebugUtils;
@@ -1197,6 +1198,7 @@ public class ComponentResolver extends ComponentResolverLocked implements
            res.iconResourceId = info.getIcon();
            res.system = res.activityInfo.applicationInfo.isSystemApp();
            res.isInstantAppAvailable = userState.isInstantApp();
            res.userHandle = UserHandle.of(userId);
            return res;
        }