Merge "Mutate the drawable when updating QS icon." into sc-qpr1-dev am: 590dc710e8 am: 513e53d864

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15668772

Change-Id: I847f54f4cbe3b608a54e65356ff044cfb7a720db
This commit is contained in:
Android Build Prod User
2021-08-27 03:56:30 +00:00
committed by Automerger Merge Worker
2 changed files with 36 additions and 0 deletions

View File

@@ -116,6 +116,9 @@ public class QSIconViewImpl extends QSIconView {
: icon.getInvisibleDrawable(mContext) : null; : icon.getInvisibleDrawable(mContext) : null;
int padding = icon != null ? icon.getPadding() : 0; int padding = icon != null ? icon.getPadding() : 0;
if (d != null) { if (d != null) {
if (d.getConstantState() != null) {
d = d.getConstantState().newDrawable();
}
d.setAutoMirrored(false); d.setAutoMirrored(false);
d.setLayoutDirection(getLayoutDirection()); d.setLayoutDirection(getLayoutDirection());
} }

View File

@@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -73,6 +74,24 @@ public class QSIconViewImplTest extends SysuiTestCase {
verify(s.icon, never()).getInvisibleDrawable(any()); verify(s.icon, never()).getInvisibleDrawable(any());
} }
@Test
public void testMutateIconDrawable() {
SlashImageView iv = mock(SlashImageView.class);
Drawable originalDrawable = mock(Drawable.class);
Drawable otherDrawable = mock(Drawable.class);
State s = new State();
s.icon = mock(Icon.class);
when(s.icon.getInvisibleDrawable(eq(mContext))).thenReturn(originalDrawable);
when(s.icon.getDrawable(eq(mContext))).thenReturn(originalDrawable);
when(iv.isShown()).thenReturn(true);
when(originalDrawable.getConstantState()).thenReturn(fakeConstantState(otherDrawable));
mIconView.updateIcon(iv, s, /* allowAnimations= */true);
verify(iv).setState(any(), eq(otherDrawable));
}
@Test @Test
public void testNoFirstFade() { public void testNoFirstFade() {
ImageView iv = mock(ImageView.class); ImageView iv = mock(ImageView.class);
@@ -104,4 +123,18 @@ public class QSIconViewImplTest extends SysuiTestCase {
public void testIconNotSet_toString() { public void testIconNotSet_toString() {
assertFalse(mIconView.toString().contains("lastIcon")); assertFalse(mIconView.toString().contains("lastIcon"));
} }
private static Drawable.ConstantState fakeConstantState(Drawable otherDrawable) {
return new Drawable.ConstantState() {
@Override
public Drawable newDrawable() {
return otherDrawable;
}
@Override
public int getChangingConfigurations() {
return 1;
}
};
}
} }