diff options
author | George Mount <mount@google.com> | 2015-10-22 17:37:47 -0700 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2015-10-23 04:59:05 +0000 |
commit | bdc7aa8269502b3fc3ce73c124e4f1b2092502c9 (patch) | |
tree | d9bb301d5bab9391daa83a10f0e651abecb3af84 /compiler/src/main | |
parent | da97a54b679e19f4f40e23d290816093870956af (diff) | |
download | data-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')
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 |