1e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar/*
2e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Copyright (C) 2015 The Android Open Source Project
3e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
4e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * you may not use this file except in compliance with the License.
5e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * You may obtain a copy of the License at
6e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
7e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Unless required by applicable law or agreed to in writing, software
8e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
9e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * See the License for the specific language governing permissions and
11e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * limitations under the License.
12e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar */
13e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
14e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpackage android.databinding.testapp.adapter;
15e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
16e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
17e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.BaseObservable;
18e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.Bindable;
19e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.BindingAdapter;
20e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.view.View;
21e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.testapp.BR;
22e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.widget.TextView;
23e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
24e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpublic class MultiArgTestAdapter {
25e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
26e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static String join(BaseMultiBindingClass... classes) {
27e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        StringBuilder sb = new StringBuilder();
28e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        for(BaseMultiBindingClass instance : classes) {
29e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            sb.append(instance == null ? "??" : instance.getValue());
30e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
31e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        return sb.toString();
32e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
33e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
34e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static String join(String... strings) {
35e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        StringBuilder sb = new StringBuilder();
36e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        for(String str : strings) {
37e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            sb.append(str == null ? "??" : str);
38e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
39e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        return sb.toString();
40e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
41e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
42e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
4310960eb5f73fd587c2f8d18cfc61873c04017512George Mount    @BindingAdapter({"android:class1", "android:class2"})
44e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static void setBoth(TextView view, MultiBindingClass1 class1,
45e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar                                        MultiBindingClass2 class2) {
46e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        view.setText(join(class1, class2));
47e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
48e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
4910960eb5f73fd587c2f8d18cfc61873c04017512George Mount    @BindingAdapter({"android:class1str", "android:class2str"})
50e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static void setBoth(TextView view, String str1,
51e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar                               String str2) {
52e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        view.setText(join(str1, str2));
53e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
54e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
5510960eb5f73fd587c2f8d18cfc61873c04017512George Mount    @BindingAdapter({"android:class1"})
56e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static void setClass1(TextView view, MultiBindingClass1 class1) {
57e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        view.setText(class1.getValue());
58e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
59e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
6010960eb5f73fd587c2f8d18cfc61873c04017512George Mount    @BindingAdapter({"android:classStr"})
61e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static void setClassStr(TextView view, String str) {
62e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        view.setText(str);
63e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
64e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
6520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    @BindingAdapter("android:class2")
66e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static void setClass2(TextView view, MultiBindingClass2 class2) {
67e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        view.setText(class2.getValue());
68e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
69e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
7020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    @BindingAdapter("android:val3")
7120c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    public static void setWithOldValue(TextView view, String oldValue, String newValue) {
7220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount        view.setText(String.format("%s -> %s", oldValue, newValue));
7320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    }
7420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount
7520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    @BindingAdapter({"android:val3", "android:val4"})
7620c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    public static void set2WithOldValues(TextView view, String oldValue1, String oldValue2,
7720c7182163d99575d382e065f5a5fe45ed6b87e2George Mount            String newValue1, String newValue2) {
7820c7182163d99575d382e065f5a5fe45ed6b87e2George Mount        view.setText(String.format("%s, %s -> %s, %s", oldValue1, oldValue2, newValue1, newValue2));
7920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount    }
8020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount
81e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static class MultiBindingClass1 extends BaseMultiBindingClass {
82e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
83e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
84e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
85e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static class MultiBindingClass2 extends BaseMultiBindingClass {
86e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
87e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
88e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
89e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    public static class BaseMultiBindingClass extends BaseObservable {
90e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        View mSetOn;
91e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        @Bindable
92e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        String mValue;
93e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        public View getSetOn() {
94e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            return mSetOn;
95e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
96e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
97e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        public String getValue() {
98e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            return mValue;
99e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
100e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
101e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        public void setValue(String value, boolean notify) {
102e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            mValue = value;
103e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            if (notify) {
104e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar                notifyPropertyChanged(BR.value);
105e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            }
106e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
107e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar
108e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        public void clear() {
109e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar            mSetOn = null;
110e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar        }
111e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar    }
112e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar}
113