summaryrefslogtreecommitdiff
path: root/compiler/src/main
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-10-22 17:37:47 -0700
committerYigit Boyar <yboyar@google.com>2015-10-23 04:59:05 +0000
commitbdc7aa8269502b3fc3ce73c124e4f1b2092502c9 (patch)
treed9bb301d5bab9391daa83a10f0e651abecb3af84 /compiler/src/main
parentda97a54b679e19f4f40e23d290816093870956af (diff)
downloaddata-binding-bdc7aa8269502b3fc3ce73c124e4f1b2092502c9.tar.gz
Use a dynamically-generated class to relax requirement to upgrade.
We may need some static methods between releases and instead of requiring a release, we can now supply the methods as a dynamically generated class, DynamicUtil Change-Id: I9d53ae99b4b5717cd4780efdcb7a3f85bfac8dd9
Diffstat (limited to 'compiler/src/main')
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java1
-rw-r--r--compiler/src/main/java/android/databinding/tool/CompilerChef.java6
-rw-r--r--compiler/src/main/java/android/databinding/tool/expr/ResourceExpr.java4
-rw-r--r--compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt34
4 files changed, 43 insertions, 2 deletions
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
index e6d925eb..37dc2a23 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
@@ -94,6 +94,7 @@ public class ProcessDataBinding extends AbstractProcessor {
mLibraryProject = libraryProject;
mMinSdk = minSdk;
considerWritingMapper();
+ mChef.writeDynamicUtil();
}
private void considerWritingMapper() {
diff --git a/compiler/src/main/java/android/databinding/tool/CompilerChef.java b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
index df36560c..d4bfb59a 100644
--- a/compiler/src/main/java/android/databinding/tool/CompilerChef.java
+++ b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
@@ -17,6 +17,7 @@ import android.databinding.tool.store.ResourceBundle;
import android.databinding.tool.util.L;
import android.databinding.tool.writer.BRWriter;
import android.databinding.tool.writer.DataBinderWriter;
+import android.databinding.tool.writer.DynamicUtilWriter;
import android.databinding.tool.writer.JavaFileWriter;
import java.util.Set;
@@ -68,6 +69,11 @@ public class CompilerChef {
mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write(brWriter));
}
+ public void writeDynamicUtil() {
+ DynamicUtilWriter dynamicUtil = new DynamicUtilWriter();
+ mFileWriter.writeToFile("android.databinding.DynamicUtil", dynamicUtil.write());
+ }
+
/**
* Adds variables to list of Bindables.
*/
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 514fbc79..bdb9450c 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 "getColorStateListFromResource(" + resourceName + ")";
+ if ("colorStateList".equals(mResourceType)) return "android.databinding.DynamicUtil.getColorStateListFromResource(getRoot(), " + 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 "getDrawableFromResource(" + resourceName + ")";
+ if ("drawable".equals(mResourceType)) return "android.databinding.DynamicUtil.getDrawableFromResource(getRoot(), " + resourceName + ")";
if ("fraction".equals(mResourceType)) {
String base = getChildCode(0, "1");
String pbase = getChildCode(1, "1");
diff --git a/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt b/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt
new file mode 100644
index 00000000..1fa5a500
--- /dev/null
+++ b/compiler/src/main/kotlin/android/databinding/tool/writer/DynamicUtilWriter.kt
@@ -0,0 +1,34 @@
+package android.databinding.tool.writer
+
+
+class DynamicUtilWriter() {
+ public fun write() : String {
+ return """
+package android.databinding;
+
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.view.View;
+
+public class DynamicUtil {
+ public static ColorStateList getColorStateListFromResource(View root, int resourceId) {
+ if (VERSION.SDK_INT >= VERSION_CODES.M) {
+ return root.getContext().getColorStateList(resourceId);
+ } else {
+ return root.getResources().getColorStateList(resourceId);
+ }
+ }
+
+ public static Drawable getDrawableFromResource(View root, int resourceId) {
+ if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
+ return root.getContext().getDrawable(resourceId);
+ } else {
+ return root.getResources().getDrawable(resourceId);
+ }
+ }
+}
+"""
+ }
+} \ No newline at end of file