Merge "Fix sharing to another profile where an app has multiple targets" into tm-dev
This commit is contained in:
@@ -1283,9 +1283,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
|
||||
@@ -1298,15 +1295,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
|
||||
@@ -1508,9 +1496,6 @@ public class ResolverActivity extends Activity implements
|
||||
|
||||
findViewById(R.id.button_open).setOnClickListener(v -> {
|
||||
Intent intent = otherProfileResolveInfo.getResolvedIntent();
|
||||
if (intent != null) {
|
||||
prepareIntentForCrossProfileLaunch(intent);
|
||||
}
|
||||
safelyStartActivityAsUser(otherProfileResolveInfo,
|
||||
inactiveAdapter.mResolverListController.getUserHandle());
|
||||
finish();
|
||||
|
||||
@@ -172,12 +172,14 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {
|
||||
|
||||
@Override
|
||||
public boolean startAsCaller(ResolverActivity activity, Bundle options, int userId) {
|
||||
TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, userId);
|
||||
activity.startActivityAsCaller(mResolvedIntent, options, false, userId);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
|
||||
TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, user.getIdentifier());
|
||||
activity.startActivityAsUser(mResolvedIntent, options, user);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -232,6 +232,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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user