From 2437ceed1c2eec431dd66686a3a1ce26825ed5bd Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Wed, 18 Jan 2023 16:45:53 -0800 Subject: [PATCH] Remove char state cache. Removes charpool which caches char state objects to be reused. This charpool was causing char state objects to duplicate. Fixes: 265978605 Test: open pin and spam enter to reset pin and spam pin numbers. I eventually get a duplicate. I also logged the char state array to confirm that the same char state object is being added in append. Change-Id: I9724fcf8d29d43069e298bb0407cea90405741b7 --- .../android/keyguard/PasswordTextView.java | 29 +------------------ 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java b/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java index b1597144d2376..35cae099e44e9 100644 --- a/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java +++ b/packages/SystemUI/src/com/android/keyguard/PasswordTextView.java @@ -47,7 +47,6 @@ import com.android.settingslib.Utils; import com.android.systemui.R; import java.util.ArrayList; -import java.util.Stack; /** * A View similar to a textView which contains password text and can animate when the text is @@ -92,7 +91,6 @@ public class PasswordTextView extends View { private final int mGravity; private ArrayList mTextChars = new ArrayList<>(); private String mText = ""; - private Stack mCharPool = new Stack<>(); private int mDotSize; private PowerManager mPM; private int mCharPadding; @@ -310,13 +308,7 @@ public class PasswordTextView extends View { } private CharState obtainCharState(char c) { - CharState charState; - if(mCharPool.isEmpty()) { - charState = new CharState(); - } else { - charState = mCharPool.pop(); - charState.reset(); - } + CharState charState = new CharState(); charState.whichChar = c; return charState; } @@ -343,8 +335,6 @@ public class PasswordTextView extends View { maxDelay = Math.min(maxDelay, RESET_MAX_DELAY) + DISAPPEAR_DURATION; charState.startRemoveAnimation(startDelay, maxDelay); charState.removeDotSwapCallbacks(); - } else { - mCharPool.push(charState); } } if (!animated) { @@ -421,8 +411,6 @@ public class PasswordTextView extends View { public void onAnimationEnd(Animator animation) { if (!mCancelled) { mTextChars.remove(CharState.this); - mCharPool.push(CharState.this); - reset(); cancelAnimator(textTranslateAnimator); textTranslateAnimator = null; } @@ -518,21 +506,6 @@ public class PasswordTextView extends View { } }; - void reset() { - whichChar = 0; - currentTextSizeFactor = 0.0f; - currentDotSizeFactor = 0.0f; - currentWidthFactor = 0.0f; - cancelAnimator(textAnimator); - textAnimator = null; - cancelAnimator(dotAnimator); - dotAnimator = null; - cancelAnimator(widthAnimator); - widthAnimator = null; - currentTextTranslationY = 1.0f; - removeDotSwapCallbacks(); - } - void startRemoveAnimation(long startDelay, long widthDelay) { boolean dotNeedsAnimation = (currentDotSizeFactor > 0.0f && dotAnimator == null) || (dotAnimator != null && dotAnimationIsGrowing);