Merge "Fix qs tile drawing in edit QS panel" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
31ff02ecd2
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user