Removing config shortcut activities for managed profiles for
apps build with older sdk

> Also fixing the bug where legacy icon with primary user gets
created when managed user failed to provide the new icon

Bug: 34392403
Change-Id: I1d56962e9520742781df6cbeb03be2b9767a8c0b
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index b388d28..d4bfc49 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1451,9 +1451,14 @@
         }
 
         if (info == null) {
-            info = InstallShortcutReceiver.fromShortcutIntent(this, data);
+            // Legacy shortcuts are only supported for primary profile.
+            info = Process.myUserHandle().equals(args.user)
+                    ? InstallShortcutReceiver.fromShortcutIntent(this, data) : null;
 
-            if (info == null || !new PackageManagerHelper(this).hasPermissionForActivity(
+            if (info == null) {
+                Log.e(TAG, "Unable to parse a valid custom shortcut result");
+                return;
+            } else if (!new PackageManagerHelper(this).hasPermissionForActivity(
                     info.intent, args.getPendingIntent().getComponent().getPackageName())) {
                 // The app is trying to add a shortcut without sufficient permissions
                 Log.e(TAG, "Ignoring malicious intent " + info.intent.toUri(0));
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
index 2743379..d7e35a2 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
@@ -20,6 +20,8 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.LauncherActivityInfo;
 import android.content.pm.LauncherApps;
+import android.os.Build;
+import android.os.Process;
 import android.os.UserHandle;
 import android.util.Log;
 
@@ -44,15 +46,20 @@
     @Override
     public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList() {
         List<ShortcutConfigActivityInfo> result = new ArrayList<>();
+        UserHandle myUser = Process.myUserHandle();
 
         try {
             Method m = LauncherApps.class.getDeclaredMethod("getShortcutConfigActivityList",
                     String.class, UserHandle.class);
             for (UserHandle user : UserManagerCompat.getInstance(mContext).getUserProfiles()) {
+                boolean ignoreTargetSdk = myUser.equals(user);
                 List<LauncherActivityInfo> activities =
                         (List<LauncherActivityInfo>) m.invoke(mLauncherApps, null, user);
                 for (LauncherActivityInfo activityInfo : activities) {
-                    result.add(new ShortcutConfigActivityInfoVO(activityInfo));
+                    if (ignoreTargetSdk || activityInfo.getApplicationInfo().targetSdkVersion >=
+                            Build.VERSION_CODES.O) {
+                        result.add(new ShortcutConfigActivityInfoVO(activityInfo));
+                    }
                 }
             }
         } catch (Exception e) {
diff --git a/src/com/android/launcher3/compat/PinItemRequestCompat.java b/src/com/android/launcher3/compat/PinItemRequestCompat.java
index 550bcc3..1308cba 100644
--- a/src/com/android/launcher3/compat/PinItemRequestCompat.java
+++ b/src/com/android/launcher3/compat/PinItemRequestCompat.java
@@ -24,6 +24,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import com.android.launcher3.Utilities;
+
 /**
  * A wrapper around platform implementation of PinItemRequestCompat until the
  * updated SDK is available.
@@ -115,6 +117,9 @@
             };
 
     public static PinItemRequestCompat getPinItemRequest(Intent intent) {
+        if (!Utilities.isAtLeastO()) {
+            return null;
+        }
         Parcelable extra = intent.getParcelableExtra(EXTRA_PIN_ITEM_REQUEST);
         return extra == null ? null : new PinItemRequestCompat(extra);
     }
diff --git a/src/com/android/launcher3/util/PendingRequestArgs.java b/src/com/android/launcher3/util/PendingRequestArgs.java
index 538e1df..dabd40d 100644
--- a/src/com/android/launcher3/util/PendingRequestArgs.java
+++ b/src/com/android/launcher3/util/PendingRequestArgs.java
@@ -53,6 +53,7 @@
 
     public PendingRequestArgs(Parcel parcel) {
         readFromValues(ContentValues.CREATOR.createFromParcel(parcel));
+        user = parcel.readParcelable(null);
 
         mArg1 = parcel.readInt();
         mObjectType = parcel.readInt();
@@ -69,6 +70,7 @@
         ContentValues itemValues = new ContentValues();
         writeToValues(new ContentWriter(itemValues, null));
         itemValues.writeToParcel(dest, flags);
+        dest.writeParcelable(user, flags);
 
         dest.writeInt(mArg1);
         dest.writeInt(mObjectType);