Merge "Fix sharing to another profile where an app has multiple targets" into rvc-dev am: 59a63e8062 am: eec74eb462 am: f0027983a0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20256127 Change-Id: I4704527b24a4927dd69520c7411f359e5b560cc8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1227,9 +1227,6 @@ public class ResolverActivity extends Activity implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
if (intent != null && isLaunchingTargetInOtherProfile()) {
|
|
||||||
prepareIntentForCrossProfileLaunch(intent);
|
|
||||||
}
|
|
||||||
safelyStartActivity(target);
|
safelyStartActivity(target);
|
||||||
|
|
||||||
// Rely on the ActivityManager to pop up a dialog regarding app suspension
|
// Rely on the ActivityManager to pop up a dialog regarding app suspension
|
||||||
@@ -1242,15 +1239,6 @@ public class ResolverActivity extends Activity implements
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareIntentForCrossProfileLaunch(Intent intent) {
|
|
||||||
intent.fixUris(UserHandle.myUserId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isLaunchingTargetInOtherProfile() {
|
|
||||||
return mMultiProfilePagerAdapter.getCurrentUserHandle().getIdentifier()
|
|
||||||
!= UserHandle.myUserId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void safelyStartActivity(TargetInfo cti) {
|
public void safelyStartActivity(TargetInfo cti) {
|
||||||
// We're dispatching intents that might be coming from legacy apps, so
|
// We're dispatching intents that might be coming from legacy apps, so
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {
|
|||||||
if (ENABLE_CHOOSER_DELEGATE) {
|
if (ENABLE_CHOOSER_DELEGATE) {
|
||||||
return activity.startAsCallerImpl(mResolvedIntent, options, false, userId);
|
return activity.startAsCallerImpl(mResolvedIntent, options, false, userId);
|
||||||
} else {
|
} else {
|
||||||
|
TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, userId);
|
||||||
activity.startActivityAsCaller(mResolvedIntent, options, null, false, userId);
|
activity.startActivityAsCaller(mResolvedIntent, options, null, false, userId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -188,6 +189,7 @@ public class DisplayResolveInfo implements TargetInfo, Parcelable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
|
public boolean startAsUser(Activity activity, Bundle options, UserHandle user) {
|
||||||
|
TargetInfo.prepareIntentForCrossProfileLaunch(mResolvedIntent, user.getIdentifier());
|
||||||
activity.startActivityAsUser(mResolvedIntent, options, user);
|
activity.startActivityAsUser(mResolvedIntent, options, user);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ public final class SelectableTargetInfo implements ChooserTargetInfo {
|
|||||||
}
|
}
|
||||||
intent.setComponent(mChooserTarget.getComponentName());
|
intent.setComponent(mChooserTarget.getComponentName());
|
||||||
intent.putExtras(mChooserTarget.getIntentExtras());
|
intent.putExtras(mChooserTarget.getIntentExtras());
|
||||||
|
TargetInfo.prepareIntentForCrossProfileLaunch(intent, userId);
|
||||||
|
|
||||||
// Important: we will ignore the target security checks in ActivityManager
|
// Important: we will ignore the target security checks in ActivityManager
|
||||||
// if and only if the ChooserTarget's target package is the same package
|
// 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
|
* @return true if this target should be pinned to the front by the request of the user
|
||||||
*/
|
*/
|
||||||
boolean isPinned();
|
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