summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurice Lam <yukl@google.com>2018-02-13 17:41:33 -0800
committerMaurice Lam <yukl@google.com>2018-02-14 11:19:47 -0800
commit97d3a11d5e6a2bf9ec3f50de7b77ef94333110d3 (patch)
tree57b337a0c5496f990c7615d433f82bc1ed656601
parentc9c5c4431a920e8a22d96bf3721e2c5377c9b57b (diff)
downloadsetupwizard-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.java20
-rw-r--r--library/test/instrumentation/src/com/android/setupwizardlib/template/IconMixinTest.java14
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);