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

Commit fc02c1b4 authored by Tony Wickham's avatar Tony Wickham
Browse files

Use promisedIntent instead of intent when deep shortcuts are restored.

This ensures that the intent has the package corresponding to the
shortcut publisher, rather than a market intent. It also ensures that
the intent has the EXTRA_SHORTCUT_ID attached.

Bug: 31123204

Change-Id: I05d56396b629880322e915f52bfc0605b921b0b1
parent 4a4b49ff
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -2932,7 +2932,8 @@ public class Launcher extends Activity
        try {
            if (Utilities.ATLEAST_MARSHMALLOW && item != null
                    && (item.itemType == Favorites.ITEM_TYPE_SHORTCUT
                    || item.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT)) {
                    || item.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT)
                    && ((ShortcutInfo) item).promisedIntent == null) {
                // Shortcuts need some special checks due to legacy reasons.
                startShortcutIntentSafely(intent, optsBundle, item);
            } else if (user == null || user.equals(UserHandleCompat.myUserHandle())) {
@@ -4238,7 +4239,7 @@ public class Launcher extends Activity

            for (ShortcutInfo si : removed) {
                if (si.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
                    removedDeepShortcuts.add(ShortcutKey.fromItemInfo(si));
                    removedDeepShortcuts.add(ShortcutKey.fromShortcutInfo(si));
                } else {
                    removedComponents.add(si.getTargetComponent());
                }
+7 −4
Original line number Diff line number Diff line
@@ -931,7 +931,8 @@ public class LauncherModel extends BroadcastReceiver
                            }
                            if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
                                incrementPinnedShortcutCount(
                                        ShortcutKey.fromItemInfo(item), true /* shouldPin */);
                                        ShortcutKey.fromShortcutInfo((ShortcutInfo) item),
                                        true /* shouldPin */);
                            }
                            break;
                        case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
@@ -1000,7 +1001,8 @@ public class LauncherModel extends BroadcastReceiver
                                sBgWorkspaceItems.remove(item);
                                break;
                            case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT:
                                decrementPinnedShortcutCount(ShortcutKey.fromItemInfo(item));
                                decrementPinnedShortcutCount(ShortcutKey.fromShortcutInfo(
                                        (ShortcutInfo) item));
                                // Fall through.
                            case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
                            case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
@@ -3389,7 +3391,8 @@ public class LauncherModel extends BroadcastReceiver
            for (ItemInfo itemInfo : sBgItemsIdMap) {
                if (itemInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
                    ShortcutInfo si = (ShortcutInfo) itemInfo;
                    if (si.getIntent().getPackage().equals(mPackageName) && si.user.equals(mUser)) {
                    if (si.getPromisedIntent().getPackage().equals(mPackageName)
                            && si.user.equals(mUser)) {
                        String shortcutId = si.getDeepShortcutId();
                        if (idsToShortcuts.containsKey(shortcutId)) {
                            idsToWorkspaceShortcutInfos.addToList(shortcutId, si);
@@ -3462,7 +3465,7 @@ public class LauncherModel extends BroadcastReceiver
                    ShortcutInfo si = (ShortcutInfo) itemInfo;
                    if (isUserUnlocked) {
                        ShortcutInfoCompat shortcut =
                                pinnedShortcuts.get(ShortcutKey.fromItemInfo(si));
                                pinnedShortcuts.get(ShortcutKey.fromShortcutInfo(si));
                        // We couldn't verify the shortcut during loader. If its no longer available
                        // (probably due to clear data), delete the workspace item as well
                        if (shortcut == null) {
+6 −1
Original line number Diff line number Diff line
@@ -167,6 +167,11 @@ public class ShortcutInfo extends ItemInfo {
        return intent;
    }

    /** Returns {@link #promisedIntent}, or {@link #intent} if promisedIntent is null. */
    public Intent getPromisedIntent() {
        return promisedIntent != null ? promisedIntent : intent;
    }

    ShortcutInfo(Intent intent, CharSequence title, CharSequence contentDescription,
            Bitmap icon, UserHandleCompat user) {
        this();
@@ -349,7 +354,7 @@ public class ShortcutInfo extends ItemInfo {
    /** Returns the ShortcutInfo id associated with the deep shortcut. */
    public String getDeepShortcutId() {
        return itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT ?
                intent.getStringExtra(ShortcutInfoCompat.EXTRA_SHORTCUT_ID) : null;
                getPromisedIntent().getStringExtra(ShortcutInfoCompat.EXTRA_SHORTCUT_ID) : null;
    }

    @Override
+3 −3
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ package com.android.launcher3.shortcuts;
import android.content.ComponentName;
import android.content.Intent;

import com.android.launcher3.ItemInfo;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.util.ComponentKey;

@@ -32,7 +32,7 @@ public class ShortcutKey extends ComponentKey {
        return new ShortcutKey(intent.getPackage(), user, shortcutId);
    }

    public static ShortcutKey fromItemInfo(ItemInfo info) {
        return fromIntent(info.getIntent(), info.user);
    public static ShortcutKey fromShortcutInfo(ShortcutInfo info) {
        return fromIntent(info.getPromisedIntent(), info.user);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.ComponentName;

import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.shortcuts.ShortcutKey;

@@ -57,7 +58,7 @@ public abstract class ItemInfoMatcher {
            @Override
            public boolean matches(ItemInfo info, ComponentName cn) {
                return info.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT &&
                        keys.contains(ShortcutKey.fromItemInfo(info));
                        keys.contains(ShortcutKey.fromShortcutInfo((ShortcutInfo) info));
            }
        };
    }