From 2af44f84171dbe5e2156e7dfae776f17068b00dc Mon Sep 17 00:00:00 2001 From: George Mount Date: Mon, 23 Feb 2015 16:18:38 -0800 Subject: [PATCH] Add fraction resource parameters. --- .../databinding/testapp/ResourceTest.java | 20 +++++++++++++++++++ .../src/main/res/layout/resource_test.xml | 17 ++++++++++++++++ .../TestApp/src/main/res/values/fractions.xml | 20 +++++++++++++++++++ .../databinding/expr/ResourceExpr.java | 15 +++++++++++++- 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tools/data-binding/TestApp/src/main/res/values/fractions.xml diff --git a/tools/data-binding/TestApp/src/androidTest/java/com/android/databinding/testapp/ResourceTest.java b/tools/data-binding/TestApp/src/androidTest/java/com/android/databinding/testapp/ResourceTest.java index 79e44dbb98011..2770c4613be40 100644 --- a/tools/data-binding/TestApp/src/androidTest/java/com/android/databinding/testapp/ResourceTest.java +++ b/tools/data-binding/TestApp/src/androidTest/java/com/android/databinding/testapp/ResourceTest.java @@ -32,6 +32,8 @@ public class ResourceTest extends BaseDataBinderTest { mBinder.setCount(0); mBinder.setTitle("Mrs."); mBinder.setLastName("Doubtfire"); + mBinder.setBase(2); + mBinder.setPbase(3); try { runTestOnUiThread(new Runnable() { @Override @@ -63,4 +65,22 @@ public class ResourceTest extends BaseDataBinderTest { mBinder.rebindDirty(); assertEquals("orange", view.getText().toString()); } + + @UiThreadTest + public void testFractionNoParameters() throws Throwable { + TextView view = mBinder.getFractionNoParameters(); + assertEquals("1.5", view.getText().toString()); + } + + @UiThreadTest + public void testFractionOneParameter() throws Throwable { + TextView view = mBinder.getFractionOneParameter(); + assertEquals("3.0", view.getText().toString()); + } + + @UiThreadTest + public void testFractionTwoParameters() throws Throwable { + TextView view = mBinder.getFractionTwoParameters(); + assertEquals("9.0", view.getText().toString()); + } } diff --git a/tools/data-binding/TestApp/src/main/res/layout/resource_test.xml b/tools/data-binding/TestApp/src/main/res/layout/resource_test.xml index 1c77c39cc591a..dd5977158abe7 100644 --- a/tools/data-binding/TestApp/src/main/res/layout/resource_test.xml +++ b/tools/data-binding/TestApp/src/main/res/layout/resource_test.xml @@ -8,6 +8,8 @@ + + + + + \ No newline at end of file diff --git a/tools/data-binding/TestApp/src/main/res/values/fractions.xml b/tools/data-binding/TestApp/src/main/res/values/fractions.xml new file mode 100644 index 0000000000000..8817316eaeae8 --- /dev/null +++ b/tools/data-binding/TestApp/src/main/res/values/fractions.xml @@ -0,0 +1,20 @@ + + + + + + 150% + 300%p + + diff --git a/tools/data-binding/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java b/tools/data-binding/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java index b2ba757be46b4..555fdd7b4f762 100644 --- a/tools/data-binding/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java +++ b/tools/data-binding/compiler/src/main/java/com/android/databinding/expr/ResourceExpr.java @@ -149,7 +149,12 @@ public class ResourceExpr extends Expr { case "dimenOffset": return resources + ".getDimensionPixelOffset(" + resourceName + ")"; case "dimenSize": return resources + ".getDimensionPixelSize(" + resourceName + ")"; case "drawable": return resources + ".getDrawable(" + resourceName + ")"; - case "fraction": return resources + ".getFraction(" + resourceName + ", 1, 1)"; + case "fraction": { + String base = getChildCode(0, "1"); + String pbase = getChildCode(1, "1"); + return resources + ".getFraction(" + resourceName + ", " + base + ", " + pbase + + ")"; + } case "id": return resourceName; case "intArray": return resources + ".getIntArray(" + resourceName + ")"; case "integer": return resources + ".getInteger(" + resourceName + ")"; @@ -174,6 +179,14 @@ public class ResourceExpr extends Expr { } + private String getChildCode(int childIndex, String defaultValue) { + if (getChildren().size() <= childIndex) { + return defaultValue; + } else { + return WriterPackage.toCode(getChildren().get(childIndex), false).generate(); + } + } + private String makeParameterCall(String resourceName, String methodCall) { StringBuilder sb = new StringBuilder("getRoot().getResources()."); sb.append(methodCall).append("(").append(resourceName);