mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
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
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user