diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 66b0158fbd67341cfc639e6de1013d059eaaa6d7..0734e6827d4de9c42369e8989b73b4456e3a9c64 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -886,9 +886,16 @@ public class LockPatternView extends View { cellState.activationAnimator.cancel(); } AnimatorSet animatorSet = new AnimatorSet(); + + // When running the line end animation (see doc for createLineEndAnimation), if cell is in: + // - activate state - use finger position at the time of hit detection + // - deactivate state - use current position where the end was last during initial animation + // Note that deactivate state will only come if mKeepDotActivated is themed true. + final float startX = activate == CELL_ACTIVATE ? mInProgressX : cellState.lineEndX; + final float startY = activate == CELL_ACTIVATE ? mInProgressY : cellState.lineEndY; AnimatorSet.Builder animatorSetBuilder = animatorSet .play(createLineDisappearingAnimation()) - .with(createLineEndAnimation(cellState, mInProgressX, mInProgressY, + .with(createLineEndAnimation(cellState, startX, startY, getCenterXForColumn(cell.column), getCenterYForRow(cell.row))); if (mDotSize != mDotSizeActivated) { animatorSetBuilder.with(createDotRadiusAnimation(cellState));