Add drag and drop from AllAppsView (to the workspace).
Also had to fix AppInfoCache to load the icon as a drawable, which I had broken
when I made AllAppsView use the icons as power of two textures.
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index b9ec2cf..375fc12 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -61,10 +61,11 @@
public class AllAppsView extends RSSurfaceView
- implements View.OnClickListener, View.OnLongClickListener {
+ implements View.OnClickListener, View.OnLongClickListener, DragSource {
private static final String TAG = "Launcher.AllAppsView";
private Launcher mLauncher;
+ private DragController mDragController;
private RenderScript mRS;
private RolloRS mRollo;
@@ -76,6 +77,8 @@
private VelocityTracker mVelocity;
private int mLastScrollX;
private int mLastMotionX;
+ private int mMotionDownRawX;
+ private int mMotionDownRawY;
private TouchHandler mTouchHandler;
private int mScrollHandleTop;
@@ -190,6 +193,8 @@
int deltaX;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
+ mMotionDownRawX = (int)ev.getRawX();
+ mMotionDownRawY = (int)ev.getRawY();
mLastMotionX = x;
mRollo.mState.read();
mRollo.mState.startScrollX = mRollo.mState.scrollX = mLastScrollX
@@ -251,11 +256,32 @@
}
public boolean onLongClick(View v) {
- Log.d(TAG, "long click! velocity=" + mRollo.mState.flingVelocityX + " index="
- + mRollo.mState.selectedIconIndex);
+ int index = mRollo.mState.selectedIconIndex;
+ Log.d(TAG, "long click! velocity=" + mRollo.mState.flingVelocityX + " index=" + index);
+ if (mRollo.mState.flingVelocityX == 0 && index >= 0 && index < mAllAppsList.size()) {
+ ApplicationInfo app = mAllAppsList.get(index);
+
+ // We don't really have an accurate location to use. This will do.
+ int screenX = mMotionDownRawX - (Defines.ICON_WIDTH_PX / 2);
+ int screenY = mMotionDownRawY - Defines.ICON_HEIGHT_PX;
+
+ int left = (Defines.ICON_TEXTURE_WIDTH_PX - Defines.ICON_WIDTH_PX) / 2;
+ int top = (Defines.ICON_TEXTURE_HEIGHT_PX - Defines.ICON_HEIGHT_PX) / 2;
+ mDragController.startDrag(app.iconBitmap, screenX, screenY,
+ left, top, Defines.ICON_WIDTH_PX, Defines.ICON_HEIGHT_PX,
+ this, app, DragController.DRAG_ACTION_COPY);
+ // close me!
+ }
return true;
}
+ public void setDragController(DragController dragger) {
+ mDragController = dragger;
+ }
+
+ public void onDropCompleted(View target, boolean success) {
+ }
+
/*
private TouchHandler mScrollHandler = new TouchHandler() {
@Override