diff options
Diffstat (limited to 'src/com/android/launcher3/SessionCommitReceiver.java')
-rw-r--r-- | src/com/android/launcher3/SessionCommitReceiver.java | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/com/android/launcher3/SessionCommitReceiver.java b/src/com/android/launcher3/SessionCommitReceiver.java index b0da6b9cd..b4078ee0e 100644 --- a/src/com/android/launcher3/SessionCommitReceiver.java +++ b/src/com/android/launcher3/SessionCommitReceiver.java @@ -18,28 +18,33 @@ package com.android.launcher3; import android.annotation.TargetApi; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; import android.content.pm.LauncherActivityInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; +import android.graphics.Bitmap; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; -import android.os.Process; import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import com.android.launcher3.compat.LauncherAppsCompat; +import com.android.launcher3.compat.PackageInstallerCompat; import java.util.List; +import static com.android.launcher3.compat.PackageInstallerCompat.getUserHandle; + /** * BroadcastReceiver to handle session commit intent. */ @@ -66,15 +71,29 @@ public class SessionCommitReceiver extends BroadcastReceiver { SessionInfo info = intent.getParcelableExtra(PackageInstaller.EXTRA_SESSION); UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); + PackageInstallerCompat packageInstallerCompat = PackageInstallerCompat.getInstance(context); - if (TextUtils.isEmpty(info.getAppPackageName()) || - info.getInstallReason() != PackageManager.INSTALL_REASON_USER) { + if (TextUtils.isEmpty(info.getAppPackageName()) + || info.getInstallReason() != PackageManager.INSTALL_REASON_USER + || packageInstallerCompat.promiseIconAddedForId(info.getSessionId())) { + packageInstallerCompat.removePromiseIconId(info.getSessionId()); return; } queueAppIconAddition(context, info.getAppPackageName(), user); } + public static void queuePromiseAppIconAddition(Context context, SessionInfo sessionInfo) { + String packageName = sessionInfo.getAppPackageName(); + List<LauncherActivityInfo> activities = LauncherAppsCompat.getInstance(context) + .getActivityList(packageName, getUserHandle(sessionInfo)); + if (activities == null || activities.isEmpty()) { + // Ensure application isn't already installed. + queueAppIconAddition(context, packageName, sessionInfo.getAppLabel(), + sessionInfo.getAppIcon(), getUserHandle(sessionInfo)); + } + } + public static void queueAppIconAddition(Context context, String packageName, UserHandle user) { List<LauncherActivityInfo> activities = LauncherAppsCompat.getInstance(context) .getActivityList(packageName, user); @@ -82,7 +101,18 @@ public class SessionCommitReceiver extends BroadcastReceiver { // no activity found return; } - InstallShortcutReceiver.queueActivityInfo(activities.get(0), context); + queueAppIconAddition(context, packageName, activities.get(0).getLabel(), null, user); + } + + private static void queueAppIconAddition(Context context, String packageName, + CharSequence label, Bitmap icon, UserHandle user) { + Intent data = new Intent(); + data.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent().setComponent( + new ComponentName(packageName, "")).setPackage(packageName)); + data.putExtra(Intent.EXTRA_SHORTCUT_NAME, label); + data.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon); + + InstallShortcutReceiver.queueApplication(data, user, context); } public static boolean isEnabled(Context context) { |