Merge "Fix qs tile drawing in edit QS panel" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-13 18:39:39 +00:00
committed by Android (Google) Code Review
4 changed files with 57 additions and 13 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -38,18 +38,31 @@ 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
public void testSetNullDrawableRemovesSlashDrawable() {
SlashState mockState = mock(SlashState.class);
@@ -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);