Refrain from returning mutable pending intent in getShortcutIntent

Mutable PendingIntent leads to potential security vulnerabilities, this
CL makes the returning PendingIntent immutable | update current. The
recipeint cannot change the content of the PendingIntent directly, but
the owner can still update the extras of the PendingIntent.

Note: PendingIntent is internally cached in PendingIntentController, so
the owner process do have access to the PendingIntent since
LauncherAppServices called
ActivityManagerService#getPendingIntentActivityAsApp to retrieve the
PendingIntent.

Bug: 190732424
Test: atest ShortcutManagerClientApiTest
Change-Id: Ife8ad7824f061e9e20d31c96f76ceed4edb547cd
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index 5b2c809..419b726 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -18,7 +18,7 @@
 
 import static android.app.ActivityOptions.KEY_SPLASH_SCREEN_THEME;
 import static android.app.PendingIntent.FLAG_IMMUTABLE;
-import static android.app.PendingIntent.FLAG_MUTABLE;
+import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
 import static android.content.pm.LauncherApps.FLAG_CACHE_BUBBLE_SHORTCUTS;
@@ -699,7 +699,8 @@
             final long ident = Binder.clearCallingIdentity();
             try {
                 return injectCreatePendingIntent(0 /* requestCode */, intents,
-                        FLAG_MUTABLE, opts, packageName, mPackageManagerInternal.getPackageUid(
+                        FLAG_IMMUTABLE | FLAG_UPDATE_CURRENT, opts, packageName,
+                        mPackageManagerInternal.getPackageUid(
                                 packageName, PackageManager.MATCH_DIRECT_BOOT_AUTO,
                                 user.getIdentifier()));
             } finally {