summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-04-05 15:59:05 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-04-06 12:46:36 -0700
commitc52ba710053e4c6927937dd1a26d1abe06b6fa99 (patch)
treedaf94a9c41c524c410ef671aad0b2c2ec028d47e
parente316a7fa4bf55209712c49d92f98f65ff378dc4a (diff)
downloadandroid_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
-rw-r--r--src/com/android/launcher3/FolderInfo.java14
-rw-r--r--src/com/android/launcher3/Launcher.java2
-rw-r--r--src/com/android/launcher3/LauncherModel.java2
-rw-r--r--src/com/android/launcher3/Workspace.java50
-rw-r--r--src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java2
-rw-r--r--src/com/android/launcher3/folder/Folder.java14
-rw-r--r--src/com/android/launcher3/folder/FolderIcon.java7
-rw-r--r--src/com/android/launcher3/folder/FolderPagedView.java2
-rw-r--r--src/com/android/launcher3/util/ManagedProfileHeuristic.java4
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.