diff options
4 files changed, 22 insertions, 3 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index b388d28d6..d4bfc4913 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1451,9 +1451,14 @@ public class Launcher extends BaseActivity } 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 27433796a..d7e35a2e5 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java @@ -20,6 +20,8 @@ import android.content.Context; 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 @@ public class LauncherAppsCompatVO extends LauncherAppsCompatVL { @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 550bcc327..1308cba97 100644 --- a/src/com/android/launcher3/compat/PinItemRequestCompat.java +++ b/src/com/android/launcher3/compat/PinItemRequestCompat.java @@ -24,6 +24,8 @@ import android.os.Bundle; 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 class PinItemRequestCompat implements Parcelable { }; 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 538e1df5b..dabd40df1 100644 --- a/src/com/android/launcher3/util/PendingRequestArgs.java +++ b/src/com/android/launcher3/util/PendingRequestArgs.java @@ -53,6 +53,7 @@ public class PendingRequestArgs extends ItemInfo implements Parcelable { public PendingRequestArgs(Parcel parcel) { readFromValues(ContentValues.CREATOR.createFromParcel(parcel)); + user = parcel.readParcelable(null); mArg1 = parcel.readInt(); mObjectType = parcel.readInt(); @@ -69,6 +70,7 @@ public class PendingRequestArgs extends ItemInfo implements Parcelable { ContentValues itemValues = new ContentValues(); writeToValues(new ContentWriter(itemValues, null)); itemValues.writeToParcel(dest, flags); + dest.writeParcelable(user, flags); dest.writeInt(mArg1); dest.writeInt(mObjectType); |