Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4926ebfe authored by Tony Wickham's avatar Tony Wickham
Browse files

Fix updateIconBadges() in All Apps

Instead of notifyItemChanged(), we iterate over children of the
RecyclerView itself and call applyBadgeState() on affected icons.
This is the same logic we do for the workspace.

Issues this fixes:
- Icons flash when dismissing notifications
- Badge reappears on the icon while popup is open

Change-Id: I5c69d5c6bd47630c0241666b5f7f6f7ca97118f9
parent 0fa96ea2
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.ViewGroup;

import com.android.launcher3.AppInfo;
import com.android.launcher3.BaseContainerView;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeleteDropTarget;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DragSource;
@@ -485,11 +486,15 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc

    public void updateIconBadges(Set<PackageUserKey> updatedBadges) {
        final PackageUserKey packageUserKey = new PackageUserKey(null, null);
        for (AlphabeticalAppsList.AdapterItem app : mApps.getAdapterItems()) {
            if (app.appInfo != null && packageUserKey.updateFromItemInfo(app.appInfo)) {
                if (updatedBadges.contains(packageUserKey)) {
                    mAdapter.notifyItemChanged(app.position);
                }
        final int n = mAppsRecyclerView.getChildCount();
        for (int i = 0; i < n; i++) {
            View child = mAppsRecyclerView.getChildAt(i);
            if (!(child instanceof BubbleTextView) || !(child.getTag() instanceof ItemInfo)) {
                continue;
            }
            ItemInfo info = (ItemInfo) child.getTag();
            if (packageUserKey.updateFromItemInfo(info) && updatedBadges.contains(packageUserKey)) {
                ((BubbleTextView) child).applyBadgeState(info, true /* animate */);
            }
        }
    }