Merge "Add setIcon(int) to IconMixin"

This commit is contained in:
Maurice Lam 2018-02-14 22:03:07 +00:00 committed by Android (Google) Code Review
commit af1e11f074
2 changed files with 32 additions and 2 deletions

View file

@ -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}
*/

View file

@ -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);