summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Laird <evanlaird@google.com> 2017-07-12 16:36:06 -0400
committer Evan Laird <evanlaird@google.com> 2017-07-12 16:43:59 -0400
commit929bd54c6a91e78de4634cb50b781a9616157f5c (patch)
treef873ae9c00982b274c10f387c8a58738e3249dc4
parent3d0a74a9e4f54851f223ca70488b249c2acaa226 (diff)
Fix qs tile drawing in edit QS panel
The problem here was reuse: 1. Tile has a SlashState -> gets SlashDrawable 2. Reused tile has no SlashState -> doesn't know how to gracefully remove the slash and draw regularly, so it gets a slash anyway. Unrelated, but also fixed: turn off slash animations in QS edit panel Fixes: 63160044 Test: runtest -x frameworks/base/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java Change-Id: I6841bfafcef0588d1ca63b3326dfee1a856618f3
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java21
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java21
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);