Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08efde7e authored by Vadim Tryshev's avatar Vadim Tryshev Committed by Android (Google) Code Review
Browse files

Merge "Bullet-proofing the drag window initial animation." into ub-launcher3-master

parents c268148f 456e87e1
Loading
Loading
Loading
Loading
+40 −45
Original line number Diff line number Diff line
@@ -46,11 +46,42 @@ public abstract class DragDriver {
     */
    public abstract void onDragViewAnimationEnd();

    public abstract boolean onTouchEvent(MotionEvent ev);
    public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_MOVE:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                break;
            case MotionEvent.ACTION_UP:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                break;
            case MotionEvent.ACTION_CANCEL:
                mEventListener.onDriverDragCancel();
                break;
        }

        return true;
    }

    public abstract boolean onDragEvent (DragEvent event);

    public abstract boolean onInterceptTouchEvent(MotionEvent ev);

    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_UP:
                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                break;
            case MotionEvent.ACTION_CANCEL:
                mEventListener.onDriverDragCancel();
                break;
        }

        return true;
    }

    public static DragDriver create(
            DragController dragController, ItemInfo dragInfo, DragView dragView) {
@@ -71,7 +102,7 @@ class SystemDragDriver extends DragDriver {
    private final Intent mDragIntent;

    private final DragView mDragView;
    boolean mDragging = false;
    boolean mIsFrameworkDragActive = false;
    boolean mReceivedDropEvent = false;
    float mLastX = 0;
    float mLastY = 0;
@@ -116,10 +147,10 @@ class SystemDragDriver extends DragDriver {
        final int flagOpaque = 1 << 9;
        final int flags = (mDragIntent != null ? flagGlobal : 0) | flagOpaque;

        mDragging = true;
        mIsFrameworkDragActive = true;

        if (!mDragView.startDrag(dragData, shadowBuilder, null, flags)) {
            mDragging = false;
            mIsFrameworkDragActive = false;
            mEventListener.onDriverDragCancel();
            return;
        }
@@ -131,17 +162,17 @@ class SystemDragDriver extends DragDriver {

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
        return !mIsFrameworkDragActive && super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return false;
        return !mIsFrameworkDragActive && super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onDragEvent (DragEvent event) {
        if (!mDragging) {
        if (!mIsFrameworkDragActive) {
            // We are interested only in drag events started by this driver.
            return false;
        }
@@ -189,7 +220,7 @@ class SystemDragDriver extends DragDriver {
                        new AnotherWindowDropTarget(mDragView.getContext()) : null;

                mEventListener.onDriverDragEnd(mLastX, mLastY, dropTargetOverride);
                mDragging = false;
                mIsFrameworkDragActive = false;
                return true;

            default:
@@ -209,42 +240,6 @@ class InternalDragDriver extends DragDriver {
    @Override
    public void onDragViewAnimationEnd() {}

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_MOVE:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                break;
            case MotionEvent.ACTION_UP:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                break;
            case MotionEvent.ACTION_CANCEL:
                mEventListener.onDriverDragCancel();
                break;
        }

        return true;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_UP:
                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                break;
            case MotionEvent.ACTION_CANCEL:
                mEventListener.onDriverDragCancel();
                break;
        }

        return true;
    }

    @Override
    public boolean onDragEvent (DragEvent event) { return false; }
};
+5 −1
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ public class DragView extends View {
    @Thunk final DragController mDragController;
    private boolean mHasDrawn = false;
    @Thunk float mCrossFadeProgress = 0f;
    private boolean mAnimationCancelled = false;

    ValueAnimator mAnim;
    // The intrinsic icon scale factor is the scale factor for a drag icon over the workspace
@@ -113,8 +114,10 @@ public class DragView extends View {
        mAnim.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                if (!mAnimationCancelled) {
                    mDragController.onDragViewAnimationEnd();
                }
            }
        });

        mBitmap = Bitmap.createBitmap(bitmap, left, top, width, height);
@@ -326,6 +329,7 @@ public class DragView extends View {
    }

    public void cancelAnimation() {
        mAnimationCancelled = true;
        if (mAnim != null && mAnim.isRunning()) {
            mAnim.cancel();
        }