Merge "Add missing animations when dragging from customize."

This commit is contained in:
Patrick Dubroy 2011-02-22 11:35:48 -08:00 committed by Android (Google) Code Review
commit 0a1af42571
12 changed files with 208 additions and 133 deletions

View File

@ -211,7 +211,7 @@ public class AllApps2D
}
@Override
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
}
/**

View File

@ -685,16 +685,14 @@ public class AllApps3D extends RSSurfaceView
&& mCurrentIconIndex >= 0 && mCurrentIconIndex < mAllAppsList.size()) {
ApplicationInfo app = mAllAppsList.get(mCurrentIconIndex);
Bitmap bmp = app.iconBitmap;
final int w = bmp.getWidth();
final int h = bmp.getHeight();
final Bitmap bmp = app.iconBitmap;
// We don't really have an accurate location to use. This will do.
int screenX = mMotionDownRawX - (w / 2);
int screenY = mMotionDownRawY - h;
int screenX = mMotionDownRawX - (bmp.getWidth() / 2);
int screenY = mMotionDownRawY - bmp.getHeight();
mDragController.startDrag(bmp, screenX, screenY,
0, 0, w, h, this, app, DragController.DRAG_ACTION_COPY);
mDragController.startDrag(
bmp, screenX, screenY, this, app, DragController.DRAG_ACTION_COPY);
mLauncher.closeAllApps(true);
}
@ -748,7 +746,7 @@ public class AllApps3D extends RSSurfaceView
}
@Override
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
}
/**

View File

@ -282,7 +282,7 @@ public class AllAppsPagedView extends PagedViewWithDraggableItems implements All
}
@Override
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
// close the choice action mode if we have a proper drop
if (target != this) {
endChoiceMode();

View File

@ -38,8 +38,9 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
@ -53,7 +54,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.LinearLayout;
@ -120,9 +121,19 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
private final float mTmpFloatPos[] = new float[2];
private final float ANIMATION_SCALE = 0.5f;
private final int ANIMATION_DURATION = 400;
// The duration of the translation animation that occurs during you drag and drop
private final int TRANSLATE_ANIM_DURATION = 400;
// The duration of the scale & alpha animation that occurs during drag and drop
private final int DROP_ANIM_DURATION = 200;
private TimeInterpolator mQuintEaseOutInterpolator = new DecelerateInterpolator(2.5f);
private ScaleAlphaInterpolator mScaleAlphaInterpolator = new ScaleAlphaInterpolator();
// The Bitmap used to generate the drag view
private Bitmap mDragBitmap;
private int[] mDragViewOrigin = new int[2];
public CustomizePagedView(Context context) {
this(context, null, 0);
@ -324,38 +335,60 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
return mCustomizationType;
}
@Override
public void onDropCompleted(View target, boolean success) {
resetCheckedGrandchildren();
/**
* Similar to resetCheckedGrandchildren, but allows us to specify that it's not animated.
* NOTE: This assumes that only a single item can be checked.
*/
private void resetCheckedItem(boolean animated) {
Checkable checkable = getCheckedGrandchildren().get(0);
if (checkable instanceof PagedViewWidget) {
((PagedViewWidget) checkable).setChecked(false, animated);
} else {
((PagedViewIcon) checkable).setChecked(false, animated);
}
}
public void onDropCompleted(View target, Object dragInfo, boolean success) {
final DragLayer dragLayer = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
// Create a view, identical to the drag view, that is only used for animating the
// item onto the home screen (or back to its original position, if the drop failed).
final int[] pos = new int[2];
mDragController.getDragView().getLocationOnScreen(pos);
final View animView = dragLayer.createDragView(mDragBitmap, pos[0], pos[1]);
animView.setVisibility(View.VISIBLE);
if (success) {
resetCheckedItem(true);
animateDropOntoScreen(animView, (ItemInfo) dragInfo, DROP_ANIM_DURATION, 0);
} else {
// Animate the icon/widget back to its original position
animateIntoPosition(animView, mDragViewOrigin[0], mDragViewOrigin[1], new Runnable() {
public void run() {
resetCheckedItem(false);
dragLayer.removeView(animView);
}
});
}
mLauncher.getWorkspace().onDragStopped(success);
mLauncher.unlockScreenOrientation();
mDragBitmap = null;
}
@Override
public void onDragViewVisible() {
}
class ScaleAlphaInterpolator implements Interpolator {
public float getInterpolation(float input) {
float pivot = 0.5f;
if (input < pivot) {
return 0;
} else {
return (input - pivot)/(1 - pivot);
}
}
}
/**
* Animates the given item onto the center of a home screen, and then scales the item to
* look as though it's disappearing onto that screen.
*/
private void animateItemOntoScreen(View dragView,
final CellLayout layout, final ItemInfo info) {
mTmpFloatPos[0] = layout.getWidth() / 2;
mTmpFloatPos[1] = layout.getHeight() / 2;
mLauncher.getWorkspace().mapPointFromChildToSelf(layout, mTmpFloatPos);
final DragLayer dragLayer = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
final View dragCopy = dragLayer.createDragView(dragView);
dragCopy.setAlpha(1.0f);
int dragViewWidth = dragView.getMeasuredWidth();
int dragViewHeight = dragView.getMeasuredHeight();
float heightOffset = 0;
@ -374,37 +407,69 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
widthOffset = ANIMATION_SCALE * (dragViewWidth - f * width) / 2;
}
}
final float toX = mTmpFloatPos[0] - dragView.getMeasuredWidth() / 2 + widthOffset;
final float toY = mTmpFloatPos[1] - dragView.getMeasuredHeight() / 2 + heightOffset;
float toX = mTmpFloatPos[0] - dragView.getMeasuredWidth() / 2 + widthOffset;
float toY = mTmpFloatPos[1] - dragView.getMeasuredHeight() / 2 + heightOffset;
final DragLayer dragLayer = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
final View dragCopy = dragLayer.createDragView(dragView);
dragCopy.setAlpha(1.0f);
ObjectAnimator posAnim = ObjectAnimator.ofPropertyValuesHolder(dragCopy,
PropertyValuesHolder.ofFloat("x", toX),
PropertyValuesHolder.ofFloat("y", toY));
posAnim.setInterpolator(mQuintEaseOutInterpolator);
posAnim.setDuration(ANIMATION_DURATION);
// Translate the item to the center of the appropriate home screen
animateIntoPosition(dragCopy, toX, toY, null);
posAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
dragLayer.removeView(dragCopy);
mLauncher.addExternalItemToScreen(info, layout);
post(new Runnable() {
public void run() {
layout.animateDrop();
}
});
}
});
// The drop-onto-screen animation begins a bit later, but ends at the same time.
final int startDelay = TRANSLATE_ANIM_DURATION - DROP_ANIM_DURATION;
// Scale down the icon and fade out the alpha
animateDropOntoScreen(dragCopy, info, DROP_ANIM_DURATION, startDelay);
}
ObjectAnimator scaleAlphaAnim = ObjectAnimator.ofPropertyValuesHolder(dragCopy,
/**
* Animation which scales the view down and animates its alpha, making it appear to disappear
* onto a home screen.
*/
private void animateDropOntoScreen(
final View view, final ItemInfo info, int duration, int delay) {
final DragLayer dragLayer = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
final CellLayout layout = mLauncher.getWorkspace().getCurrentDropLayout();
ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(view,
PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("scaleX", ANIMATION_SCALE),
PropertyValuesHolder.ofFloat("scaleY", ANIMATION_SCALE));
scaleAlphaAnim.setInterpolator(mScaleAlphaInterpolator);
scaleAlphaAnim.setDuration(ANIMATION_DURATION);
anim.setInterpolator(new LinearInterpolator());
if (delay > 0) {
anim.setStartDelay(delay);
}
anim.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
dragLayer.removeView(view);
mLauncher.addExternalItemToScreen(info, layout);
}
});
anim.start();
}
posAnim.start();
scaleAlphaAnim.start();
/**
* Animates the x,y position of the view, and optionally execute a Runnable on animation end.
*/
private void animateIntoPosition(
View view, float toX, float toY, final Runnable endRunnable) {
ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(view,
PropertyValuesHolder.ofFloat("x", toX),
PropertyValuesHolder.ofFloat("y", toY));
anim.setInterpolator(mQuintEaseOutInterpolator);
anim.setDuration(TRANSLATE_ANIM_DURATION);
if (endRunnable != null) {
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
endRunnable.run();
}
});
}
anim.start();
}
@Override
@ -479,9 +544,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
}
}
Bitmap drawableToBitmap(Drawable d) {
int w = d.getIntrinsicWidth();
int h = d.getIntrinsicHeight();
private Bitmap drawableToBitmap(Drawable d) {
final Rect bounds = d.getBounds();
final int w = bounds.width();
final int h = bounds.height();
Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
renderDrawableToBitmap(d, b, 0, 0, w, h);
return b;
@ -500,6 +566,7 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
if (isChoiceMode(CHOICE_MODE_SINGLE)) {
endChoiceMode();
}
final Workspace workspace = mLauncher.getWorkspace();
boolean result = false;
mLauncher.lockScreenOrientation();
switch (mCustomizationType) {
@ -508,50 +575,44 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
// Get the widget preview as the drag representation
final LinearLayout l = (LinearLayout) v;
final ImageView i = (ImageView) l.findViewById(R.id.widget_preview);
Bitmap b = drawableToBitmap(i.getDrawable());
mDragBitmap = drawableToBitmap(i.getDrawable());
i.getLocationOnScreen(mDragViewOrigin);
PendingAddWidgetInfo createWidgetInfo = (PendingAddWidgetInfo) v.getTag();
int[] spanXY = CellLayout.rectToCell(
getResources(), createWidgetInfo.minWidth, createWidgetInfo.minHeight, null);
int[] spanXY = CellLayout.rectToCell(getResources(),
createWidgetInfo.minWidth, createWidgetInfo.minHeight, null);
createWidgetInfo.spanX = spanXY[0];
createWidgetInfo.spanY = spanXY[1];
mLauncher.getWorkspace().onDragStartedWithItemSpans(spanXY[0], spanXY[1], b);
mDragController.startDrag(
i, b, this, createWidgetInfo, DragController.DRAG_ACTION_COPY, null);
b.recycle();
result = true;
}
break;
}
case ShortcutCustomization: {
if (v instanceof PagedViewIcon) {
// get icon (top compound drawable, index is 1)
final TextView tv = (TextView) v;
final Drawable icon = tv.getCompoundDrawables()[1];
Bitmap b = drawableToBitmap(icon);
PendingAddItemInfo createItemInfo = (PendingAddItemInfo) v.getTag();
mLauncher.getWorkspace().onDragStartedWithItemSpans(1, 1, b);
mDragController.startDrag(v, b, this, createItemInfo, DragController.DRAG_ACTION_COPY,
null);
b.recycle();
workspace.onDragStartedWithItemSpans(spanXY[0], spanXY[1], mDragBitmap);
mDragController.startDrag(i, mDragBitmap, this, createWidgetInfo,
DragController.DRAG_ACTION_COPY, null);
result = true;
}
break;
}
case ShortcutCustomization:
case ApplicationCustomization: {
if (v instanceof PagedViewIcon) {
// Pick up the application for dropping
// get icon (top compound drawable, index is 1)
final TextView tv = (TextView) v;
final Drawable icon = tv.getCompoundDrawables()[1];
Bitmap b = drawableToBitmap(icon);
ApplicationInfo app = (ApplicationInfo) v.getTag();
app = new ApplicationInfo(app);
mDragBitmap = drawableToBitmap(icon);
mLauncher.getWorkspace().onDragStartedWithItemSpans(1, 1, b);
mDragController.startDrag(v, b, this, app, DragController.DRAG_ACTION_COPY, null);
b.recycle();
Object dragInfo = v.getTag();
if (mCustomizationType == CustomizationType.ApplicationCustomization) {
// TODO: Not sure why we have to copy this
dragInfo = new ApplicationInfo((ApplicationInfo) dragInfo);
}
workspace.onDragStartedWithItemSpans(1, 1, mDragBitmap);
// Calculate where to place the drag view in order to align the icon pixels with
// the original view.
v.getLocationOnScreen(mDragViewOrigin);
mDragViewOrigin[0] += (v.getWidth() - icon.getIntrinsicWidth()) / 2;
mDragViewOrigin[1] += v.getPaddingTop();
mDragController.startDrag(mDragBitmap, mDragViewOrigin[0], mDragViewOrigin[1],
this, dragInfo, DragController.DRAG_ACTION_COPY);
result = true;
}
break;
@ -621,8 +682,10 @@ public class CustomizePagedView extends PagedViewWithDraggableItems
private void renderDrawableToBitmap(Drawable d, Bitmap bitmap, int x, int y, int w, int h) {
if (bitmap != null) mCanvas.setBitmap(bitmap);
mCanvas.save();
d.setBounds(x, y, x+w, y+h);
final Rect oldBounds = d.copyBounds();
d.setBounds(x, y, x + w, y + h);
d.draw(mCanvas);
d.setBounds(oldBounds); // Restore the bounds
mCanvas.restore();
}

View File

@ -205,9 +205,7 @@ public class DragController {
int screenX = loc[0];
int screenY = loc[1];
startDrag(b, screenX, screenY, 0, 0, b.getWidth(), b.getHeight(),
source, dragInfo, dragAction, dragRegion);
startDrag(b, screenX, screenY, source, dragInfo, dragAction, dragRegion);
b.recycle();
if (dragAction == DRAG_ACTION_MOVE) {
@ -236,8 +234,7 @@ public class DragController {
int screenX = loc[0];
int screenY = loc[1];
startDrag(bmp, screenX, screenY, 0, 0, bmp.getWidth(), bmp.getHeight(),
source, dragInfo, dragAction, dragRegion);
startDrag(bmp, screenX, screenY, source, dragInfo, dragAction, dragRegion);
if (dragAction == DRAG_ACTION_MOVE) {
v.setVisibility(View.GONE);
@ -251,20 +248,14 @@ public class DragController {
* enlarged size.
* @param screenX The x position on screen of the left-top of the bitmap.
* @param screenY The y position on screen of the left-top of the bitmap.
* @param textureLeft The left edge of the region inside b to use.
* @param textureTop The top edge of the region inside b to use.
* @param textureWidth The width of the region inside b to use.
* @param textureHeight The height of the region inside b to use.
* @param source An object representing where the drag originated
* @param dragInfo The data associated with the object that is being dragged
* @param dragAction The drag action: either {@link #DRAG_ACTION_MOVE} or
* {@link #DRAG_ACTION_COPY}
*/
public void startDrag(Bitmap b, int screenX, int screenY,
int textureLeft, int textureTop, int textureWidth, int textureHeight,
DragSource source, Object dragInfo, int dragAction) {
startDrag(b, screenX, screenY, textureLeft, textureTop, textureWidth, textureHeight,
source, dragInfo, dragAction, null);
startDrag(b, screenX, screenY, source, dragInfo, dragAction, null);
}
/**
@ -274,10 +265,6 @@ public class DragController {
* enlarged size.
* @param screenX The x position on screen of the left-top of the bitmap.
* @param screenY The y position on screen of the left-top of the bitmap.
* @param textureLeft The left edge of the region inside b to use.
* @param textureTop The top edge of the region inside b to use.
* @param textureWidth The width of the region inside b to use.
* @param textureHeight The height of the region inside b to use.
* @param source An object representing where the drag originated
* @param dragInfo The data associated with the object that is being dragged
* @param dragAction The drag action: either {@link #DRAG_ACTION_MOVE} or
@ -286,7 +273,6 @@ public class DragController {
* Makes dragging feel more precise, e.g. you can clip out a transparent border
*/
public void startDrag(Bitmap b, int screenX, int screenY,
int textureLeft, int textureTop, int textureWidth, int textureHeight,
DragSource source, Object dragInfo, int dragAction, Rect dragRegion) {
if (PROFILE_DRAWING_DURING_DRAG) {
android.os.Debug.startMethodTracing("Launcher");
@ -318,7 +304,7 @@ public class DragController {
mVibrator.vibrate(VIBRATE_DURATION);
DragView dragView = mDragView = new DragView(mContext, b, registrationX, registrationY,
textureLeft, textureTop, textureWidth, textureHeight);
0, 0, b.getWidth(), b.getHeight());
final DragSource dragSource = source;
dragView.setOnDrawRunnable(new Runnable() {
@ -400,7 +386,7 @@ public class DragController {
public void cancelDrag() {
if (mDragging) {
// Should we also be calling onDragExit() here?
mDragSource.onDropCompleted(null, false);
mDragSource.onDropCompleted(null, mDragInfo, false);
}
endDrag();
}
@ -596,14 +582,14 @@ public class DragController {
(int) mTouchOffsetX, (int) mTouchOffsetY, mDragView, mDragInfo)) {
dropTarget.onDrop(mDragSource, coordinates[0], coordinates[1],
(int) mTouchOffsetX, (int) mTouchOffsetY, mDragView, mDragInfo);
mDragSource.onDropCompleted((View) dropTarget, true);
mDragSource.onDropCompleted((View) dropTarget, mDragInfo, true);
return true;
} else {
mDragSource.onDropCompleted((View) dropTarget, false);
mDragSource.onDropCompleted((View) dropTarget, mDragInfo, false);
return true;
}
} else {
mDragSource.onDropCompleted(null, false);
mDragSource.onDropCompleted(null, mDragInfo, false);
}
return false;
}
@ -716,6 +702,10 @@ public class DragController {
mDeleteRegion = region;
}
DragView getDragView() {
return mDragView;
}
private class ScrollRunnable implements Runnable {
private int mDirection;

View File

@ -31,5 +31,5 @@ public interface DragSource {
*/
void onDragViewVisible();
void onDropCompleted(View target, boolean success);
void onDropCompleted(View target, Object dragInfo, boolean success);
}

View File

@ -114,7 +114,7 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
}
@Override
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
}
@Override

View File

@ -3069,9 +3069,15 @@ public final class Launcher extends Activity
}
}
void addExternalItemToScreen(ItemInfo itemInfo, CellLayout layout) {
/**
* Add an item from all apps or customize onto the given workspace screen.
* If layout is null, add to the current screen.
*/
void addExternalItemToScreen(ItemInfo itemInfo, final CellLayout layout) {
if (!mWorkspace.addExternalItemToScreen(itemInfo, layout)) {
showOutOfSpaceMessage();
} else {
layout.animateDrop();
}
}

View File

@ -243,8 +243,7 @@ public class PagedViewIcon extends CachedTextView implements Checkable {
return mIsChecked;
}
@Override
public void setChecked(boolean checked) {
void setChecked(boolean checked, boolean animate) {
if (mIsChecked != checked) {
mIsChecked = checked;
@ -262,14 +261,23 @@ public class PagedViewIcon extends CachedTextView implements Checkable {
if (mCheckedAlphaAnimator != null) {
mCheckedAlphaAnimator.cancel();
}
mCheckedAlphaAnimator = ObjectAnimator.ofFloat(this, "alpha", getAlpha(), alpha);
mCheckedAlphaAnimator.setDuration(duration);
mCheckedAlphaAnimator.start();
if (animate) {
mCheckedAlphaAnimator = ObjectAnimator.ofFloat(this, "alpha", getAlpha(), alpha);
mCheckedAlphaAnimator.setDuration(duration);
mCheckedAlphaAnimator.start();
} else {
setAlpha(alpha);
}
invalidate();
}
}
@Override
public void setChecked(boolean checked) {
setChecked(checked, true);
}
@Override
public void toggle() {
setChecked(!mIsChecked);

View File

@ -257,8 +257,7 @@ public class PagedViewWidget extends LinearLayout implements Checkable {
sWorker.removeMessages(MESSAGE_CREATE_HOLOGRAPHIC_OUTLINE, this);
}
@Override
public void setChecked(boolean checked) {
void setChecked(boolean checked, boolean animate) {
if (mIsChecked != checked) {
mIsChecked = checked;
@ -276,14 +275,23 @@ public class PagedViewWidget extends LinearLayout implements Checkable {
if (mCheckedAlphaAnimator != null) {
mCheckedAlphaAnimator.cancel();
}
mCheckedAlphaAnimator = ObjectAnimator.ofFloat(this, "alpha", getAlpha(), alpha);
mCheckedAlphaAnimator.setDuration(duration);
mCheckedAlphaAnimator.start();
if (animate) {
mCheckedAlphaAnimator = ObjectAnimator.ofFloat(this, "alpha", getAlpha(), alpha);
mCheckedAlphaAnimator.setDuration(duration);
mCheckedAlphaAnimator.start();
} else {
setAlpha(alpha);
}
invalidate();
}
}
@Override
public void setChecked(boolean checked) {
setChecked(checked, true);
}
@Override
public boolean isChecked() {
return mIsChecked;

View File

@ -64,7 +64,7 @@ public class UserFolder extends Folder implements DropTarget {
}
@Override
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
if (success) {
ShortcutsAdapter adapter = (ShortcutsAdapter)mContent.getAdapter();
adapter.remove(mDragItem);

View File

@ -2070,8 +2070,8 @@ public class Workspace extends SmoothPagedView
final int screenX = (int) mTempXY[0] + (child.getWidth() - bmpWidth) / 2;
final int screenY = (int) mTempXY[1] + (child.getHeight() - bmpHeight) / 2;
mLauncher.lockScreenOrientation();
mDragController.startDrag(b, screenX, screenY, 0, 0, bmpWidth, bmpHeight, this,
child.getTag(), DragController.DRAG_ACTION_MOVE, null);
mDragController.startDrag(
b, screenX, screenY, this, child.getTag(), DragController.DRAG_ACTION_MOVE);
b.recycle();
}
@ -2226,6 +2226,11 @@ public class Workspace extends SmoothPagedView
}
if (source != this) {
if ((mIsSmall || mIsInUnshrinkAnimation) && !mLauncher.isAllAppsVisible()) {
// When the workspace is shrunk and the drop comes from customize, don't actually
// add the item to the screen -- customize will do this itself
return;
}
onDropExternal(new int[] { originX, originY }, dragInfo, mDragTargetLayout, false);
} else if (mDragInfo != null) {
final View cell = mDragInfo.cell;
@ -2821,11 +2826,8 @@ public class Workspace extends SmoothPagedView
* Return the current {@link CellLayout}, correctly picking the destination
* screen while a scroll is in progress.
*/
private CellLayout getCurrentDropLayout() {
// if we're currently small, use findMatchingPageForDragOver instead
if (mIsSmall) return null;
int index = mScroller.isFinished() ? mCurrentPage : mNextPage;
return (CellLayout) getChildAt(index);
public CellLayout getCurrentDropLayout() {
return (CellLayout) getChildAt(mNextPage == INVALID_PAGE ? mCurrentPage : mNextPage);
}
/**
@ -2870,7 +2872,7 @@ public class Workspace extends SmoothPagedView
/**
* Called at the end of a drag which originated on the workspace.
*/
public void onDropCompleted(View target, boolean success) {
public void onDropCompleted(View target, Object dragInfo, boolean success) {
if (success) {
if (target != this && mDragInfo != null) {
final CellLayout cellLayout = (CellLayout) getChildAt(mDragInfo.screen);