diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-04-05 15:59:05 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-04-06 12:46:36 -0700 |
commit | c52ba710053e4c6927937dd1a26d1abe06b6fa99 (patch) | |
tree | daf94a9c41c524c410ef671aad0b2c2ec028d47e /src/com/android | |
parent | e316a7fa4bf55209712c49d92f98f65ff378dc4a (diff) | |
download | android_packages_apps_Trebuchet-c52ba710053e4c6927937dd1a26d1abe06b6fa99.tar.gz android_packages_apps_Trebuchet-c52ba710053e4c6927937dd1a26d1abe06b6fa99.tar.bz2 android_packages_apps_Trebuchet-c52ba710053e4c6927937dd1a26d1abe06b6fa99.zip |
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
Diffstat (limited to 'src/com/android')
9 files changed, 58 insertions, 39 deletions
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java index 861a9354a..6c9d969a3 100644 --- a/src/com/android/launcher3/FolderInfo.java +++ b/src/com/android/launcher3/FolderInfo.java @@ -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 diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index b53a1b0b8..445831c59 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -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); } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 60c71cff1..f2b307b12 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -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); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 7cceba4ae..f04244f9c 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -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); + } + // process all the shortcuts + return false; + } + }); - if (parent != null) { - parent.invalidate(); - } + // 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); diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index c69947912..aa6e08ebc 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -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); diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 087670e21..09a92a998 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -300,7 +300,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mCurrentDragView = v; mContent.removeItem(mCurrentDragView); - mInfo.remove(mCurrentDragInfo); + mInfo.remove(mCurrentDragInfo, true); mDragInProgress = true; mItemAddedBackToSelfViaIcon = false; } @@ -426,8 +426,9 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList // If our folder has too many items we prune them from the list. This is an issue // when upgrading from the old Folders implementation which could contain an unlimited // number of items. + // TODO: Remove this, as with multi-page folders, there will never be any overflow for (ShortcutInfo item: overflow) { - mInfo.remove(item); + mInfo.remove(item, false); LauncherModel.deleteItemFromDatabase(mLauncher, item); } @@ -1330,7 +1331,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList // Temporarily suppress the listener, as we did all the work already here. mSuppressOnAdd = true; - mInfo.add(si); + mInfo.add(si, false); mSuppressOnAdd = false; // Clear the drag info, as it is no longer being dragged. mCurrentDragInfo = null; @@ -1390,13 +1391,14 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return mContent.iterateOverItems(new ItemOperator() { @Override - public boolean evaluate(ItemInfo info, View view, View parent) { + public boolean evaluate(ItemInfo info, View view) { return info == item; } }); } - public void onItemsChanged() { + @Override + public void onItemsChanged(boolean animate) { updateTextViewFocus(); } @@ -1409,7 +1411,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mContent.iterateOverItems(new ItemOperator() { @Override - public boolean evaluate(ItemInfo info, View view, View parent) { + public boolean evaluate(ItemInfo info, View view) { mItemsInReadingOrder.add(view); return false; } diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index b7e11f1aa..d76608a93 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -224,7 +224,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { } public void addItem(ShortcutInfo item) { - mInfo.add(item); + mInfo.add(item, true); } public void onDragEnter(ItemInfo dragInfo) { @@ -937,8 +937,9 @@ public class FolderIcon extends FrameLayout implements FolderListener { } } - public void onItemsChanged() { - updateItemDrawingParams(true); + @Override + public void onItemsChanged(boolean animate) { + updateItemDrawingParams(animate); invalidate(); requestLayout(); } diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java index c25444e06..1af148584 100644 --- a/src/com/android/launcher3/folder/FolderPagedView.java +++ b/src/com/android/launcher3/folder/FolderPagedView.java @@ -454,7 +454,7 @@ public class FolderPagedView extends PagedView { for (int j = 0; j < page.getCountY(); j++) { for (int i = 0; i < page.getCountX(); i++) { View v = page.getChildAt(i, j); - if ((v != null) && op.evaluate((ItemInfo) v.getTag(), v, this)) { + if ((v != null) && op.evaluate((ItemInfo) v.getTag(), v)) { return v; } } diff --git a/src/com/android/launcher3/util/ManagedProfileHeuristic.java b/src/com/android/launcher3/util/ManagedProfileHeuristic.java index fb9bbb29c..3925c4034 100644 --- a/src/com/android/launcher3/util/ManagedProfileHeuristic.java +++ b/src/com/android/launcher3/util/ManagedProfileHeuristic.java @@ -188,7 +188,7 @@ public class ManagedProfileHeuristic { @Override public void run() { for (ShortcutInfo info : shortcuts) { - workFolder.add(info); + workFolder.add(info, false); } } }); @@ -200,7 +200,7 @@ public class ManagedProfileHeuristic { // Add all shortcuts before adding it to the UI, as an empty folder might get deleted. for (ShortcutInfo info : mWorkFolderApps) { - workFolder.add(info); + workFolder.add(info, false); } // Add the item to home screen and DB. This also generates an item id synchronously. |