mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
This change adds nearby-area searching when dragging desktop items into already-occupied cells. This approach tries harder to find a matching area, instead of strictly rejecting invalid moves. We also draw a "snag" during the drag to show where an item would be dropped, but only if we would drop into an alternative cell. This gives users better feedback about where things will drop. http://b/issue?id=1634887
81 lines
2.7 KiB
Java
81 lines
2.7 KiB
Java
package com.android.launcher;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Rect;
|
|
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 Rect estimateDropLocation(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo, Rect recycle) {
|
|
return null;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|