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

Commit 6068de20 authored by Yuli Huang's avatar Yuli Huang
Browse files

Fix b/6064909: Photo might not be snapped back correctly.

Photo might not be snapped back if the animation wasn't actually started
because of no position/scale changes.

Change-Id: I6b5e938bffd954b848cae04514a06d0427151025
parent 2ce3c3bf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ public class PhotoView extends GLView {
            mVideoPlayIcon.draw(canvas, x - s / 2, y - s / 2, s, s);
        }

        if (mPositionController.advanceAnimation()) invalidate();
        mPositionController.advanceAnimation();
    }

    private void stopCurrentSwipingIfNeeded() {
+21 −15
Original line number Diff line number Diff line
@@ -400,8 +400,12 @@ class PositionController {

    private void startAnimation(
            int targetX, int targetY, float scale, int kind) {
        mAnimationKind = kind;
        if (targetX == mCurrentX && targetY == mCurrentY
                && scale == mCurrentScale) return;
                && scale == mCurrentScale) {
            onAnimationComplete();
            return;
        }

        mFromX = mCurrentX;
        mFromY = mCurrentY;
@@ -420,25 +424,18 @@ class PositionController {
        }

        mAnimationStartTime = SystemClock.uptimeMillis();
        mAnimationKind = kind;
        if (mAnimationKind != ANIM_KIND_FLING) {
            mAnimationDuration = ANIM_TIME[mAnimationKind];
        }
        if (advanceAnimation()) mViewer.invalidate();
        advanceAnimation();
    }

    // Returns true if redraw is needed.
    public boolean advanceAnimation() {
    public void advanceAnimation() {
        if (mAnimationStartTime == NO_ANIMATION) {
            return false;
            return;
        } else if (mAnimationStartTime == LAST_ANIMATION) {
            mAnimationStartTime = NO_ANIMATION;
            if (mViewer.isInTransition()) {
                mViewer.notifyTransitionComplete();
                return false;
            } else {
                return startSnapbackIfNeeded();
            }
            onAnimationComplete();
            return;
        }

        long now = SystemClock.uptimeMillis();
@@ -478,7 +475,16 @@ class PositionController {
            }
        }
        mViewer.setPosition(mCurrentX, mCurrentY, mCurrentScale);
        return true;
        mViewer.invalidate();
    }

    private void onAnimationComplete() {
        mAnimationStartTime = NO_ANIMATION;
        if (mViewer.isInTransition()) {
            mViewer.notifyTransitionComplete();
        } else {
            if (startSnapbackIfNeeded()) mViewer.invalidate();
        }
    }

    private void flingInterpolate(float progress) {
@@ -545,7 +551,7 @@ class PositionController {
        return startSnapback();
    }

    public boolean startSnapback() {
    private boolean startSnapback() {
        boolean needAnimation = false;
        float scale = mCurrentScale;