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