auto import from //depot/cupcake/@135843
diff --git a/src/com/android/launcher/UserFolder.java b/src/com/android/launcher/UserFolder.java
new file mode 100644
index 0000000..1044e96
--- /dev/null
+++ b/src/com/android/launcher/UserFolder.java
@@ -0,0 +1,75 @@
+package com.android.launcher;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ArrayAdapter;
+
+/**
+ * Folder which contains applications or shortcuts chosen by the user.
+ *
+ */
+public class UserFolder extends Folder implements DropTarget {
+    public UserFolder(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+    
+    /**
+     * Creates a new UserFolder, inflated from R.layout.user_folder.
+     *
+     * @param context The application's context.
+     *
+     * @return A new UserFolder.
+     */
+    static UserFolder fromXml(Context context) {
+        return (UserFolder) LayoutInflater.from(context).inflate(R.layout.user_folder, null);
+    }
+
+    public boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset,
+            Object dragInfo) {
+        final ItemInfo item = (ItemInfo) dragInfo;
+        final int itemType = item.itemType;
+        return (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||
+                itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT) && item.container != mInfo.id;
+    }
+
+    public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) {
+        final ApplicationInfo item = (ApplicationInfo) dragInfo;
+        //noinspection unchecked
+        ((ArrayAdapter<ApplicationInfo>) mContent.getAdapter()).add((ApplicationInfo) dragInfo);
+        LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, 0, 0);
+    }
+
+    public void onDragEnter(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) {
+    }
+
+    public void onDragOver(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) {
+    }
+
+    public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) {
+    }
+
+    @Override
+    public void onDropCompleted(View target, boolean success) {
+        if (success) {
+            //noinspection unchecked
+            ArrayAdapter<ApplicationInfo> adapter =
+                    (ArrayAdapter<ApplicationInfo>) mContent.getAdapter();
+            adapter.remove(mDragItem);
+        }
+    }
+
+    void bind(FolderInfo info) {
+        super.bind(info);
+        setContentAdapter(new ApplicationsAdapter(mContext, ((UserFolderInfo) info).contents));
+    }
+
+    // When the folder opens, we need to refresh the GridView's selection by
+    // forcing a layout
+    @Override
+    void onOpen() {
+        super.onOpen();
+        requestFocus();
+    }
+}