summaryrefslogtreecommitdiffstats
path: root/quickstep/src
diff options
context:
space:
mode:
authorVinit Nayak <peanutbutter@google.com>2019-08-05 15:26:39 -0700
committerVinit Nayak <peanutbutter@google.com>2019-08-08 11:11:03 -0700
commit268e4ff95c03aa825b0f2ac3d39743a6e248b655 (patch)
tree703cc4a4a279c1748fafc6245b7566d5f7c28589 /quickstep/src
parente529a86fbd2eaf7b13575af6b6adf0eb6e25e45c (diff)
downloadandroid_packages_apps_Trebuchet-268e4ff95c03aa825b0f2ac3d39743a6e248b655.tar.gz
android_packages_apps_Trebuchet-268e4ff95c03aa825b0f2ac3d39743a6e248b655.tar.bz2
android_packages_apps_Trebuchet-268e4ff95c03aa825b0f2ac3d39743a6e248b655.zip
Remove activityInfo from cache on package uninstall
We were keeping stale activityInfo objects from package manager after an application got uninstalled. We also were not removing task icons from the cache after they were removed, which meant killing an app and then re-opening would put 2 entries in the cache since the two had unique process IDs. fixes: 137731960 Test: Download app from play store, open it, go to overview and observe that correct icon showing. Uninstall it, download same app again, open it, and in overview confirm that correct app icon is still showing Change-Id: Icf482b0ad0ae66c10d52547582d8eeb2a544fb88
Diffstat (limited to 'quickstep/src')
-rw-r--r--quickstep/src/com/android/quickstep/RecentsModel.java20
-rw-r--r--quickstep/src/com/android/quickstep/TaskIconCache.java20
2 files changed, 38 insertions, 2 deletions
diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java
index d7b1e8b85..d9ecdcd56 100644
--- a/quickstep/src/com/android/quickstep/RecentsModel.java
+++ b/quickstep/src/com/android/quickstep/RecentsModel.java
@@ -25,9 +25,12 @@ import android.os.Build;
import android.os.HandlerThread;
import android.os.Process;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.util.Log;
import com.android.launcher3.MainThreadExecutor;
+import com.android.launcher3.compat.LauncherAppsCompat;
+import com.android.launcher3.compat.LauncherAppsCompat.OnAppsChangedCallbackCompat;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.recents.model.Task;
@@ -71,6 +74,7 @@ public class RecentsModel extends TaskStackChangeListener {
mIconCache = new TaskIconCache(context, loaderThread.getLooper());
mThumbnailCache = new TaskThumbnailCache(context, loaderThread.getLooper());
ActivityManagerWrapper.getInstance().registerTaskStackListener(this);
+ setupPackageListener();
}
public TaskIconCache getIconCache() {
@@ -169,6 +173,7 @@ public class RecentsModel extends TaskStackChangeListener {
public void onTaskRemoved(int taskId) {
Task.TaskKey dummyKey = new Task.TaskKey(taskId, 0, null, null, 0, 0);
mThumbnailCache.remove(dummyKey);
+ mIconCache.onTaskRemoved(dummyKey);
}
public void setSystemUiProxy(ISystemUiProxy systemUiProxy) {
@@ -203,6 +208,21 @@ public class RecentsModel extends TaskStackChangeListener {
}
}
+ private void setupPackageListener() {
+ LauncherAppsCompat.getInstance(mContext)
+ .addOnAppsChangedCallback(new OnAppsChangedCallbackCompat() {
+ @Override
+ public void onPackageRemoved(String packageName, UserHandle user) {
+ mIconCache.invalidatePackage(packageName);
+ }
+
+ @Override
+ public void onPackageChanged(String packageName, UserHandle user) {
+ mIconCache.invalidatePackage(packageName);
+ }
+ });
+ }
+
public void addThumbnailChangeListener(TaskThumbnailChangeListener listener) {
mThumbnailChangeListeners.add(listener);
}
diff --git a/quickstep/src/com/android/quickstep/TaskIconCache.java b/quickstep/src/com/android/quickstep/TaskIconCache.java
index 07af9b385..5e0195806 100644
--- a/quickstep/src/com/android/quickstep/TaskIconCache.java
+++ b/quickstep/src/com/android/quickstep/TaskIconCache.java
@@ -31,17 +31,18 @@ import com.android.launcher3.MainThreadExecutor;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.icons.cache.HandlerRunnable;
-import com.android.launcher3.uioverrides.RecentsUiFactory;
import com.android.launcher3.util.Preconditions;
import com.android.systemui.shared.recents.model.Task;
+import com.android.systemui.shared.recents.model.Task.TaskKey;
import com.android.systemui.shared.recents.model.TaskKeyLruCache;
import com.android.systemui.shared.system.ActivityManagerWrapper;
+import java.util.Map;
import java.util.function.Consumer;
/**
* Manages the caching of task icons and related data.
- * TODO: This class should later be merged into IconCache.
+ * TODO(b/138944598): This class should later be merged into IconCache.
*/
public class TaskIconCache {
@@ -149,6 +150,21 @@ public class TaskIconCache {
return label;
}
+
+ void onTaskRemoved(TaskKey taskKey) {
+ mIconCache.remove(taskKey);
+ }
+
+ void invalidatePackage(String packageName) {
+ // TODO(b/138944598): Merge this class into IconCache so we can do this at the base level
+ Map<ComponentName, ActivityInfo> activityInfoCache = mActivityInfoCache.snapshot();
+ for (ComponentName cn : activityInfoCache.keySet()) {
+ if (cn.getPackageName().equals(packageName)) {
+ mActivityInfoCache.remove(cn);
+ }
+ }
+ }
+
public static abstract class IconLoadRequest extends HandlerRunnable {
IconLoadRequest(Handler handler) {
super(handler, null);