Add setIcon(int) to IconMixin
This allows vector drawable compat to be used on pre-L. Test: ./gradlew connectedAndroidTest Change-Id: I405f28eae11e68532165f89b1c1a226972ee06a3
This commit is contained in:
parent
c9c5c4431a
commit
97d3a11d5e
|
@ -19,6 +19,7 @@ package com.android.setupwizardlib.template;
|
|||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
@ -45,8 +46,8 @@ public class IconMixin implements Mixin {
|
|||
final TypedArray a =
|
||||
context.obtainStyledAttributes(attrs, R.styleable.SuwIconMixin, defStyleAttr, 0);
|
||||
|
||||
final Drawable icon = a.getDrawable(R.styleable.SuwIconMixin_android_icon);
|
||||
if (icon != null) {
|
||||
final @DrawableRes int icon = a.getResourceId(R.styleable.SuwIconMixin_android_icon, 0);
|
||||
if (icon != 0) {
|
||||
setIcon(icon);
|
||||
}
|
||||
|
||||
|
@ -66,6 +67,21 @@ public class IconMixin implements Mixin {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the icon on this layout. The icon can also be set in XML using {@code android:icon}.
|
||||
*
|
||||
* @param icon A drawable icon resource.
|
||||
*/
|
||||
public void setIcon(@DrawableRes int icon) {
|
||||
final ImageView iconView = getView();
|
||||
if (iconView != null) {
|
||||
// Note: setImageResource on the ImageView is overridden in AppCompatImageView for
|
||||
// support lib users, which enables vector drawable compat to work on versions pre-L.
|
||||
iconView.setImageResource(icon);
|
||||
iconView.setVisibility(icon != 0 ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The icon previously set in {@link #setIcon(Drawable)} or {@code android:icon}
|
||||
*/
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
package com.android.setupwizardlib.template;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.mockito.Matchers.eq;
|
||||
|
@ -27,6 +29,7 @@ import android.content.res.XmlResourceParser;
|
|||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.support.test.filters.SmallTest;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
@ -78,6 +81,17 @@ public class IconMixinTest {
|
|||
assertEquals(View.VISIBLE, mIconView.getVisibility());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setIcon_resourceId_shouldSetIcon() {
|
||||
int icon = android.R.drawable.ic_menu_add;
|
||||
IconMixin mixin = new IconMixin(mTemplateLayout, null, 0);
|
||||
mixin.setIcon(icon);
|
||||
|
||||
Drawable drawable = mIconView.getDrawable();
|
||||
assertThat(drawable).isInstanceOf(BitmapDrawable.class);
|
||||
assertEquals(View.VISIBLE, mIconView.getVisibility());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setIcon_shouldSetVisibilityToGone_whenIconIsNull() {
|
||||
IconMixin mixin = new IconMixin(mTemplateLayout, null, 0);
|
||||
|
|
Loading…
Reference in a new issue