diff options
10 files changed, 64 insertions, 4 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/expr/ResourceExpr.java b/compiler/src/main/java/android/databinding/tool/expr/ResourceExpr.java index b20075b4..514fbc79 100644 --- a/compiler/src/main/java/android/databinding/tool/expr/ResourceExpr.java +++ b/compiler/src/main/java/android/databinding/tool/expr/ResourceExpr.java @@ -146,11 +146,11 @@ public class ResourceExpr extends Expr { if ("animator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadAnimator(" + context + ", " + resourceName + ")"; if ("bool".equals(mResourceType)) return resources + ".getBoolean(" + resourceName + ")"; if ("color".equals(mResourceType)) return resources + ".getColor(" + resourceName + ")"; - if ("colorStateList".equals(mResourceType)) return resources + ".getColorStateList(" + resourceName + ")"; + if ("colorStateList".equals(mResourceType)) return "getColorStateListFromResource(" + resourceName + ")"; if ("dimen".equals(mResourceType)) return resources + ".getDimension(" + resourceName + ")"; if ("dimenOffset".equals(mResourceType)) return resources + ".getDimensionPixelOffset(" + resourceName + ")"; if ("dimenSize".equals(mResourceType)) return resources + ".getDimensionPixelSize(" + resourceName + ")"; - if ("drawable".equals(mResourceType)) return resources + ".getDrawable(" + resourceName + ")"; + if ("drawable".equals(mResourceType)) return "getDrawableFromResource(" + resourceName + ")"; if ("fraction".equals(mResourceType)) { String base = getChildCode(0, "1"); String pbase = getChildCode(1, "1"); diff --git a/databinding.properties b/databinding.properties index ff9ec0a4..25d36cf1 100644 --- a/databinding.properties +++ b/databinding.properties @@ -6,7 +6,7 @@ androidPluginVersion = 1.4.0-beta6 javaTargetCompatibility = 1.7 javaSourceCompatibility = 1.7 buildToolsVersion = 22.0.1 -compileSdkVersionStr = 22 +compileSdkVersionStr = 23 prebuildFolderName=prebuilds group=com.android.databinding testGroup=com.android.databinding.test diff --git a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/TextViewBindingAdapterTest.java b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/TextViewBindingAdapterTest.java index 98272dd6..13814ae2 100644 --- a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/TextViewBindingAdapterTest.java +++ b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/TextViewBindingAdapterTest.java @@ -22,6 +22,7 @@ import android.annotation.TargetApi; import android.databinding.adapters.TextViewBindingAdapter; import android.graphics.drawable.ColorDrawable; import android.os.Build; +import android.test.UiThreadTest; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; @@ -301,4 +302,10 @@ public class TextViewBindingAdapterTest assertTrue(TextViewBindingObject.KeyListener2.class.isInstance(textView.getKeyListener())); } + @UiThreadTest + public void testTextWithTheme() throws Throwable { + TextView textView = mBinder.textWithTheme; + assertNotNull(textView.getTextColors()); + } + } diff --git a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewBindingAdapterTest.java b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewBindingAdapterTest.java index 595fce41..3fe918a7 100644 --- a/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewBindingAdapterTest.java +++ b/integration-tests/TestApp/app/src/androidTestApi7/java/android/databinding/testapp/ViewBindingAdapterTest.java @@ -184,4 +184,10 @@ public class ViewBindingAdapterTest extends BindingAdapterTestBase<ViewAdapterTe Drawable drawable = view.getBackground(); assertNotNull(drawable); } + + @UiThreadTest + public void testBackgroundDrawableWithTheme() throws Throwable { + View view = mBinder.backgroundWithTheme; + assertNotNull(view.getBackground()); + } } diff --git a/integration-tests/TestApp/app/src/main/res/color/text_colors.xml b/integration-tests/TestApp/app/src/main/res/color/text_colors.xml new file mode 100644 index 00000000..0043a023 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/res/color/text_colors.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:color="?android:selectedWeekBackgroundColor" + android:state_pressed="false" + android:state_focused="false" + android:state_selected="false" + android:state_checkable="false" + android:state_checked="false" + android:state_enabled="false" + android:state_window_focused="false"/> +</selector>
\ No newline at end of file diff --git a/integration-tests/TestApp/app/src/main/res/drawable/circle.xml b/integration-tests/TestApp/app/src/main/res/drawable/circle.xml new file mode 100644 index 00000000..e325ab31 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/res/drawable/circle.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="oval"> + <solid + android:color="?android:selectedWeekBackgroundColor"/> +</shape>
\ No newline at end of file diff --git a/integration-tests/TestApp/app/src/main/res/layout/text_view_adapter_test.xml b/integration-tests/TestApp/app/src/main/res/layout/text_view_adapter_test.xml index a37031b3..1502e959 100644 --- a/integration-tests/TestApp/app/src/main/res/layout/text_view_adapter_test.xml +++ b/integration-tests/TestApp/app/src/main/res/layout/text_view_adapter_test.xml @@ -80,6 +80,10 @@ android:id="@+id/textInputMethod" android:inputMethod="@{obj.inputMethod}" /> + <TextView android:layout_width="match_parent" android:layout_height="match_parent" + android:id="@+id/textWithTheme" + android:textColor="@{@colorStateList/text_colors}" + /> </LinearLayout> </layout>
\ No newline at end of file diff --git a/integration-tests/TestApp/app/src/main/res/layout/view_adapter_test.xml b/integration-tests/TestApp/app/src/main/res/layout/view_adapter_test.xml index 42509c9c..ce3b8958 100644 --- a/integration-tests/TestApp/app/src/main/res/layout/view_adapter_test.xml +++ b/integration-tests/TestApp/app/src/main/res/layout/view_adapter_test.xml @@ -116,5 +116,10 @@ android:layout_width="10dp" android:layout_height="10dp" android:background="@{@drawable/ic_launcher}"/> + <View + android:id="@+id/backgroundWithTheme" + android:layout_width="10dp" + android:layout_height="10dp" + android:background="@{@drawable/circle}"/> </LinearLayout> </layout>
\ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index fa8a1e42..43d214f0 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -32,7 +32,7 @@ android { defaultConfig { minSdkVersion 7 - targetSdkVersion 21 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/library/src/main/java/android/databinding/ViewDataBinding.java b/library/src/main/java/android/databinding/ViewDataBinding.java index 1d087629..2dacd1e9 100644 --- a/library/src/main/java/android/databinding/ViewDataBinding.java +++ b/library/src/main/java/android/databinding/ViewDataBinding.java @@ -19,7 +19,9 @@ package android.databinding; import com.android.databinding.library.R; import android.annotation.TargetApi; +import android.content.res.ColorStateList; import android.databinding.CallbackRegistry.NotifierCallback; +import android.graphics.drawable.Drawable; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Handler; @@ -563,6 +565,24 @@ public abstract class ViewDataBinding { } /** @hide */ + protected ColorStateList getColorStateListFromResource(int resourceId) { + if (VERSION.SDK_INT >= VERSION_CODES.M) { + return getRoot().getContext().getColorStateList(resourceId); + } else { + return getRoot().getResources().getColorStateList(resourceId); + } + } + + /** @hide */ + protected Drawable getDrawableFromResource(int resourceId) { + if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { + return getRoot().getContext().getDrawable(resourceId); + } else { + return getRoot().getResources().getDrawable(resourceId); + } + } + + /** @hide */ protected static <T> T getFromArray(T[] arr, int index) { if (index < 0 || index >= arr.length) { return null; |