summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/dragndrop/PinItemDragListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/dragndrop/PinItemDragListener.java')
-rw-r--r--src/com/android/launcher3/dragndrop/PinItemDragListener.java79
1 files changed, 23 insertions, 56 deletions
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index 9770d40e9..6e5318f2a 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -17,9 +17,6 @@
package com.android.launcher3.dragndrop;
import android.content.ClipDescription;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
@@ -32,30 +29,25 @@ import android.view.DragEvent;
import android.view.View;
import com.android.launcher3.DeleteDropTarget;
-import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
-import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.PendingAddItemInfo;
import com.android.launcher3.R;
import com.android.launcher3.compat.PinItemRequestCompat;
import com.android.launcher3.folder.Folder;
-import com.android.launcher3.graphics.LauncherIcons;
-import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.widget.PendingAddShortcutInfo;
import com.android.launcher3.widget.PendingAddWidgetInfo;
-import com.android.launcher3.widget.PendingItemPreviewProvider;
+import com.android.launcher3.widget.PendingItemDragHelper;
import com.android.launcher3.widget.WidgetAddFlowHandler;
-import com.android.launcher3.widget.WidgetHostViewLoader;
import java.util.UUID;
/**
- * {@link DragSource} for handling drop from from a different window. This object is initialized
+ * {@link DragSource} for handling drop from a different window. This object is initialized
* in the source window and is passed on to the Launcher activity as an Intent extra.
*/
public class PinItemDragListener
@@ -71,6 +63,9 @@ public class PinItemDragListener
// Position of preview relative to the touch location
private final Rect mPreviewRect;
+ private final int mPreviewBitmapWidth;
+ private final int mPreviewViewWidth;
+
// Randomly generated id used to verify the drag event.
private final String mId;
@@ -78,15 +73,20 @@ public class PinItemDragListener
private DragController mDragController;
private long mDragStartTime;
- public PinItemDragListener(PinItemRequestCompat request, Rect previewRect) {
+ public PinItemDragListener(PinItemRequestCompat request, Rect previewRect,
+ int previewBitmapWidth, int previewViewWidth) {
mRequest = request;
mPreviewRect = previewRect;
+ mPreviewBitmapWidth = previewBitmapWidth;
+ mPreviewViewWidth = previewViewWidth;
mId = UUID.randomUUID().toString();
}
private PinItemDragListener(Parcel parcel) {
mRequest = PinItemRequestCompat.CREATOR.createFromParcel(parcel);
mPreviewRect = Rect.CREATOR.createFromParcel(parcel);
+ mPreviewBitmapWidth = parcel.readInt();
+ mPreviewViewWidth = parcel.readInt();
mId = parcel.readString();
}
@@ -103,6 +103,8 @@ public class PinItemDragListener
public void writeToParcel(Parcel parcel, int i) {
mRequest.writeToParcel(parcel, i);
mPreviewRect.writeToParcel(parcel, i);
+ parcel.writeInt(mPreviewBitmapWidth);
+ parcel.writeInt(mPreviewViewWidth);
parcel.writeString(mId);
}
@@ -139,26 +141,9 @@ public class PinItemDragListener
}
final PendingAddItemInfo item;
- final Bitmap preview;
- final View view = new View(mLauncher);
-
- Point dragShift = new Point(mPreviewRect.left, mPreviewRect.top);
if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT) {
item = new PendingAddShortcutInfo(
new PinShortcutRequestActivityInfo(mRequest, mLauncher));
-
- ShortcutInfoCompat compat = new ShortcutInfoCompat(mRequest.getShortcutInfo());
- Bitmap icon = LauncherIcons.createShortcutIcon(compat, mLauncher, false /* badged */);
-
- // Create a preview same as the workspace cell size and draw the icon at the
- // appropriate position.
- int[] size = mLauncher.getWorkspace().estimateItemSize(item, true, false);
- preview = Bitmap.createBitmap(size[0], size[1], Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(preview);
- DeviceProfile dp = mLauncher.getDeviceProfile();
- c.drawBitmap(icon, (size[0] - icon.getWidth()) / 2,
- (size[1] - icon.getHeight() - dp.iconTextSizePx - dp.iconDrawablePaddingPx) / 2,
- new Paint(Paint.FILTER_BITMAP_FLAG));
} else {
// mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_APPWIDGET
LauncherAppWidgetProviderInfo providerInfo =
@@ -166,46 +151,28 @@ public class PinItemDragListener
mLauncher, mRequest.getAppWidgetProviderInfo(mLauncher));
final PinWidgetFlowHandler flowHandler =
new PinWidgetFlowHandler(providerInfo, mRequest);
- PendingAddWidgetInfo info = new PendingAddWidgetInfo(providerInfo) {
+ item = new PendingAddWidgetInfo(providerInfo) {
@Override
public WidgetAddFlowHandler getHandler() {
return flowHandler;
}
};
- int[] size = mLauncher.getWorkspace().estimateItemSize(info, true, false);
-
- float minScale = 1.25f;
- int maxWidth = Math.min((int) (mPreviewRect.width() * minScale), size[0]);
- int[] previewSizeBeforeScale = new int[1];
- preview = LauncherAppState.getInstance(mLauncher).getWidgetCache()
- .generateWidgetPreview(mLauncher, info.info, maxWidth, null,
- previewSizeBeforeScale);
-
- dragShift.offset(
- (mPreviewRect.width() - preview.getWidth()) / 2,
- (mPreviewRect.height() - preview.getHeight()) / 2);
- item = info;
-
- view.setTag(info);
- mDragController.addDragListener(new WidgetHostViewLoader(mLauncher, view));
}
-
- PendingItemPreviewProvider previewProvider =
- new PendingItemPreviewProvider(view, item, preview);
-
- // Since we are not going through the workspace for starting the drag, set drag related
- // information on the workspace before starting the drag.
- mLauncher.getWorkspace().prepareDragWithProvider(previewProvider);
+ View view = new View(mLauncher);
+ view.setTag(item);
Point downPos = new Point((int) event.getX(), (int) event.getY());
DragOptions options = new DragOptions();
options.systemDndStartPoint = downPos;
options.preDragCondition = this;
- int x = downPos.x + dragShift.x;
- int y = downPos.y + dragShift.y;
- mDragController.startDrag(
- preview, x, y, this, item, null, null, 1f, options);
+ // We use drag event position as the screenPos for the preview image. Since mPreviewRect
+ // already includes the view position relative to the drag event on the source window,
+ // and the absolute position (position relative to the screen) of drag event is same
+ // across windows, using drag position here give a good estimate for relative position
+ // to source window.
+ new PendingItemDragHelper(view).startDrag(new Rect(mPreviewRect),
+ mPreviewBitmapWidth, mPreviewViewWidth, downPos, this, options);
mDragStartTime = SystemClock.uptimeMillis();
return true;
}