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

Commit 2797d459 authored by Aaron Liu's avatar Aaron Liu
Browse files

End animation when deleting.

It seems that when we delete and add super quickly, the delete method is
preventing the view from being removed. Instead of removing the view
after the full duration of the animation is complete, we end the
animation to remove the view to begin the next delete.

This actually also makes the reset animation much more succinct when we
long press delete.

Fixes: 276400809
Test: add and delete in pin view very quickly
Change-Id: Ica145faa95a342b10832e355fe04201a9fc78459
parent 9381b26f
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.LinearLayout;

@@ -50,7 +49,7 @@ public class PinShapeNonHintingView extends LinearLayout implements PinShapeInpu
            android.R.attr.textColorPrimary).getDefaultColor();
    private int mPosition = 0;
    private final PinShapeAdapter mPinShapeAdapter;
    private Animation mCurrentPlayingAnimation;
    private ValueAnimator mValueAnimator = ValueAnimator.ofFloat(1f, 0f);
    public PinShapeNonHintingView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPinShapeAdapter = new PinShapeAdapter(context);
@@ -80,15 +79,17 @@ public class PinShapeNonHintingView extends LinearLayout implements PinShapeInpu
            Log.e(getClass().getName(), "Trying to delete a non-existent char");
            return;
        }
        if (mValueAnimator.isRunning()) {
            mValueAnimator.end();
        }
        mPosition--;
        ImageView pinDot = (ImageView) getChildAt(mPosition);
        ValueAnimator animator = ValueAnimator.ofFloat(1f, 0f);
        animator.addUpdateListener(valueAnimator -> {
        mValueAnimator.addUpdateListener(valueAnimator -> {
            float value = (float) valueAnimator.getAnimatedValue();
            pinDot.setScaleX(value);
            pinDot.setScaleY(value);
        });
        animator.addListener(new AnimatorListenerAdapter() {
        mValueAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
@@ -96,11 +97,10 @@ public class PinShapeNonHintingView extends LinearLayout implements PinShapeInpu
                        PinShapeNonHintingView.this,
                        new PinShapeViewTransition());
                removeView(pinDot);
                mCurrentPlayingAnimation = null;
            }
        });
        animator.setDuration(PasswordTextView.DISAPPEAR_DURATION);
        animator.start();
        mValueAnimator.setDuration(PasswordTextView.DISAPPEAR_DURATION);
        mValueAnimator.start();
    }

    @Override