1612997fe2e41366573855f56898b27d4c8787244George Mount/*
2612997fe2e41366573855f56898b27d4c8787244George Mount * Copyright (C) 2015 The Android Open Source Project
3612997fe2e41366573855f56898b27d4c8787244George Mount *
4612997fe2e41366573855f56898b27d4c8787244George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5612997fe2e41366573855f56898b27d4c8787244George Mount * you may not use this file except in compliance with the License.
6612997fe2e41366573855f56898b27d4c8787244George Mount * You may obtain a copy of the License at
7612997fe2e41366573855f56898b27d4c8787244George Mount *
8612997fe2e41366573855f56898b27d4c8787244George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9612997fe2e41366573855f56898b27d4c8787244George Mount *
10612997fe2e41366573855f56898b27d4c8787244George Mount * Unless required by applicable law or agreed to in writing, software
11612997fe2e41366573855f56898b27d4c8787244George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12612997fe2e41366573855f56898b27d4c8787244George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13612997fe2e41366573855f56898b27d4c8787244George Mount * See the License for the specific language governing permissions and
14612997fe2e41366573855f56898b27d4c8787244George Mount * limitations under the License.
15612997fe2e41366573855f56898b27d4c8787244George Mount */
16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.adapters;
17612997fe2e41366573855f56898b27d4c8787244George Mount
18716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.BindingAdapter;
19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.BindingMethod;
20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.BindingMethods;
213b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.InverseBindingListener;
223b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.InverseBindingMethod;
233b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.InverseBindingMethods;
24716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.CompoundButton;
25716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.CompoundButton.OnCheckedChangeListener;
263561e3e665698843b1c664385a842e779198960bGeorge Mount
273561e3e665698843b1c664385a842e779198960bGeorge Mount@BindingMethods({
28716ba89e7f459f49ea85070d4710c1d79d715298George Mount        @BindingMethod(type = CompoundButton.class, attribute = "android:buttonTint", method = "setButtonTintList"),
29716ba89e7f459f49ea85070d4710c1d79d715298George Mount        @BindingMethod(type = CompoundButton.class, attribute = "android:onCheckedChanged", method = "setOnCheckedChangeListener"),
303561e3e665698843b1c664385a842e779198960bGeorge Mount})
313b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount@InverseBindingMethods({
323b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        @InverseBindingMethod(type = CompoundButton.class, attribute = "android:checked"),
333b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount})
343561e3e665698843b1c664385a842e779198960bGeorge Mountpublic class CompoundButtonBindingAdapter {
353b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
363b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @BindingAdapter("android:checked")
373b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static void setChecked(CompoundButton view, boolean checked) {
383b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (view.isChecked() != checked) {
393b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            view.setChecked(checked);
403b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
413b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
423b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
433b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @BindingAdapter(value = {"android:onCheckedChanged", "android:checkedAttrChanged"},
443b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            requireAll = false)
453b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static void setListeners(CompoundButton view, final OnCheckedChangeListener listener,
463b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            final InverseBindingListener attrChange) {
473b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (attrChange == null) {
483b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            view.setOnCheckedChangeListener(listener);
493b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
503b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
513b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                @Override
523b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
533b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    if (listener != null) {
543b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                        listener.onCheckedChanged(buttonView, isChecked);
553b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    }
563b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    attrChange.onChange();
573b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                }
583b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            });
593b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
603b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
613b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
62612997fe2e41366573855f56898b27d4c8787244George Mount}
63