diff options
author | Maurice Lam <yukl@google.com> | 2018-02-13 17:41:33 -0800 |
---|---|---|
committer | Maurice Lam <yukl@google.com> | 2018-02-14 11:19:47 -0800 |
commit | 97d3a11d5e6a2bf9ec3f50de7b77ef94333110d3 (patch) | |
tree | 57b337a0c5496f990c7615d433f82bc1ed656601 | |
parent | c9c5c4431a920e8a22d96bf3721e2c5377c9b57b (diff) | |
download | setupwizard-97d3a11d5e6a2bf9ec3f50de7b77ef94333110d3.tar.gz |
Add setIcon(int) to IconMixin
This allows vector drawable compat to be used on pre-L.
Test: ./gradlew connectedAndroidTest
Change-Id: I405f28eae11e68532165f89b1c1a226972ee06a3
-rw-r--r-- | library/main/src/com/android/setupwizardlib/template/IconMixin.java | 20 | ||||
-rw-r--r-- | library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java | 14 |
2 files changed, 32 insertions, 2 deletions
diff --git a/library/main/src/com/android/setupwizardlib/template/IconMixin.java b/library/main/src/com/android/setupwizardlib/template/IconMixin.java index c42299b..7f5a3c9 100644 --- a/library/main/src/com/android/setupwizardlib/template/IconMixin.java +++ b/library/main/src/com/android/setupwizardlib/template/IconMixin.java @@ -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); } @@ -67,6 +68,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} */ public Drawable getIcon() { diff --git a/library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java b/library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java index 0391392..12187a2 100644 --- a/library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java +++ b/library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java @@ -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; @@ -79,6 +82,17 @@ public class IconMixinTest { } @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); mixin.setIcon(null); |