1716ba89e7f459f49ea85070d4710c1d79d715298George Mount/*
2716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Copyright (C) 2015 The Android Open Source Project
3716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
4716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5716ba89e7f459f49ea85070d4710c1d79d715298George Mount * you may not use this file except in compliance with the License.
6716ba89e7f459f49ea85070d4710c1d79d715298George Mount * You may obtain a copy of the License at
7716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
8716ba89e7f459f49ea85070d4710c1d79d715298George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9716ba89e7f459f49ea85070d4710c1d79d715298George Mount *
10716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Unless required by applicable law or agreed to in writing, software
11716ba89e7f459f49ea85070d4710c1d79d715298George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12716ba89e7f459f49ea85070d4710c1d79d715298George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13716ba89e7f459f49ea85070d4710c1d79d715298George Mount * See the License for the specific language governing permissions and
14716ba89e7f459f49ea85070d4710c1d79d715298George Mount * limitations under the License.
15716ba89e7f459f49ea85070d4710c1d79d715298George Mount */
16716ba89e7f459f49ea85070d4710c1d79d715298George Mountpackage android.databinding.adapters;
17716ba89e7f459f49ea85070d4710c1d79d715298George Mount
183b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.BindingAdapter;
193b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.InverseBindingAdapter;
203b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.databinding.InverseBindingListener;
213b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.os.Build.VERSION;
223b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.os.Build.VERSION_CODES;
23716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.widget.TimePicker;
243b920788e90bb0abe615a5d5c899915f0014444bGeorge Mountimport android.widget.TimePicker.OnTimeChangedListener;
25716ba89e7f459f49ea85070d4710c1d79d715298George Mount
26716ba89e7f459f49ea85070d4710c1d79d715298George Mountpublic class TimePickerBindingAdapter {
273b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
283b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @SuppressWarnings("deprecation")
293b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @BindingAdapter("android:hour")
303b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static void setHour(TimePicker view, int hour) {
313b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (VERSION.SDK_INT >= VERSION_CODES.M) {
323b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (view.getHour() != hour) {
333b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                view.setHour(hour);
343b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
353b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
363b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (view.getCurrentHour() != hour) {
373b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                view.setCurrentHour(hour);
383b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
393b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
403b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
413b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
423b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @SuppressWarnings("deprecation")
433b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @BindingAdapter("android:minute")
443b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static void setMinute(TimePicker view, int minute) {
453b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (VERSION.SDK_INT >= VERSION_CODES.M) {
463b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (view.getMinute() != minute) {
473b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                view.setMinute(minute);
483b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
493b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
503b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (view.getCurrentMinute() != minute) {
513b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                view.setCurrentHour(minute);
523b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
533b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
543b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
553b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
563b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @InverseBindingAdapter(attribute = "android:hour")
573b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static int getHour(TimePicker view) {
583b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (VERSION.SDK_INT >= VERSION_CODES.M) {
593b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            return view.getHour();
603b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
613b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            @SuppressWarnings("deprecation")
623b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            Integer hour = view.getCurrentHour();
633b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (hour == null) {
643b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                return 0;
653b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            } else {
663b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                return hour;
673b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
683b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
693b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
703b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
713b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @InverseBindingAdapter(attribute = "android:minute")
723b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static int getMinute(TimePicker view) {
733b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (VERSION.SDK_INT >= VERSION_CODES.M) {
743b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            return view.getMinute();
753b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
763b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            @SuppressWarnings("deprecation")
773b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            Integer minute = view.getCurrentMinute();
783b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            if (minute == null) {
793b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                return 0;
803b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            } else {
813b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                return minute;
823b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            }
833b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
843b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
853b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount
863b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    @BindingAdapter(value = {"android:onTimeChanged", "android:hourAttrChanged",
873b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            "android:minuteAttrChanged"}, requireAll = false)
883b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    public static void setListeners(TimePicker view, final OnTimeChangedListener listener,
893b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            final InverseBindingListener hourChange, final InverseBindingListener minuteChange) {
903b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        if (hourChange == null && minuteChange == null) {
913b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            view.setOnTimeChangedListener(listener);
923b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        } else {
933b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            view.setOnTimeChangedListener(new OnTimeChangedListener() {
943b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                @Override
953b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
963b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    if (listener != null) {
973b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                        listener.onTimeChanged(view, hourOfDay, minute);
983b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    }
993b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    if (hourChange != null) {
1003b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                        hourChange.onChange();
1013b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    }
1023b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    if (minuteChange != null) {
1033b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                        minuteChange.onChange();
1043b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                    }
1053b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount                }
1063b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount            });
1073b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount        }
1083b920788e90bb0abe615a5d5c899915f0014444bGeorge Mount    }
109716ba89e7f459f49ea85070d4710c1d79d715298George Mount}
110