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

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

Change-Id: I96f7aaf1edac0904923f07127cccbe369650196d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Liahav Eitan
2022-10-31 14:53:40 +00:00
committed by Automerger Merge Worker
4 changed files with 14 additions and 12 deletions

View File

@@ -1233,9 +1233,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
@@ -1248,15 +1245,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

View File

@@ -178,6 +178,7 @@ public class DisplayResolveInfo implements TargetInfo {
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;
}
@@ -185,6 +186,7 @@ public class DisplayResolveInfo implements TargetInfo {
@Override
public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, user.getIdentifier());
activity.startActivityAsUser(mResolvedIntent, options, user);
return false;
}

View File

@@ -230,6 +230,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

View File

@@ -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);
}
}
}