Loading packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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") { Loading @@ -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; if (mAnimationEnabled) { ObjectAnimator anim = ObjectAnimator.ofFloat(this, mSlashLengthProp, start, end); anim.addUpdateListener((ValueAnimator valueAnimator) -> { invalidateSelf(); }); anim.addUpdateListener((ValueAnimator valueAnimator) -> invalidateSelf()); anim.setDuration(QS_ANIM_LENGTH); anim.start(); } else { mCurrentSlashLength = end; invalidateSelf(); } } @Override Loading packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +7 −3 Original line number Diff line number Diff line Loading @@ -98,10 +98,14 @@ public class QSIconViewImpl extends QSIconView { d.setAutoMirrored(false); d.setLayoutDirection(getLayoutDirection()); } if (iv instanceof SlashImageView) { ((SlashImageView) iv).setAnimationEnabled(shouldAnimate); ((SlashImageView) iv).setState(state.slash, d); } else { iv.setImageDrawable(d); if (state.slash != null && iv instanceof SlashImageView) { ((SlashImageView) iv).setState(state.slash); } iv.setTag(R.id.qs_icon_tag, state.icon); iv.setTag(R.id.qs_slash_tag, state.slash); iv.setPadding(0, padding, 0, padding); Loading packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -26,6 +28,7 @@ public class SlashImageView extends ImageView { @VisibleForTesting protected SlashDrawable mSlash; private boolean mAnimationEnabled = true; public SlashImageView(Context context) { super(context); Loading @@ -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); } } Loading @@ -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); } } } packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java +17 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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") { Loading @@ -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; if (mAnimationEnabled) { ObjectAnimator anim = ObjectAnimator.ofFloat(this, mSlashLengthProp, start, end); anim.addUpdateListener((ValueAnimator valueAnimator) -> { invalidateSelf(); }); anim.addUpdateListener((ValueAnimator valueAnimator) -> invalidateSelf()); anim.setDuration(QS_ANIM_LENGTH); anim.start(); } else { mCurrentSlashLength = end; invalidateSelf(); } } @Override Loading
packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +7 −3 Original line number Diff line number Diff line Loading @@ -98,10 +98,14 @@ public class QSIconViewImpl extends QSIconView { d.setAutoMirrored(false); d.setLayoutDirection(getLayoutDirection()); } if (iv instanceof SlashImageView) { ((SlashImageView) iv).setAnimationEnabled(shouldAnimate); ((SlashImageView) iv).setState(state.slash, d); } else { iv.setImageDrawable(d); if (state.slash != null && iv instanceof SlashImageView) { ((SlashImageView) iv).setState(state.slash); } iv.setTag(R.id.qs_icon_tag, state.icon); iv.setTag(R.id.qs_slash_tag, state.slash); iv.setPadding(0, padding, 0, padding); Loading
packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -26,6 +28,7 @@ public class SlashImageView extends ImageView { @VisibleForTesting protected SlashDrawable mSlash; private boolean mAnimationEnabled = true; public SlashImageView(Context context) { super(context); Loading @@ -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); } } Loading @@ -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); } } }
packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java +17 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); Loading