diff options
Diffstat (limited to 'src/com/android/launcher3/InstallShortcutReceiver.java')
-rw-r--r-- | src/com/android/launcher3/InstallShortcutReceiver.java | 103 |
1 files changed, 54 insertions, 49 deletions
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index e9b932aaf..670cd2877 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -19,6 +19,7 @@ package com.android.launcher3; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -29,7 +30,6 @@ import android.content.pm.ShortcutInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; -import android.os.Looper; import android.os.Message; import android.os.Parcelable; import android.os.Process; @@ -141,7 +141,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver { String pkg = getIntentPackage(info.launchIntent); if (!TextUtils.isEmpty(pkg) - && !launcherApps.isPackageEnabledForProfile(pkg, info.user)) { + && !launcherApps.isPackageEnabledForProfile(pkg, info.user) + && !info.isActivity) { if (DBG) Log.d(TAG, "Ignoring shortcut for absent package: " + info.launchIntent); continue; @@ -250,7 +251,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver { } public static WorkspaceItemInfo fromActivityInfo(LauncherActivityInfo info, Context context) { - return (WorkspaceItemInfo) (new PendingInstallShortcutInfo(info, context).getItemInfo().first); + return (WorkspaceItemInfo) + new PendingInstallShortcutInfo(info, context).getItemInfo().first; } public static void queueShortcut(ShortcutInfo info, Context context) { @@ -261,8 +263,9 @@ public class InstallShortcutReceiver extends BroadcastReceiver { queuePendingShortcutInfo(new PendingInstallShortcutInfo(info, widgetId, context), context); } - public static void queueActivityInfo(LauncherActivityInfo activity, Context context) { - queuePendingShortcutInfo(new PendingInstallShortcutInfo(activity, context), context); + public static void queueApplication(Intent data, UserHandle user, Context context) { + queuePendingShortcutInfo(new PendingInstallShortcutInfo(data, context, user), + context); } public static HashSet<ShortcutKey> getPendingShortcuts(Context context) { @@ -326,7 +329,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { private static class PendingInstallShortcutInfo { - final LauncherActivityInfo activityInfo; + final boolean isActivity; final ShortcutInfo shortcutInfo; final AppWidgetProviderInfo providerInfo; @@ -340,7 +343,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { * Initializes a PendingInstallShortcutInfo received from a different app. */ public PendingInstallShortcutInfo(Intent data, UserHandle user, Context context) { - activityInfo = null; + isActivity = false; shortcutInfo = null; providerInfo = null; @@ -350,14 +353,13 @@ public class InstallShortcutReceiver extends BroadcastReceiver { launchIntent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT); label = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME); - } /** * Initializes a PendingInstallShortcutInfo to represent a launcher target. */ public PendingInstallShortcutInfo(LauncherActivityInfo info, Context context) { - activityInfo = info; + isActivity = true; shortcutInfo = null; providerInfo = null; @@ -372,8 +374,24 @@ public class InstallShortcutReceiver extends BroadcastReceiver { /** * Initializes a PendingInstallShortcutInfo to represent a launcher target. */ + public PendingInstallShortcutInfo(Intent data, Context context, UserHandle user) { + isActivity = true; + shortcutInfo = null; + providerInfo = null; + + this.data = data; + this.user = user; + mContext = context; + + launchIntent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT); + label = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME); + } + + /** + * Initializes a PendingInstallShortcutInfo to represent a launcher target. + */ public PendingInstallShortcutInfo(ShortcutInfo info, Context context) { - activityInfo = null; + isActivity = false; shortcutInfo = info; providerInfo = null; @@ -390,7 +408,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { */ public PendingInstallShortcutInfo( AppWidgetProviderInfo info, int widgetId, Context context) { - activityInfo = null; + isActivity = false; shortcutInfo = null; providerInfo = info; @@ -405,17 +423,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { public String encodeToString() { try { - if (activityInfo != null) { - // If it a launcher target, we only need component name, and user to - // recreate this. - return new JSONStringer() - .object() - .key(LAUNCH_INTENT_KEY).value(launchIntent.toUri(0)) - .key(APP_SHORTCUT_TYPE_KEY).value(true) - .key(USER_HANDLE_KEY).value(UserManagerCompat.getInstance(mContext) - .getSerialNumberForUser(user)) - .endObject().toString(); - } else if (shortcutInfo != null) { + if (shortcutInfo != null) { // If it a launcher target, we only need component name, and user to // recreate this. return new JSONStringer() @@ -457,7 +465,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver { JSONStringer json = new JSONStringer() .object() .key(LAUNCH_INTENT_KEY).value(launchIntent.toUri(0)) - .key(NAME_KEY).value(name); + .key(NAME_KEY).value(name) + .key(APP_SHORTCUT_TYPE_KEY).value(isActivity); if (icon != null) { byte[] iconByteArray = GraphicsUtils.flattenBitmap(icon); json = json.key(ICON_KEY).value( @@ -477,29 +486,18 @@ public class InstallShortcutReceiver extends BroadcastReceiver { } public Pair<ItemInfo, Object> getItemInfo() { - if (activityInfo != null) { - AppInfo appInfo = new AppInfo(mContext, activityInfo, user); - final LauncherAppState app = LauncherAppState.getInstance(mContext); - // Set default values until proper values is loaded. - appInfo.title = ""; - appInfo.applyFrom(app.getIconCache().getDefaultIcon(user)); - final WorkspaceItemInfo si = appInfo.makeWorkspaceItem(); - if (Looper.myLooper() == LauncherModel.getWorkerLooper()) { - app.getIconCache().getTitleAndIcon(si, activityInfo, false /* useLowResIcon */); - } else { - app.getModel().updateAndBindWorkspaceItem(() -> { - app.getIconCache().getTitleAndIcon( - si, activityInfo, false /* useLowResIcon */); - return si; - }); - } - return Pair.create((ItemInfo) si, (Object) activityInfo); + if (isActivity) { + WorkspaceItemInfo si = createWorkspaceItemInfo(data, + LauncherAppState.getInstance(mContext)); + si.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; + si.status |= WorkspaceItemInfo.FLAG_AUTOINSTALL_ICON; + return Pair.create(si, null); } else if (shortcutInfo != null) { - WorkspaceItemInfo si = new WorkspaceItemInfo(shortcutInfo, mContext); + WorkspaceItemInfo itemInfo = new WorkspaceItemInfo(shortcutInfo, mContext); LauncherIcons li = LauncherIcons.obtain(mContext); - si.applyFrom(li.createShortcutIcon(shortcutInfo)); + itemInfo.applyFrom(li.createShortcutIcon(shortcutInfo)); li.recycle(); - return Pair.create((ItemInfo) si, (Object) shortcutInfo); + return Pair.create(itemInfo, shortcutInfo); } else if (providerInfo != null) { LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo .fromProviderInfo(mContext, providerInfo); @@ -511,15 +509,16 @@ public class InstallShortcutReceiver extends BroadcastReceiver { widgetInfo.minSpanY = info.minSpanY; widgetInfo.spanX = Math.min(info.spanX, idp.numColumns); widgetInfo.spanY = Math.min(info.spanY, idp.numRows); - return Pair.create((ItemInfo) widgetInfo, (Object) providerInfo); + return Pair.create(widgetInfo, providerInfo); } else { - WorkspaceItemInfo si = createWorkspaceItemInfo(data, LauncherAppState.getInstance(mContext)); - return Pair.create((ItemInfo) si, null); + WorkspaceItemInfo itemInfo = + createWorkspaceItemInfo(data, LauncherAppState.getInstance(mContext)); + return Pair.create(itemInfo, null); } } public boolean isLauncherActivity() { - return activityInfo != null; + return isActivity; } } @@ -534,7 +533,9 @@ public class InstallShortcutReceiver extends BroadcastReceiver { if (decoder.optBoolean(APP_SHORTCUT_TYPE_KEY)) { LauncherActivityInfo info = LauncherAppsCompat.getInstance(context) .resolveActivity(decoder.launcherIntent, decoder.user); - return info == null ? null : new PendingInstallShortcutInfo(info, context); + if (info != null) { + return new PendingInstallShortcutInfo(info, context); + } } else if (decoder.optBoolean(DEEPSHORTCUT_TYPE_KEY)) { DeepShortcutManager sm = DeepShortcutManager.getInstance(context); List<ShortcutInfo> si = sm.queryForFullDetails( @@ -578,7 +579,11 @@ public class InstallShortcutReceiver extends BroadcastReceiver { data.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); } - return new PendingInstallShortcutInfo(data, decoder.user, context); + if (decoder.optBoolean(APP_SHORTCUT_TYPE_KEY)) { + return new PendingInstallShortcutInfo(data, context, decoder.user); + } else { + return new PendingInstallShortcutInfo(data, decoder.user, context); + } } catch (JSONException | URISyntaxException e) { Log.d(TAG, "Exception reading shortcut to add: " + e); } |