Merge change 2865 into donut

* changes:
  Fixes #1890155.
This commit is contained in:
Android (Google) Code Review 2009-06-01 15:37:00 -07:00
commit bb593755d2
2 changed files with 39 additions and 3 deletions

View File

@ -24,7 +24,7 @@ import android.widget.AdapterView;
import android.widget.Button; import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.ListAdapter; import android.widget.BaseAdapter;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener; import android.widget.AdapterView.OnItemLongClickListener;
@ -122,10 +122,14 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
* *
* @param adapter The list of applications to display in the folder. * @param adapter The list of applications to display in the folder.
*/ */
void setContentAdapter(ListAdapter adapter) { void setContentAdapter(BaseAdapter adapter) {
mContent.setAdapter(adapter); mContent.setAdapter(adapter);
} }
void notifyDataSetChanged() {
((BaseAdapter) mContent.getAdapter()).notifyDataSetChanged();
}
void setLauncher(Launcher launcher) { void setLauncher(Launcher launcher) {
mLauncher = launcher; mLauncher = launcher;
} }

View File

@ -1222,32 +1222,64 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
final ArrayList<View> childrenToRemove = new ArrayList<View>(); final ArrayList<View> childrenToRemove = new ArrayList<View>();
final LauncherModel model = Launcher.getModel(); final LauncherModel model = Launcher.getModel();
final int count = getChildCount(); final int count = getChildCount();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
final CellLayout layout = (CellLayout) getChildAt(i); final CellLayout layout = (CellLayout) getChildAt(i);
int childCount = layout.getChildCount(); int childCount = layout.getChildCount();
childrenToRemove.clear(); childrenToRemove.clear();
for (int j = 0; j < childCount; j++) { for (int j = 0; j < childCount; j++) {
final View view = layout.getChildAt(j); final View view = layout.getChildAt(j);
Object tag = view.getTag(); Object tag = view.getTag();
if (tag instanceof ApplicationInfo) { if (tag instanceof ApplicationInfo) {
ApplicationInfo info = (ApplicationInfo) tag; final ApplicationInfo info = (ApplicationInfo) tag;
// We need to check for ACTION_MAIN otherwise getComponent() might // We need to check for ACTION_MAIN otherwise getComponent() might
// return null for some shortcuts (for instance, for shortcuts to // return null for some shortcuts (for instance, for shortcuts to
// web pages.) // web pages.)
final Intent intent = info.intent; final Intent intent = info.intent;
final ComponentName name = intent.getComponent(); final ComponentName name = intent.getComponent();
if (Intent.ACTION_MAIN.equals(intent.getAction()) && if (Intent.ACTION_MAIN.equals(intent.getAction()) &&
name != null && packageName.equals(name.getPackageName())) { name != null && packageName.equals(name.getPackageName())) {
model.removeDesktopItem(info); model.removeDesktopItem(info);
LauncherModel.deleteItemFromDatabase(mLauncher, info); LauncherModel.deleteItemFromDatabase(mLauncher, info);
childrenToRemove.add(view); childrenToRemove.add(view);
} }
} else if (tag instanceof UserFolderInfo) {
final UserFolderInfo info = (UserFolderInfo) tag;
final ArrayList<ApplicationInfo> contents = info.contents;
final ArrayList<ApplicationInfo> toRemove = new ArrayList<ApplicationInfo>(1);
final int contentsCount = contents.size();
boolean removedFromFolder = false;
for (int k = 0; k < contentsCount; k++) {
final ApplicationInfo appInfo = contents.get(k);
final Intent intent = appInfo.intent;
final ComponentName name = intent.getComponent();
if (Intent.ACTION_MAIN.equals(intent.getAction()) &&
name != null && packageName.equals(name.getPackageName())) {
toRemove.add(appInfo);
LauncherModel.deleteItemFromDatabase(mLauncher, appInfo);
removedFromFolder = true;
}
}
contents.removeAll(toRemove);
if (removedFromFolder) {
final Folder folder = getOpenFolder();
if (folder != null) folder.notifyDataSetChanged();
}
} }
} }
childCount = childrenToRemove.size(); childCount = childrenToRemove.size();
for (int j = 0; j < childCount; j++) { for (int j = 0; j < childCount; j++) {
layout.removeViewInLayout(childrenToRemove.get(j)); layout.removeViewInLayout(childrenToRemove.get(j));
} }
if (childCount > 0) { if (childCount > 0) {
layout.requestLayout(); layout.requestLayout();
layout.invalidate(); layout.invalidate();