diff options
4 files changed, 57 insertions, 13 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java b/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java index a10aa5413ca9..b8535a3f5a40 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java @@ -61,6 +61,7 @@ public class SlashDrawable extends Drawable { private boolean mSlashed; private Mode mTintMode; private ColorStateList mTintList; + private boolean mAnimationEnabled = true; public SlashDrawable(Drawable d) { mDrawable = d; @@ -97,6 +98,10 @@ public class SlashDrawable extends Drawable { invalidateSelf(); } + public void setAnimationEnabled(boolean enabled) { + mAnimationEnabled = enabled; + } + // Animate this value on change private float mCurrentSlashLength; private final FloatProperty mSlashLengthProp = new FloatProperty<SlashDrawable>("slashLength") { @@ -119,12 +124,15 @@ public class SlashDrawable extends Drawable { final float end = mSlashed ? SLASH_HEIGHT / SCALE : 0f; final float start = mSlashed ? 0f : SLASH_HEIGHT / SCALE; - ObjectAnimator anim = ObjectAnimator.ofFloat(this, mSlashLengthProp, start, end); - anim.addUpdateListener((ValueAnimator valueAnimator) -> { + if (mAnimationEnabled) { + ObjectAnimator anim = ObjectAnimator.ofFloat(this, mSlashLengthProp, start, end); + anim.addUpdateListener((ValueAnimator valueAnimator) -> invalidateSelf()); + anim.setDuration(QS_ANIM_LENGTH); + anim.start(); + } else { + mCurrentSlashLength = end; invalidateSelf(); - }); - anim.setDuration(QS_ANIM_LENGTH); - anim.start(); + } } @Override 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 5ab3927ff098..8074cb9b0443 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java @@ -98,10 +98,14 @@ public class QSIconViewImpl extends QSIconView { d.setAutoMirrored(false); d.setLayoutDirection(getLayoutDirection()); } - iv.setImageDrawable(d); - if (state.slash != null && iv instanceof SlashImageView) { - ((SlashImageView) iv).setState(state.slash); + + if (iv instanceof SlashImageView) { + ((SlashImageView) iv).setAnimationEnabled(shouldAnimate); + ((SlashImageView) iv).setState(state.slash, d); + } else { + iv.setImageDrawable(d); } + iv.setTag(R.id.qs_icon_tag, state.icon); iv.setTag(R.id.qs_slash_tag, state.slash); iv.setPadding(0, padding, 0, padding); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java index 315a815af100..13912fe0c16d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java @@ -14,8 +14,10 @@ package com.android.systemui.qs.tileimpl; +import android.annotation.Nullable; import android.content.Context; import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; import android.widget.ImageView; import com.android.internal.annotations.VisibleForTesting; @@ -26,6 +28,7 @@ public class SlashImageView extends ImageView { @VisibleForTesting protected SlashDrawable mSlash; + private boolean mAnimationEnabled = true; public SlashImageView(Context context) { super(context); @@ -34,6 +37,7 @@ public class SlashImageView extends ImageView { private void ensureSlashDrawable() { if (mSlash == null) { mSlash = new SlashDrawable(getDrawable()); + mSlash.setAnimationEnabled(mAnimationEnabled); super.setImageDrawable(mSlash); } } @@ -46,13 +50,28 @@ public class SlashImageView extends ImageView { } else if (mSlash == null) { super.setImageDrawable(drawable); } else { + mSlash.setAnimationEnabled(mAnimationEnabled); mSlash.setDrawable(drawable); } } - public void setState(SlashState slashState) { + public void setAnimationEnabled(boolean enabled) { + mAnimationEnabled = enabled; + } + + private void setSlashState(@NonNull SlashState slashState) { ensureSlashDrawable(); mSlash.setRotation(slashState.rotation); mSlash.setSlashed(slashState.isSlashed); } + + public void setState(@Nullable SlashState state, @Nullable Drawable drawable) { + if (state != null) { + setImageDrawable(drawable); + setSlashState(state); + } else { + mSlash = null; + setImageDrawable(drawable); + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java index aef584f8d986..9fe3e10b752e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java @@ -38,16 +38,29 @@ public class SlashImageViewTest extends SysuiTestCase { private TestableSlashImageView mSlashView; @Test - public void testSetSlashStateCreatesSlashDrawable() { + public void testSetNonNullSlashStateCreatesSlashDrawable() { SlashState mockState = mock(SlashState.class); Drawable mockDrawable = mock(Drawable.class); mSlashView = new TestableSlashImageView(mContext); assertTrue(mSlashView.getSlashDrawable() == null); - mSlashView.setImageDrawable(mockDrawable); - mSlashView.setState(mockState); + mSlashView.setState(mockState, mockDrawable); + + assertTrue(mSlashView.getSlashDrawable() != null); + } + + @Test + public void testSetNullSlashStateRemovesSlashDrawable() { + SlashState mockState = mock(SlashState.class); + Drawable mockDrawable = mock(Drawable.class); + mSlashView = new TestableSlashImageView(mContext); + mSlashView.setState(mockState, mockDrawable); assertTrue(mSlashView.getSlashDrawable() != null); + + mSlashView.setState(null, mockDrawable); + + assertTrue(mSlashView.getSlashDrawable() == null); } @Test @@ -57,7 +70,7 @@ public class SlashImageViewTest extends SysuiTestCase { mSlashView = new TestableSlashImageView(mContext); mSlashView.setImageDrawable(mockDrawable); - mSlashView.setState(mockState); + mSlashView.setState(mockState, mockDrawable); mSlashView.setImageDrawable(null); assertTrue(mSlashView.getSlashDrawable() == null); |