diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java index 128af3702c49c..68e404e36bbaf 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java @@ -43,6 +43,7 @@ class MagnificationModeSwitch { private static final int DURATION_MS = 5000; private static final int START_DELAY_MS = 3000; + private final Runnable mAnimationTask; private final Context mContext; private final WindowManager mWindowManager; @@ -70,6 +71,14 @@ class MagnificationModeSwitch { applyResourcesValues(); mImageView.setImageResource(getIconResId(mMagnificationMode)); mImageView.setOnTouchListener(this::onTouch); + + mAnimationTask = () -> { + mImageView.animate() + .alpha(0f) + .setDuration(DURATION_MS) + .withEndAction(() -> removeButton()) + .start(); + }; } private void applyResourcesValues() { @@ -147,13 +156,8 @@ class MagnificationModeSwitch { // Dismiss the magnification switch button after the button is displayed for a period of // time. mImageView.animate().cancel(); - mImageView.animate() - .alpha(0f) - .setStartDelay(START_DELAY_MS) - .setDuration(DURATION_MS) - .withEndAction( - () -> removeButton()) - .start(); + mImageView.removeCallbacks(mAnimationTask); + mImageView.postDelayed(mAnimationTask, START_DELAY_MS); } void onConfigurationChanged(int configDiff) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java index cdbc647f152b4..64e067396059d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java @@ -231,7 +231,6 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { private void assertShowButtonAnimation() { verify(mViewPropertyAnimator).cancel(); verify(mViewPropertyAnimator).setDuration(anyLong()); - verify(mViewPropertyAnimator).setStartDelay(anyLong()); verify(mViewPropertyAnimator).alpha(anyFloat()); verify(mViewPropertyAnimator).start(); } @@ -239,11 +238,15 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { private void initMockImageViewAndAnimator() { when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator); - when(mViewPropertyAnimator.setStartDelay(anyLong())).thenReturn(mViewPropertyAnimator); when(mViewPropertyAnimator.withEndAction(any(Runnable.class))).thenReturn( mViewPropertyAnimator); when(mSpyImageView.animate()).thenReturn(mViewPropertyAnimator); + doAnswer(invocation -> { + Runnable run = invocation.getArgument(0); + run.run(); + return null; + }).when(mSpyImageView).postDelayed(any(), anyLong()); } private void resetMockImageViewAndAnimator() {