summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/Workspace.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/Workspace.java')
-rw-r--r--src/com/android/launcher2/Workspace.java67
1 files changed, 48 insertions, 19 deletions
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index f8e3f5a..d2da819 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -2834,33 +2834,72 @@ public class Workspace extends SmoothPagedView
mLauncher.exitSpringLoadedDragModeDelayed(false);
}
};
+
+ ItemInfo info = (ItemInfo) dragInfo;
+ int spanX = info.spanX;
+ int spanY = info.spanY;
+ if (mDragInfo != null) {
+ spanX = mDragInfo.spanX;
+ spanY = mDragInfo.spanY;
+ }
+
final int screen = indexOfChild(cellLayout);
if (screen != mCurrentPage && mState != State.SPRING_LOADED) {
snapToPage(screen);
}
- if (dragInfo instanceof PendingAddItemInfo) {
- final PendingAddItemInfo info = (PendingAddItemInfo) dragInfo;
- mLauncher.getDragLayer().animateViewOut(d.dragView, new Runnable() {
+
+ if (info instanceof PendingAddItemInfo) {
+ final PendingAddItemInfo pendingInfo = (PendingAddItemInfo) dragInfo;
+
+ Runnable onAnimationCompleteRunnable = new Runnable() {
@Override
public void run() {
// When dragging and dropping from customization tray, we deal with creating
// widgets/shortcuts/folders in a slightly different way
- switch (info.itemType) {
+ switch (pendingInfo.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
- mLauncher.addAppWidgetFromDrop((PendingAddWidgetInfo) info, screen, touchXY);
+ mLauncher.addAppWidgetFromDrop((PendingAddWidgetInfo) pendingInfo,
+ screen, touchXY);
break;
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
- mLauncher.processShortcutFromDrop(info.componentName, screen, touchXY);
+ mLauncher.processShortcutFromDrop(pendingInfo.componentName,
+ screen, touchXY);
break;
default:
- throw new IllegalStateException("Unknown item type: " + info.itemType);
+ throw new IllegalStateException("Unknown item type: " +
+ pendingInfo.itemType);
}
cellLayout.onDragExit();
}
- });
+ };
+
+ // Now we animate the dragView, (ie. the widget or shortcut preview) into its final
+ // location and size on the home screen.
+
+ // The target cell is also calculated later in Launcher when the widget is actually
+ // added, however, we do it here as well to find out where to animate to. The re-use
+ // of this computation required to much restructuring.
+ mTargetCell = findNearestVacantArea(touchXY[0], touchXY[1], spanX, spanY, null,
+ cellLayout, mTargetCell);
+
+ int loc[] = new int[2];
+ cellLayout.cellToPoint(mTargetCell[0], mTargetCell[1], loc);
+
+ RectF r = new RectF();
+ cellLayout.cellToRect(mTargetCell[0], mTargetCell[1], spanX, spanY, r);
+ float cellLayoutScale =
+ mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(cellLayout, loc);
+
+ float dragViewScale = r.width() / d.dragView.getMeasuredWidth();
+ // The animation will scale the dragView about its center, so we need to center about
+ // the final location.
+ loc[0] -= (d.dragView.getMeasuredWidth() - cellLayoutScale * r.width()) / 2;
+ loc[1] -= (d.dragView.getMeasuredHeight() - cellLayoutScale * r.height()) / 2;
+
+ mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, loc,
+ dragViewScale * cellLayoutScale, onAnimationCompleteRunnable);
} else {
// This is for other drag/drop cases, like dragging from All Apps
- ItemInfo info = (ItemInfo) dragInfo;
View view = null;
switch (info.itemType) {
@@ -2881,16 +2920,6 @@ public class Workspace extends SmoothPagedView
throw new IllegalStateException("Unknown item type: " + info.itemType);
}
- int spanX = 1;
- int spanY = 1;
- if (mDragInfo != null) {
- spanX = mDragInfo.spanX;
- spanY = mDragInfo.spanY;
- } else {
- spanX = info.spanX;
- spanY = info.spanY;
- }
-
// First we find the cell nearest to point at which the item is
// dropped, without any consideration to whether there is an item there.
if (touchXY != null) {