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) 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 adapter = (ArrayAdapter) 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(); } }