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
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 54504c3..44d67ed 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -317,11 +317,16 @@
                 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) {
-                finalIntent.addFlags(opts.getPendingIntentLaunchFlags());
+                // TODO(b/254490217): Move this check into SafeActivityOptions
+                if (controller.mAtmInternal.isCallerRecents(Binder.getCallingUid())) {
+                    finalIntent.addFlags(opts.getPendingIntentLaunchFlags());
+                }
             }
 
             // Extract options before clearing calling identity