diff options
author | Yigit Boyar <yboyar@google.com> | 2015-04-30 22:55:28 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-30 22:55:28 +0000 |
commit | 3a991cdd22ac12c7db0233b94e3bfc3e54fbf970 (patch) | |
tree | 3d65b0fbb8b70b71996d73ae0e210388065dcd64 /integration-tests/TestApp/app/src/main | |
parent | d37fd3b4670aa973400cd02e7a977db8c49cb022 (diff) | |
parent | e9b33bac04bb1ce1444d7f1744fcec1ecd3a57da (diff) | |
download | data-binding-3a991cdd22ac12c7db0233b94e3bfc3e54fbf970.tar.gz |
Merge "Support multi-param adapters in code generation"
Diffstat (limited to 'integration-tests/TestApp/app/src/main')
4 files changed, 245 insertions, 0 deletions
diff --git a/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/adapter/MultiArgTestAdapter.java b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/adapter/MultiArgTestAdapter.java new file mode 100644 index 00000000..a2702798 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/adapter/MultiArgTestAdapter.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.databinding.testapp.adapter; + + +import android.databinding.BaseObservable; +import android.databinding.Bindable; +import android.databinding.BindingAdapter; +import android.view.View; +import android.databinding.testapp.BR; +import android.widget.TextView; + +import org.apache.commons.lang3.StringUtils; + +public class MultiArgTestAdapter { + + public static String join(BaseMultiBindingClass... classes) { + StringBuilder sb = new StringBuilder(); + for(BaseMultiBindingClass instance : classes) { + sb.append(instance == null ? "??" : instance.getValue()); + } + return sb.toString(); + } + + public static String join(String... strings) { + StringBuilder sb = new StringBuilder(); + for(String str : strings) { + sb.append(str == null ? "??" : str); + } + return sb.toString(); + + } + + @BindingAdapter(attributes={"android:class1", "android:class2"}) + public static void setBoth(TextView view, MultiBindingClass1 class1, + MultiBindingClass2 class2) { + view.setText(join(class1, class2)); + } + + @BindingAdapter(attributes={"android:class1str", "android:class2str"}) + public static void setBoth(TextView view, String str1, + String str2) { + view.setText(join(str1, str2)); + } + + @BindingAdapter(attributes={"android:class1"}) + public static void setClass1(TextView view, MultiBindingClass1 class1) { + view.setText(class1.getValue()); + } + + @BindingAdapter(attributes={"android:classStr"}) + public static void setClassStr(TextView view, String str) { + view.setText(str); + } + + @BindingAdapter(attributes={"android:class2"}) + public static void setClass2(TextView view, MultiBindingClass2 class2) { + view.setText(class2.getValue()); + } + + public static class MultiBindingClass1 extends BaseMultiBindingClass { + + } + + public static class MultiBindingClass2 extends BaseMultiBindingClass { + + } + + public static class BaseMultiBindingClass extends BaseObservable { + View mSetOn; + @Bindable + String mValue; + public View getSetOn() { + return mSetOn; + } + + public String getValue() { + return mValue; + } + + public void setValue(String value, boolean notify) { + mValue = value; + if (notify) { + notifyPropertyChanged(BR.value); + } + } + + public void clear() { + mSetOn = null; + } + } +} diff --git a/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/MultiAdapterSetterObj.java b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/MultiAdapterSetterObj.java new file mode 100644 index 00000000..c23a41a8 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/java/android/databinding/testapp/vo/MultiAdapterSetterObj.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.databinding.testapp.vo; + +import android.view.View; + +public class MultiAdapterSetterObj { + public boolean isClickable; + public View.OnClickListener onClickListener = new View.OnClickListener() { + @Override + public void onClick(View view) { + + } + }; +} diff --git a/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_evaluation_test.xml b/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_evaluation_test.xml new file mode 100644 index 00000000..2fbe6a73 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_evaluation_test.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:bind="http://schemas.android.com/apk/res-auto"> + + <data> + + <variable + name="obj1" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass1" /> + + <variable + name="obj2" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass2" /> + </data> + + <LinearLayout + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/merged" + android:class1str="@{obj1.value}" + android:class2str="@{obj2.value}" /> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/view2" + android:text="@{obj2.value}" /> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/view2text" + android:classStr="@{obj2.value}" /> + </LinearLayout> +</layout>
\ No newline at end of file diff --git a/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_test.xml b/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_test.xml new file mode 100644 index 00000000..fd8d4411 --- /dev/null +++ b/integration-tests/TestApp/app/src/main/res/layout/multi_arg_adapter_test.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:bind="http://schemas.android.com/apk/res-auto"> + + <data> + + <variable + name="obj1" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass1" /> + + <variable + name="obj2" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass2" /> + + <variable + name="obj3" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass1" /> + + <variable + name="obj4" + type="android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass2" /> + </data> + + <LinearLayout + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/merged" + android:class1="@{obj1}" + android:class2="@{obj2}" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/view3" + android:class1="@{obj3}" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/view4" + android:class2="@{obj4}" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/view2" + android:class2="@{obj2}" /> + </LinearLayout> +</layout>
\ No newline at end of file |