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

Commit d9773162 authored by Liahav Eitan's avatar Liahav Eitan Committed by Automerger Merge Worker
Browse files

Merge "Fix sharing to another profile where an app has multiple targets" into...

Merge "Fix sharing to another profile where an app has multiple targets" into rvc-dev am: 59a63e80 am: eec74eb4 am: f0027983 am: b926b8ec

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20256127



Change-Id: I24916ef96399f8ccffe503a7855a24d172f6e4c7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 09c67441 b926b8ec
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -1227,9 +1227,6 @@ public class ResolverActivity extends Activity implements
        }

        if (target != null) {
            if (intent != null && isLaunchingTargetInOtherProfile()) {
                prepareIntentForCrossProfileLaunch(intent);
            }
            safelyStartActivity(target);

            // Rely on the ActivityManager to pop up a dialog regarding app suspension
@@ -1242,15 +1239,6 @@ public class ResolverActivity extends Activity implements
        return true;
    }

    private void prepareIntentForCrossProfileLaunch(Intent intent) {
        intent.fixUris(UserHandle.myUserId());
    }

    private boolean isLaunchingTargetInOtherProfile() {
        return mMultiProfilePagerAdapter.getCurrentUserHandle().getIdentifier()
                != UserHandle.myUserId();
    }

    @VisibleForTesting
    public void safelyStartActivity(TargetInfo cti) {
        // We're dispatching intents that might be coming from legacy apps, so
+2 −0
Original line number Diff line number Diff line
@@ -181,6 +181,7 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {
        if (ENABLE_CHOOSER_DELEGATE) {
            return activity.startAsCallerImpl(mResolvedIntent, options, false, userId);
        } else {
            TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, userId);
            activity.startActivityAsCaller(mResolvedIntent, options, null, false, userId);
            return true;
        }
@@ -188,6 +189,7 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {

    @Override
    public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
        TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, user.getIdentifier());
        activity.startActivityAsUser(mResolvedIntent, options, user);
        return false;
    }
+1 −0
Original line number Diff line number Diff line
@@ -229,6 +229,7 @@ public final class SelectableTargetInfo implements ChooserTargetInfo {
        }
        intent.setComponent(mChooserTarget.getComponentName());
        intent.putExtras(mChooserTarget.getIntentExtras());
        TargetInfo.prepareIntentForCrossProfileLaunch(intent, userId);

        // Important: we will ignore the target security checks in ActivityManager
        // if and only if the ChooserTarget's target package is the same package
+11 −0
Original line number Diff line number Diff line
@@ -130,4 +130,15 @@ public interface TargetInfo {
     * @return true if this target should be pinned to the front by the request of the user
     */
    boolean isPinned();

    /**
     * Fix the URIs in {@code intent} if cross-profile sharing is required. This should be called
     * before launching the intent as another user.
     */
    static void prepareIntentForCrossProfileLaunch(Intent intent, int targetUserId) {
        final int currentUserId = UserHandle.myUserId();
        if (targetUserId != currentUserId) {
            intent.fixUris(currentUserId);
        }
    }
}