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

Commit c52ba710 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing folder icon not getting redrawn when the contents change

> Removing parent from ItemOperator as inconsistant values were
being passed in workspace and folderPagedView
> Fixing itemChanged causing multiple redraws, by passing a
'animate' parameter to explicitely request animation

Bug:27740161
Bug:28015426

Change-Id: Ide7b266bde9aad5f450a3f808a59182fe01a5110
parent e316a7fa
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -69,12 +69,12 @@ public class FolderInfo extends ItemInfo {
     *
     * @param item
     */
    public void add(ShortcutInfo item) {
    public void add(ShortcutInfo item, boolean animate) {
        contents.add(item);
        for (int i = 0; i < listeners.size(); i++) {
            listeners.get(i).onAdd(item);
        }
        itemsChanged();
        itemsChanged(animate);
    }

    /**
@@ -82,12 +82,12 @@ public class FolderInfo extends ItemInfo {
     *
     * @param item
     */
    public void remove(ShortcutInfo item) {
    public void remove(ShortcutInfo item, boolean animate) {
        contents.remove(item);
        for (int i = 0; i < listeners.size(); i++) {
            listeners.get(i).onRemove(item);
        }
        itemsChanged();
        itemsChanged(animate);
    }

    public void setTitle(CharSequence title) {
@@ -115,9 +115,9 @@ public class FolderInfo extends ItemInfo {
        }
    }

    void itemsChanged() {
    public void itemsChanged(boolean animate) {
        for (int i = 0; i < listeners.size(); i++) {
            listeners.get(i).onItemsChanged();
            listeners.get(i).onItemsChanged(animate);
        }
    }

@@ -131,7 +131,7 @@ public class FolderInfo extends ItemInfo {
        public void onAdd(ShortcutInfo item);
        public void onRemove(ShortcutInfo item);
        public void onTitleChanged(CharSequence title);
        public void onItemsChanged();
        public void onItemsChanged(boolean animate);
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -2379,7 +2379,7 @@ public class Launcher extends Activity
            // Remove the shortcut from the folder before removing it from launcher
            View folderIcon = mWorkspace.getHomescreenIconByItemId(itemInfo.container);
            if (folderIcon instanceof FolderIcon) {
                ((FolderInfo) folderIcon.getTag()).remove((ShortcutInfo) itemInfo);
                ((FolderInfo) folderIcon.getTag()).remove((ShortcutInfo) itemInfo, true);
            } else {
                mWorkspace.removeWorkspaceItem(v);
            }
+1 −1
Original line number Diff line number Diff line
@@ -1986,7 +1986,7 @@ public class LauncherModel extends BroadcastReceiver
                                        // Item is in a user folder
                                        FolderInfo folderInfo =
                                                findOrMakeFolder(sBgFolders, container);
                                        folderInfo.add(info);
                                        folderInfo.add(info, false);
                                        break;
                                    }
                                    sBgItemsIdMap.put(info.id, info);
+33 −17
Original line number Diff line number Diff line
@@ -3873,7 +3873,7 @@ public class Workspace extends PagedView
        return getFirstMatch(new ItemOperator() {

            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                return info != null && info.id == id;
            }
        });
@@ -3883,7 +3883,7 @@ public class Workspace extends PagedView
        return getFirstMatch(new ItemOperator() {

            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                return info == tag;
            }
        });
@@ -3893,7 +3893,7 @@ public class Workspace extends PagedView
        return (LauncherAppWidgetHostView) getFirstMatch(new ItemOperator() {

            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                return (info instanceof LauncherAppWidgetInfo) &&
                        ((LauncherAppWidgetInfo) info).appWidgetId == appWidgetId;
            }
@@ -3904,8 +3904,8 @@ public class Workspace extends PagedView
        final View[] value = new View[1];
        mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
                if (operator.evaluate(info, v, parent)) {
            public boolean evaluate(ItemInfo info, View v) {
                if (operator.evaluate(info, v)) {
                    value[0] = v;
                    return true;
                }
@@ -3918,7 +3918,7 @@ public class Workspace extends PagedView
    void clearDropTargets() {
        mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                if (v instanceof DropTarget) {
                    mDragController.removeDropTarget((DropTarget) v);
                }
@@ -4014,7 +4014,7 @@ public class Workspace extends PagedView
            for (FolderInfo folder : folderAppsToRemove.keySet()) {
                ArrayList<ShortcutInfo> appsToRemove = folderAppsToRemove.get(folder);
                for (ShortcutInfo info : appsToRemove) {
                    folder.remove(info);
                    folder.remove(info, false);
                }
            }

@@ -4044,10 +4044,9 @@ public class Workspace extends PagedView
         *
         * @param info info for the shortcut
         * @param view view for the shortcut
         * @param parent containing folder, or null
         * @return true if done, false to continue the map
         */
        public boolean evaluate(ItemInfo info, View view, View parent);
        public boolean evaluate(ItemInfo info, View view);
    }

    /**
@@ -4074,12 +4073,12 @@ public class Workspace extends PagedView
                    for (int childIdx = 0; childIdx < childCount; childIdx++) {
                        View child = folderChildren.get(childIdx);
                        info = (ItemInfo) child.getTag();
                        if (op.evaluate(info, child, folder)) {
                        if (op.evaluate(info, child)) {
                            return;
                        }
                    }
                } else {
                    if (op.evaluate(info, item, null)) {
                    if (op.evaluate(info, item)) {
                        return;
                    }
                }
@@ -4088,10 +4087,19 @@ public class Workspace extends PagedView
    }

    void updateShortcuts(ArrayList<ShortcutInfo> shortcuts) {
        final HashSet<ShortcutInfo> updates = new HashSet<ShortcutInfo>(shortcuts);
        int total  = shortcuts.size();
        final HashSet<ShortcutInfo> updates = new HashSet<ShortcutInfo>(total);
        final HashSet<Long> folderIds = new HashSet<>();

        for (int i = 0; i < total; i++) {
            ShortcutInfo s = shortcuts.get(i);
            updates.add(s);
            folderIds.add(s.container);
        }

        mapOverItems(MAP_RECURSE, new ItemOperator() {
            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                if (info instanceof ShortcutInfo && v instanceof BubbleTextView &&
                        updates.contains(info)) {
                    ShortcutInfo si = (ShortcutInfo) info;
@@ -4101,10 +4109,18 @@ public class Workspace extends PagedView
                            && ((PreloadIconDrawable) oldIcon).hasNotCompleted();
                    shortcut.applyFromShortcutInfo(si, mIconCache,
                            si.isPromise() != oldPromiseState);

                    if (parent != null) {
                        parent.invalidate();
                }
                // process all the shortcuts
                return false;
            }
        });

        // Update folder icons
        mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
            @Override
            public boolean evaluate(ItemInfo info, View v) {
                if (info instanceof FolderInfo && folderIds.contains(info.id)) {
                    ((FolderInfo) info).itemsChanged(false);
                }
                // process all the shortcuts
                return false;
@@ -4122,7 +4138,7 @@ public class Workspace extends PagedView
    public void updateRestoreItems(final HashSet<ItemInfo> updates) {
        mapOverItems(MAP_RECURSE, new ItemOperator() {
            @Override
            public boolean evaluate(ItemInfo info, View v, View parent) {
            public boolean evaluate(ItemInfo info, View v) {
                if (info instanceof ShortcutInfo && v instanceof BubbleTextView
                        && updates.contains(info)) {
                    ((BubbleTextView) v).applyState(false);
+1 −1
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ public class LauncherAccessibilityDelegate extends AccessibilityDelegate impleme
            Folder folder = mLauncher.getWorkspace().getOpenFolder();
            mLauncher.closeFolder(folder, true);
            ShortcutInfo info = (ShortcutInfo) item;
            folder.getInfo().remove(info);
            folder.getInfo().remove(info, false);

            final int[] coordinates = new int[2];
            final long screenId = findSpaceOnWorkspace(item, coordinates);
Loading