TimePicker.java revision cedc446684e94c9971c38c3206f1f224314bda2a
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganovimport com.android.internal.R; 20206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.Widget; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 234243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganovimport android.content.res.TypedArray; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 29cedc446684e94c9971c38c3206f1f224314bda2aSvetoslav Ganovimport android.widget.NumberPicker.OnValueChangeListener; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.DateFormatSymbols; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Calendar; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 354243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * A view for selecting the time of day, in either 24 hour or AM/PM mode. The 364243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * hour, each minute digit, and AM/PM (if applicable) can be conrolled by 374243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * vertical spinners. The hour can be entered by keyboard input. Entering in two 384243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * digit hours can be accomplished by hitting two digits within a timeout of 394243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * about a second (e.g. '1' then '2' to select 12). The minutes can be entered 404243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * by entering single digits. Under AM/PM mode, the user can hit 'a', 'A", 'p' 414243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * or 'P' to pick. For a dialog using this view, see 424243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * {@link android.app.TimePickerDialog}. 434243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov *<p> 444243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * See the <a href="{@docRoot} 454243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * resources/tutorials/views/hello-timepicker.html">Time Picker tutorial</a>. 464243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * </p> 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Widget 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TimePicker extends FrameLayout { 50206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 5125f84f323c607bbd9133432fd789ba29b2dcd4d4Svetoslav Ganov private static final boolean DEFAULT_ENABLED_STATE = true; 5225f84f323c607bbd9133432fd789ba29b2dcd4d4Svetoslav Ganov 534243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov private static final int HOURS_IN_HALF_DAY = 12; 544243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 564243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * A no-op callback used in the constructor to avoid null checks later in 574243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * the code. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final OnTimeChangedListener NO_OP_CHANGE_LISTENER = new OnTimeChangedListener() { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 634243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // state 654243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov private boolean mIs24HourView; 664243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsAm; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ui components 70e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov private final NumberPicker mHourSpinner; 714243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 72e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov private final NumberPicker mMinuteSpinner; 734243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 74e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov private final NumberPicker mAmPmSpinner; 754243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 76206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov private final TextView mDivider; 77206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 784243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // Note that the legacy implementation of the TimePicker is 794243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // using a button for toggling between AM/PM while the new 804243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // version uses a NumberPicker spinner. Therefore the code 814243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // accommodates these two cases to be backwards compatible. 824243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov private final Button mAmPmButton; 834243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 84206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov private final String[] mAmPmStrings; 85206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 8625f84f323c607bbd9133432fd789ba29b2dcd4d4Svetoslav Ganov private boolean mIsEnabled = DEFAULT_ENABLED_STATE; 8751c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // callbacks 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private OnTimeChangedListener mOnTimeChangedListener; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The callback interface used to indicate the time has been adjusted. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnTimeChangedListener { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view associated with this listener. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hourOfDay The current hour. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param minute The current minute. 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onTimeChanged(TimePicker view, int hourOfDay, int minute); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TimePicker(Context context) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, null); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1074243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TimePicker(Context context, AttributeSet attrs) { 1094243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov this(context, attrs, R.attr.timePickerStyle); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TimePicker(Context context, AttributeSet attrs, int defStyle) { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs, defStyle); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1154243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // process style attributes 1164243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov TypedArray attributesArray = context.obtainStyledAttributes( 1174243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov attrs, R.styleable.TimePicker, defStyle, 0); 1184243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int layoutResourceId = attributesArray.getResourceId( 1194243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov R.styleable.TimePicker_layout, R.layout.time_picker); 1204243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov attributesArray.recycle(); 1214243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1224243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov LayoutInflater inflater = (LayoutInflater) context.getSystemService( 1234243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov Context.LAYOUT_INFLATER_SERVICE); 1244243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov inflater.inflate(layoutResourceId, this, true); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // hour 127e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner = (NumberPicker) findViewById(R.id.hour); 128cedc446684e94c9971c38c3206f1f224314bda2aSvetoslav Ganov mHourSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 129e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { 1304243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (!is24HourView()) { 1314243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int minValue = mHourSpinner.getMinValue(); 1324243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int maxValue = mHourSpinner.getMaxValue(); 1334243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // toggle AM/PM if the spinner has wrapped and not in 24 1344243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // format 1354243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if ((oldVal == maxValue && newVal == minValue) 1364243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov || (oldVal == minValue && newVal == maxValue)) { 1374243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = !mIsAm; 1384243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTimeChanged(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1454243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // divider (only for the new widget style) 146206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov mDivider = (TextView) findViewById(R.id.divider); 1474243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mDivider != null) { 1484243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mDivider.setText(R.string.time_picker_separator); 1494243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 150206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 1514243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // minute 152e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); 153e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner.setMinValue(0); 154e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner.setMaxValue(59); 155e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner.setOnLongPressUpdateInterval(100); 156e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); 157cedc446684e94c9971c38c3206f1f224314bda2aSvetoslav Ganov mMinuteSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 158e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { 1594243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int minValue = mMinuteSpinner.getMinValue(); 1604243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int maxValue = mMinuteSpinner.getMaxValue(); 1614243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (oldVal == maxValue && newVal == minValue) { 1624243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int currentHour = mHourSpinner.getValue(); 1634243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // toggle AM/PM if the spinner is about to wrap 1644243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (!is24HourView() && currentHour == mHourSpinner.getMaxValue()) { 1654243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = !mIsAm; 1664243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 167206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov } 1684243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mHourSpinner.setValue(currentHour + 1); 1694243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else if (oldVal == minValue && newVal == maxValue) { 1704243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int currentHour = mHourSpinner.getValue(); 1714243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // toggle AM/PM if the spinner is about to wrap 1724243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (!is24HourView() && currentHour == mHourSpinner.getMinValue()) { 1734243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = !mIsAm; 1744243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1764243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mHourSpinner.setValue(currentHour - 1); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTimeChanged(); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 181206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 182206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov /* Get the localized am/pm strings and use them in the spinner */ 183206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov mAmPmStrings = new DateFormatSymbols().getAmPmStrings(); 184206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 1854243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // am/pm 1864243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov View amPmView = findViewById(R.id.amPm); 1874243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (amPmView instanceof Button) { 1884243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner = null; 1894243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton = (Button) amPmView; 1904243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton.setOnClickListener(new OnClickListener() { 1914243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov public void onClick(View button) { 1924243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov button.requestFocus(); 1934243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = !mIsAm; 1944243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 1954243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 1964243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov }); 1974243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 1984243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton = null; 1994243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner = (NumberPicker) amPmView; 2004243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setMinValue(0); 2014243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setMaxValue(1); 2024243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setDisplayedValues(mAmPmStrings); 203cedc446684e94c9971c38c3206f1f224314bda2aSvetoslav Ganov mAmPmSpinner.setOnValueChangedListener(new OnValueChangeListener() { 2044243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 2054243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov picker.requestFocus(); 2064243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = !mIsAm; 2074243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 2084243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 2094243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov }); 2104243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 2114243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 2124243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // update controls to initial state 2134243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateHourControl(); 2144243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 215206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 216206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov // initialize to current time 2174243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov Calendar calendar = Calendar.getInstance(); 218206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov setOnTimeChangedListener(NO_OP_CHANGE_LISTENER); 219206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 2204243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // set to current time 2214243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); 2224243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov setCurrentMinute(calendar.get(Calendar.MINUTE)); 223206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isEnabled()) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setEnabled(false); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22850f34d14f6dd3411fdbdb6a7b8b285c2b8fdbf5cSvetoslav Ganov 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEnabled(boolean enabled) { 23151c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov if (mIsEnabled == enabled) { 23251c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov return; 23351c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setEnabled(enabled); 235e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mMinuteSpinner.setEnabled(enabled); 2364243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mDivider != null) { 2374243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mDivider.setEnabled(enabled); 2384243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 239e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setEnabled(enabled); 2404243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mAmPmSpinner != null) { 2414243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setEnabled(enabled); 2424243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 2434243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton.setEnabled(enabled); 2444243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 24551c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov mIsEnabled = enabled; 24651c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov } 24751c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov 24851c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov @Override 24951c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov public boolean isEnabled() { 25051c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov return mIsEnabled; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to save / restore state of time picker 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class SavedState extends BaseSavedState { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final int mHour; 2594243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final int mMinute; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SavedState(Parcelable superState, int hour, int minute) { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(superState); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHour = hour; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMinute = minute; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2674243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SavedState(Parcel in) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(in); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHour = in.readInt(); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMinute = in.readInt(); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getHour() { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHour; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMinute() { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMinute; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.writeToParcel(dest, flags); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mHour); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mMinute); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov @SuppressWarnings("unused") 2904243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SavedState createFromParcel(Parcel in) { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SavedState(in); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SavedState[] newArray(int size) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SavedState[size]; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Parcelable onSaveInstanceState() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable superState = super.onSaveInstanceState(); 3044243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return new SavedState(superState, getCurrentHour(), getCurrentMinute()); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Parcelable state) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SavedState ss = (SavedState) state; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(ss.getSuperState()); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCurrentHour(ss.getHour()); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCurrentMinute(ss.getMinute()); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the callback that indicates the time has been adjusted by the user. 3174243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param onTimeChangedListener the callback, should not be null. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOnTimeChangedListener = onTimeChangedListener; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3254243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * @return The current hour in the range (0-23). 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Integer getCurrentHour() { 3284243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int currentHour = mHourSpinner.getValue(); 3294243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (is24HourView() || mIsAm) { 3304243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return currentHour; 3314243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 3324243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return (currentHour == HOURS_IN_HALF_DAY) ? 0 : currentHour + HOURS_IN_HALF_DAY; 3334243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the current hour. 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCurrentHour(Integer currentHour) { 3404243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // why was Integer used in the first place? 3414243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (currentHour == null || currentHour == getCurrentHour()) { 3424243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return; 3434243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 3444243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (!is24HourView()) { 3454243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // convert [0,23] ordinal to wall clock display 3464243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (currentHour > HOURS_IN_HALF_DAY) { 3474243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov currentHour -= HOURS_IN_HALF_DAY; 3484243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = false; 3494243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 3504243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (currentHour == 0) { 3514243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov currentHour = HOURS_IN_HALF_DAY; 3524243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 3534243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIsAm = true; 3544243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 3554243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 3564243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 3574243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mHourSpinner.setValue(currentHour); 3584243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov onTimeChanged(); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set whether in 24 hour or AM/PM mode. 3634243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param is24HourView True = 24 hour mode. False = AM/PM. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIs24HourView(Boolean is24HourView) { 3674243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mIs24HourView == is24HourView) { 3684243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3704243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mIs24HourView = is24HourView; 3714243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // cache the current hour since spinner range changes 3724243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int currentHour = getCurrentHour(); 3734243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateHourControl(); 3744243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov // set value after spinner range is updated 3754243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov setCurrentHour(currentHour); 3764243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov updateAmPmControl(); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if this is in 24 hour view else false. 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean is24HourView() { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIs24HourView; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3854243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The current minute. 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Integer getCurrentMinute() { 3904243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return mMinuteSpinner.getValue(); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the current minute (0-59). 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCurrentMinute(Integer currentMinute) { 3974243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (currentMinute == getCurrentMinute()) { 3984243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov return; 3994243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 4004243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mMinuteSpinner.setValue(currentMinute); 4014243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov onTimeChanged(); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getBaseline() { 406e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov return mHourSpinner.getBaseline(); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4094243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov private void updateHourControl() { 4104243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (is24HourView()) { 411e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setMinValue(0); 412e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setMaxValue(23); 413e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 415e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setMinValue(1); 416e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setMaxValue(12); 417e9730bf3d2dcbea1879f24c18aaf9810ac57084cSvetoslav Ganov mHourSpinner.setFormatter(null); 4184243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 4194243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 4204243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 4214243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov private void updateAmPmControl() { 4224243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (is24HourView()) { 4234243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mAmPmSpinner != null) { 4244243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setVisibility(View.GONE); 4254243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 4264243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton.setVisibility(View.GONE); 4274243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 4284243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 4294243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov int index = mIsAm ? Calendar.AM : Calendar.PM; 4304243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov if (mAmPmSpinner != null) { 4314243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setValue(index); 4324243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmSpinner.setVisibility(View.VISIBLE); 4334243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } else { 4344243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton.setText(mAmPmStrings[index]); 4354243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov mAmPmButton.setVisibility(View.VISIBLE); 4364243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void onTimeChanged() { 441206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov if (mOnTimeChangedListener != null) { 442206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute()); 443206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 446