From 088b9c2f87eb6222d86c862c1478e12c58b5adb9 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 17 Sep 2019 11:51:49 -0700 Subject: [PATCH] Adding in missing changes to ub-launcher3-master. Manual merge marked as DO NOT MERGE: Id60ae2c08ec7aca6780fec1f873920f3857d598e also including the subsequent fix I8ee6836d3a06f315518aa4829c8e2ddf8cf5f74d that I had to Skip from the automerger since the first CL never made it in. Change-Id: I5a4a39278010099dded8fe06e960c0397c49c0aa --- src/com/android/launcher3/LauncherModel.java | 26 +++++++++++++++++++ .../compat/PackageInstallerCompatVL.java | 14 +++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index aaeb3cb7db..c0cf135441 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -53,6 +53,8 @@ import com.android.launcher3.model.PackageUpdatedTask; import com.android.launcher3.model.ShortcutsChangedTask; import com.android.launcher3.model.UserLockStateChangedTask; import com.android.launcher3.shortcuts.DeepShortcutManager; +import com.android.launcher3.util.IntSparseArrayMap; +import com.android.launcher3.util.ItemInfoMatcher; import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.Thunk; @@ -171,6 +173,30 @@ public class LauncherModel extends BroadcastReceiver enqueueModelUpdateTask(new PackageUpdatedTask(op, user, packageName)); } + public void onSessionFailure(String packageName, UserHandle user) { + enqueueModelUpdateTask(new BaseModelUpdateTask() { + @Override + public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { + final IntSparseArrayMap removedIds = new IntSparseArrayMap<>(); + synchronized (dataModel) { + for (ItemInfo info : dataModel.itemsIdMap) { + if (info instanceof WorkspaceItemInfo + && ((WorkspaceItemInfo) info).hasPromiseIconUi() + && user.equals(info.user) + && info.getIntent() != null + && TextUtils.equals(packageName, info.getIntent().getPackage())) { + removedIds.put(info.id, true /* remove */); + } + } + } + + if (!removedIds.isEmpty()) { + deleteAndBindComponentsRemoved(ItemInfoMatcher.ofItemIds(removedIds, false)); + } + } + }); + } + @Override public void onPackageRemoved(String packageName, UserHandle user) { onPackagesRemoved(user, packageName); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index 09d9310605..6de62931f4 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -139,6 +139,8 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { * - The settings for it are enabled * - The user installed the app * - There is an app icon and label (For apps with no launching activity, no icon is provided). + * - The app is not already installed + * - A promise icon for the session has not already been created */ private void tryQueuePromiseAppIcon(SessionInfo sessionInfo) { if (Utilities.ATLEAST_OREO && FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get() @@ -147,7 +149,9 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { && sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER && sessionInfo.getAppIcon() != null && !TextUtils.isEmpty(sessionInfo.getAppLabel()) - && !mPromiseIconIds.contains(sessionInfo.getSessionId())) { + && !mPromiseIconIds.contains(sessionInfo.getSessionId()) + && mLauncherApps.getApplicationInfo(sessionInfo.getAppPackageName(), 0, + getUserHandle(sessionInfo)) == null) { SessionCommitReceiver.queuePromiseAppIconAddition(mAppContext, sessionInfo); mPromiseIconIds.add(sessionInfo.getSessionId()); updatePromiseIconPrefs(); @@ -182,12 +186,14 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { sendUpdate(PackageInstallInfo.fromState(success ? STATUS_INSTALLED : STATUS_FAILED, packageName, key.mUser)); - if (!success && FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get()) { + if (!success && FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get() + && mPromiseIconIds.contains(sessionId)) { LauncherAppState appState = LauncherAppState.getInstanceNoCreate(); if (appState != null) { - LauncherModel model = appState.getModel(); - model.onPackageRemoved(packageName, key.mUser); + appState.getModel().onSessionFailure(packageName, key.mUser); } + // If it is successful, the id is removed in the the package added flow. + removePromiseIconId(sessionId); } } }