From 7dece749a329fa4984c90a68dbc0345586fa9e88 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 19 Jan 2022 17:19:24 +0530 Subject: [PATCH] Updating logic to check if icon needs badging Bug: 209503720 Test: Manual Change-Id: I66f0dbaf81be3190a106323fe3ce87717626d8e7 --- .../com/android/quickstep/TaskIconCache.java | 22 +++++++++++++++---- .../launcher3/model/PackageUpdatedTask.java | 16 ++++++-------- src/com/android/launcher3/util/FlagOp.java | 16 -------------- 3 files changed, 25 insertions(+), 29 deletions(-) delete mode 100644 src/com/android/launcher3/util/FlagOp.java diff --git a/quickstep/src/com/android/quickstep/TaskIconCache.java b/quickstep/src/com/android/quickstep/TaskIconCache.java index b5d6fae73a..6c71da9a0e 100644 --- a/quickstep/src/com/android/quickstep/TaskIconCache.java +++ b/quickstep/src/com/android/quickstep/TaskIconCache.java @@ -28,6 +28,7 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.text.TextUtils; +import android.util.SparseArray; import android.view.accessibility.AccessibilityManager; import androidx.annotation.WorkerThread; @@ -62,7 +63,9 @@ public class TaskIconCache implements DisplayInfoChangeListener { private final Context mContext; private final TaskKeyLruCache mIconCache; - private final BitmapInfo[] mDefaultIcons = new BitmapInfo[1]; + private final SparseArray mDefaultIcons = new SparseArray<>(); + private BitmapInfo mDefaultIconBase = null; + private final IconProvider mIconProvider; private BaseIconFactory mIconFactory; @@ -208,12 +211,23 @@ public class TaskIconCache implements DisplayInfoChangeListener { @WorkerThread private Drawable getDefaultIcon(int userId) { synchronized (mDefaultIcons) { - if (mDefaultIcons[0] == null) { + if (mDefaultIconBase == null) { try (BaseIconFactory bif = getIconFactory()) { - mDefaultIcons[0] = bif.makeDefaultIcon(); + mDefaultIconBase = bif.makeDefaultIcon(); + } + } + + int index; + if ((index = mDefaultIcons.indexOfKey(userId)) >= 0) { + return mDefaultIcons.valueAt(index).newIcon(mContext); + } else { + try (BaseIconFactory li = getIconFactory()) { + BitmapInfo info = mDefaultIconBase.withFlags( + li.getBitmapFlagOp(new IconOptions().setUser(UserHandle.of(userId)))); + mDefaultIcons.put(userId, info); + return info.newIcon(mContext); } } - return mDefaultIcons[0].clone().withUser(UserHandle.of(userId)).newIcon(mContext); } } diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 83fb3d1582..d47edff223 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -112,7 +112,7 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { activitiesLists.put( packages[i], appsList.addPackage(context, packages[i], mUser)); } - flagOp = FlagOp.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); + flagOp = FlagOp.NO_OP.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); break; } case OP_UPDATE: @@ -134,7 +134,7 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { } } // Since package was just updated, the target must be available now. - flagOp = FlagOp.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); + flagOp = FlagOp.NO_OP.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); break; case OP_REMOVE: { for (int i = 0; i < N; i++) { @@ -148,13 +148,12 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { if (DEBUG) Log.d(TAG, "mAllAppsList.removePackage " + packages[i]); appsList.removePackage(packages[i], mUser); } - flagOp = FlagOp.addFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); + flagOp = FlagOp.NO_OP.addFlag(WorkspaceItemInfo.FLAG_DISABLED_NOT_AVAILABLE); break; case OP_SUSPEND: case OP_UNSUSPEND: - flagOp = mOp == OP_SUSPEND ? - FlagOp.addFlag(WorkspaceItemInfo.FLAG_DISABLED_SUSPENDED) : - FlagOp.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_SUSPENDED); + flagOp = FlagOp.NO_OP.setFlag( + WorkspaceItemInfo.FLAG_DISABLED_SUSPENDED, mOp == OP_SUSPEND); if (DEBUG) Log.d(TAG, "mAllAppsList.(un)suspend " + N); appsList.updateDisabledFlags(matcher, flagOp); break; @@ -162,9 +161,8 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { UserManagerState ums = new UserManagerState(); ums.init(UserCache.INSTANCE.get(context), context.getSystemService(UserManager.class)); - flagOp = ums.isUserQuiet(mUser) - ? FlagOp.addFlag(WorkspaceItemInfo.FLAG_DISABLED_QUIET_USER) - : FlagOp.removeFlag(WorkspaceItemInfo.FLAG_DISABLED_QUIET_USER); + flagOp = FlagOp.NO_OP.setFlag( + WorkspaceItemInfo.FLAG_DISABLED_QUIET_USER, ums.isUserQuiet(mUser)); appsList.updateDisabledFlags(matcher, flagOp); // We are not synchronizing here, as int operations are atomic diff --git a/src/com/android/launcher3/util/FlagOp.java b/src/com/android/launcher3/util/FlagOp.java deleted file mode 100644 index bd40eb9fa8..0000000000 --- a/src/com/android/launcher3/util/FlagOp.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.android.launcher3.util; - -public interface FlagOp { - - FlagOp NO_OP = i -> i; - - int apply(int flags); - - static FlagOp addFlag(int flag) { - return i -> i | flag; - } - - static FlagOp removeFlag(int flag) { - return i -> i & ~flag; - } -}