Merge "Dealing with upgrade from previous Folder implementation"
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index c1580b1..80428fa 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -328,11 +328,23 @@
void bind(FolderInfo info) {
mInfo = info;
ArrayList<ShortcutInfo> children = info.contents;
+ ArrayList<ShortcutInfo> overflow = new ArrayList<ShortcutInfo>();
setupContentForNumItems(children.size());
for (int i = 0; i < children.size(); i++) {
ShortcutInfo child = (ShortcutInfo) children.get(i);
- createAndAddShortcut(child);
+ if (!createAndAddShortcut(child)) {
+ overflow.add(child);
+ }
}
+
+ // 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.
+ for (ShortcutInfo item: overflow) {
+ mInfo.remove(item);
+ LauncherModel.deleteItemFromDatabase(mLauncher, item);
+ }
+
mItemsInvalidated = true;
mInfo.addListener(this);
@@ -499,7 +511,7 @@
}
}
- protected void createAndAddShortcut(ShortcutInfo item) {
+ protected boolean createAndAddShortcut(ShortcutInfo item) {
final TextView textView =
(TextView) mInflater.inflate(R.layout.application_boxed, this, false);
textView.setCompoundDrawablesWithIntrinsicBounds(null,
@@ -510,10 +522,21 @@
textView.setOnClickListener(this);
textView.setOnLongClickListener(this);
+ // We need to check here to verify that the given item's location isn't already occupied
+ // by another item. If it is, we need to find the next available slot and assign
+ // it that position. This is an issue when upgrading from the old Folders implementation
+ // which could contain an unlimited number of items.
+ if (mContent.getChildAt(item.cellX, item.cellY) != null) {
+ if (!findAndSetEmptyCells(item)) {
+ return false;
+ }
+ }
+
CellLayout.LayoutParams lp =
new CellLayout.LayoutParams(item.cellX, item.cellY, item.spanX, item.spanY);
boolean insert = false;
mContent.addViewToCellLayout(textView, insert ? 0 : -1, (int)item.id, lp, true);
+ return true;
}
public void onDragEnter(DragObject d) {