summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/InstallShortcutReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/InstallShortcutReceiver.java')
-rw-r--r--src/com/android/launcher3/InstallShortcutReceiver.java103
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);
}