From edcea599dace6ab827d518eb986fd7b7261a81a7 Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Tue, 8 Nov 2022 13:58:39 -0500 Subject: [PATCH] Fix not animating icons When the icon is not animating, we need to move it to the end state. To do that, we call stop. We also need to call start, as the animator set may not have been initialized. Fixes: 257278678 Test: atest QSIconViewImplTest Test: manual Change-Id: I356342a185e63efc2e3b8d25b8c57e20e1ad62bc --- .../systemui/qs/tileimpl/QSIconViewImpl.java | 21 ++++++++++++------- .../qs/tileimpl/QSIconViewImplTest.java | 8 +++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java index 1f92b12c1a83d..cd69f4edff638 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java @@ -140,16 +140,21 @@ public class QSIconViewImpl extends QSIconView { iv.setTag(R.id.qs_icon_tag, icon); iv.setTag(R.id.qs_slash_tag, state.slash); iv.setPadding(0, padding, 0, padding); - if (shouldAnimate && d instanceof Animatable2) { + if (d instanceof Animatable2) { Animatable2 a = (Animatable2) d; a.start(); - if (state.isTransient) { - a.registerAnimationCallback(new AnimationCallback() { - @Override - public void onAnimationEnd(Drawable drawable) { - a.start(); - } - }); + if (shouldAnimate) { + if (state.isTransient) { + a.registerAnimationCallback(new AnimationCallback() { + @Override + public void onAnimationEnd(Drawable drawable) { + a.start(); + } + }); + } + } else { + // Sends animator to end of animation. Needs to be called after calling start. + a.stop(); } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java index b067ee76f3b35..f55d262cfc0da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java @@ -40,6 +40,8 @@ import com.android.systemui.plugins.qs.QSTile.State; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mockito; @RunWith(AndroidTestingRunner.class) @UiThreadTest @@ -138,7 +140,7 @@ public class QSIconViewImplTest extends SysuiTestCase { } @Test - public void testIconNotAnimatedWhenAllowAnimationsFalse() { + public void testIconStartedAndStoppedWhenAllowAnimationsFalse() { ImageView iv = new ImageView(mContext); AnimatedVectorDrawable d = mock(AnimatedVectorDrawable.class); State s = new State(); @@ -148,7 +150,9 @@ public class QSIconViewImplTest extends SysuiTestCase { mIconView.updateIcon(iv, s, false); - verify(d, never()).start(); + InOrder inOrder = Mockito.inOrder(d); + inOrder.verify(d).start(); + inOrder.verify(d).stop(); } private static Drawable.ConstantState fakeConstantState(Drawable otherDrawable) {