Fixing bug 5011917 - clearing refernce to old folders from FolderInfo
-> Also, ensured that unbind() gets called on all ItemInfos on rotate
Change-Id: I869b68fcae5c66702ec204596f5ecabdc7a32df7
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 64b38c0..ec629d0 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -98,7 +98,7 @@
// sItems is passed to bindItems, which expects a list of all folders and shortcuts created by
// LauncherModel that are directly on the home screen (however, no widgets or shortcuts
// within folders).
- static final ArrayList<ItemInfo> sItems = new ArrayList<ItemInfo>();
+ static final ArrayList<ItemInfo> sWorkspaceItems = new ArrayList<ItemInfo>();
// sAppWidgets is all LauncherAppWidgetInfo created by LauncherModel. Passed to bindAppWidget()
static final ArrayList<LauncherAppWidgetInfo> sAppWidgets =
@@ -148,6 +148,12 @@
return Bitmap.createBitmap(mDefaultIcon);
}
+ public static void unbindWorkspaceItems() {
+ for (ItemInfo item: sWorkspaceItems) {
+ item.unbind();
+ }
+ }
+
/**
* Adds an item to the DB if it was not created previously, or move it to a new
* <container, screen, cellX, cellY>
@@ -197,11 +203,11 @@
// as in Workspace.onDrop. Here, we just add/remove them from the list of items
// that are on the desktop, as appropriate
if (modelItem.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
- if (!sItems.contains(modelItem)) {
- sItems.add(modelItem);
+ if (!sWorkspaceItems.contains(modelItem)) {
+ sWorkspaceItems.add(modelItem);
}
} else {
- sItems.remove(modelItem);
+ sWorkspaceItems.remove(modelItem);
}
}
});
@@ -374,13 +380,13 @@
case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
sFolders.put(item.id, (FolderInfo) item);
if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
- sItems.add(item);
+ sWorkspaceItems.add(item);
}
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
- sItems.add(item);
+ sWorkspaceItems.add(item);
}
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
@@ -456,11 +462,11 @@
switch (item.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
sFolders.remove(item.id);
- sItems.remove(item);
+ sWorkspaceItems.remove(item);
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
- sItems.remove(item);
+ sWorkspaceItems.remove(item);
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
sAppWidgets.remove((LauncherAppWidgetInfo) item);
@@ -482,7 +488,7 @@
cr.delete(LauncherSettings.Favorites.getContentUri(info.id, false), null, null);
sItemsIdMap.remove(info.id);
sFolders.remove(info.id);
- sItems.remove(info);
+ sWorkspaceItems.remove(info);
cr.delete(LauncherSettings.Favorites.CONTENT_URI,
LauncherSettings.Favorites.CONTAINER + "=" + info.id, null);
@@ -819,7 +825,7 @@
final AppWidgetManager widgets = AppWidgetManager.getInstance(context);
final boolean isSafeMode = manager.isSafeMode();
- sItems.clear();
+ sWorkspaceItems.clear();
sAppWidgets.clear();
sFolders.clear();
sItemsIdMap.clear();
@@ -911,7 +917,7 @@
switch (container) {
case LauncherSettings.Favorites.CONTAINER_DESKTOP:
- sItems.add(info);
+ sWorkspaceItems.add(info);
break;
default:
// Item is in a user folder
@@ -955,7 +961,7 @@
}
switch (container) {
case LauncherSettings.Favorites.CONTAINER_DESKTOP:
- sItems.add(folderInfo);
+ sWorkspaceItems.add(folderInfo);
break;
}
@@ -1072,7 +1078,7 @@
}
});
// Add the items to the workspace.
- N = sItems.size();
+ N = sWorkspaceItems.size();
for (int i=0; i<N; i+=ITEMS_CHUNK) {
final int start = i;
final int chunkSize = (i+ITEMS_CHUNK <= N) ? ITEMS_CHUNK : (N-i);
@@ -1080,7 +1086,7 @@
public void run() {
Callbacks callbacks = tryGetCallbacks(oldCallbacks);
if (callbacks != null) {
- callbacks.bindItems(sItems, start, start+chunkSize);
+ callbacks.bindItems(sWorkspaceItems, start, start+chunkSize);
}
}
});
@@ -1317,7 +1323,7 @@
Log.d(TAG, "mLoaderTask.mIsLaunching=" + mIsLaunching);
Log.d(TAG, "mLoaderTask.mStopped=" + mStopped);
Log.d(TAG, "mLoaderTask.mLoadAndBindStepFinished=" + mLoadAndBindStepFinished);
- Log.d(TAG, "mItems size=" + sItems.size());
+ Log.d(TAG, "mItems size=" + sWorkspaceItems.size());
}
}