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

Commit c4d3106e authored by Winson Chung's avatar Winson Chung
Browse files

Ensure that only SysUI can override pending intent launch flags

- Originally added in ag/5139951, this method ensured that activities
  launched from widgets are always started in a new task (if the
  activity is launched in the home task, the task is not brough forward
  with the recents transition).  We can restrict this to only recents
  callers since this only applies to 1p launchers in gesture nav
  (both the gesture with 3p launchers and button nav in general will
  always start the home intent directly, which makes adding the
  NEW_TASK flag unnecessary).

Bug: 243794108
Test: Ensure that the original bug b/112508020 still works (with the
      test app in the bug, swipe up still works after launching an
      activity from the widget, and fails without applying the
      override flags)
Change-Id: Id53c6a2aa6da5933d488ca06a0bfc4ef89a4c343
parent dc0095e9
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -317,12 +317,17 @@ public final class PendingIntentRecord extends IIntentSender.Stub {
                resolvedType = key.requestResolvedType;
            }

            // Apply any launch flags from the ActivityOptions. This is to ensure that the caller
            // can specify a consistent launch mode even if the PendingIntent is immutable
            // Apply any launch flags from the ActivityOptions. This is used only by SystemUI
            // to ensure that we can launch the pending intent with a consistent launch mode even
            // if the provided PendingIntent is immutable (ie. to force an activity to launch into
            // a new task, or to launch multiple instances if supported by the app)
            final ActivityOptions opts = ActivityOptions.fromBundle(options);
            if (opts != null) {
                // TODO(b/254490217): Move this check into SafeActivityOptions
                if (controller.mAtmInternal.isCallerRecents(Binder.getCallingUid())) {
                    finalIntent.addFlags(opts.getPendingIntentLaunchFlags());
                }
            }

            // Extract options before clearing calling identity
            mergedOptions = key.options;