diff --git a/butterknife-annotations/src/main/java/butterknife/BindDrawable.java b/butterknife-annotations/src/main/java/butterknife/BindDrawable.java index a30d20dd7..57164252e 100644 --- a/butterknife-annotations/src/main/java/butterknife/BindDrawable.java +++ b/butterknife-annotations/src/main/java/butterknife/BindDrawable.java @@ -1,6 +1,7 @@ package butterknife; import android.support.annotation.AttrRes; +import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import java.lang.annotation.Retention; import java.lang.annotation.Target; @@ -23,5 +24,5 @@ @DrawableRes int value(); /** Color attribute resource ID that is used to tint the drawable. */ - @AttrRes int tint() default 0; + @ColorRes @AttrRes int tint() default 0; } diff --git a/butterknife-integration-test/src/main/java/com/example/butterknife/library/SimpleActivity.java b/butterknife-integration-test/src/main/java/com/example/butterknife/library/SimpleActivity.java index 7097639f0..05564d68d 100644 --- a/butterknife-integration-test/src/main/java/com/example/butterknife/library/SimpleActivity.java +++ b/butterknife-integration-test/src/main/java/com/example/butterknife/library/SimpleActivity.java @@ -1,14 +1,22 @@ package com.example.butterknife.library; import android.app.Activity; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.Button; +import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; + +import com.example.butterknife.R; + +import java.util.List; + +import butterknife.BindDrawable; import butterknife.BindString; import butterknife.BindView; import butterknife.BindViews; @@ -16,9 +24,6 @@ import butterknife.OnClick; import butterknife.OnItemClick; import butterknife.OnLongClick; -import com.example.butterknife.R; - -import java.util.List; import static android.widget.Toast.LENGTH_SHORT; @@ -38,10 +43,12 @@ public class SimpleActivity extends Activity { @BindView(R.id.hello) Button hello; @BindView(R.id.list_of_things) ListView listOfThings; @BindView(R.id.footer) TextView footer; + @BindView(R.id.image) ImageView image; @BindString(R.string.app_name) String butterKnife; @BindString(R.string.field_method) String fieldMethod; @BindString(R.string.by_jake_wharton) String byJakeWharton; @BindString(R.string.say_hello) String sayHello; + @BindDrawable(value = R.drawable.ic_adb, tint = android.R.color.darker_gray) Drawable drawable; @BindViews({ R.id.title, R.id.subtitle, R.id.hello }) List headerViews; @@ -67,6 +74,7 @@ public class SimpleActivity extends Activity { ButterKnife.bind(this); // Contrived code to use the bound fields. + image.setImageDrawable(drawable); title.setText(butterKnife); subtitle.setText(fieldMethod); footer.setText(byJakeWharton); diff --git a/butterknife-integration-test/src/main/res/drawable/ic_adb.xml b/butterknife-integration-test/src/main/res/drawable/ic_adb.xml new file mode 100644 index 000000000..74ce99f02 --- /dev/null +++ b/butterknife-integration-test/src/main/res/drawable/ic_adb.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/butterknife-integration-test/src/main/res/layout/simple_activity.xml b/butterknife-integration-test/src/main/res/layout/simple_activity.xml index d95547a85..9f22377a9 100644 --- a/butterknife-integration-test/src/main/res/layout/simple_activity.xml +++ b/butterknife-integration-test/src/main/res/layout/simple_activity.xml @@ -6,6 +6,13 @@ android:orientation="vertical" android:padding="8dp" tools:ignore="SelectableText"> + + Field and method binding for Android views. by Jake Wharton Say Hello + A tinted drawable diff --git a/butterknife-integration-test/src/test/java/com/example/butterknife/library/SimpleActivityTest.java b/butterknife-integration-test/src/test/java/com/example/butterknife/library/SimpleActivityTest.java index ccda50b4d..e4ec69c98 100644 --- a/butterknife-integration-test/src/test/java/com/example/butterknife/library/SimpleActivityTest.java +++ b/butterknife-integration-test/src/test/java/com/example/butterknife/library/SimpleActivityTest.java @@ -1,13 +1,15 @@ package com.example.butterknife.library; -import butterknife.ButterKnife; -import butterknife.Unbinder; import com.example.butterknife.R; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import butterknife.ButterKnife; +import butterknife.Unbinder; + import static com.google.common.truth.Truth.assertThat; @RunWith(RobolectricTestRunner.class) @@ -22,6 +24,7 @@ public class SimpleActivityTest { } protected static void verifySimpleActivityBound(SimpleActivity activity) { + assertThat(activity.image.getId()).isEqualTo(R.id.image); assertThat(activity.title.getId()).isEqualTo(R.id.title); assertThat(activity.subtitle.getId()).isEqualTo(R.id.subtitle); assertThat(activity.hello.getId()).isEqualTo(R.id.hello); @@ -30,6 +33,7 @@ protected static void verifySimpleActivityBound(SimpleActivity activity) { } protected static void verifySimpleActivityUnbound(SimpleActivity activity) { + assertThat(activity.image).isNull(); assertThat(activity.title).isNull(); assertThat(activity.subtitle).isNull(); assertThat(activity.hello).isNull(); diff --git a/butterknife/src/main/java/butterknife/internal/Utils.java b/butterknife/src/main/java/butterknife/internal/Utils.java index 52b2fc232..013e70052 100644 --- a/butterknife/src/main/java/butterknife/internal/Utils.java +++ b/butterknife/src/main/java/butterknife/internal/Utils.java @@ -4,6 +4,7 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.support.annotation.AttrRes; +import android.support.annotation.ColorRes; import android.support.annotation.DimenRes; import android.support.annotation.DrawableRes; import android.support.annotation.IdRes; @@ -21,13 +22,17 @@ public final class Utils { @UiThread // Implicit synchronization for use of shared resource VALUE. public static Drawable getTintedDrawable(Context context, - @DrawableRes int id, @AttrRes int tintAttrId) { - boolean attributeFound = context.getTheme().resolveAttribute(tintAttrId, VALUE, true); + @DrawableRes int id, @ColorRes @AttrRes int tintId) { + boolean attributeFound = context.getTheme().resolveAttribute(tintId, VALUE, true); if (!attributeFound) { + VALUE.resourceId = tintId; + } + + if (VALUE.resourceId == 0) { throw new Resources.NotFoundException("Required tint color attribute with name " - + context.getResources().getResourceEntryName(tintAttrId) - + " and attribute ID " - + tintAttrId + + context.getResources().getResourceEntryName(tintId) + + " and attribute- or color resource-ID " + + tintId + " was not found."); }