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 19518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viveretteimport android.annotation.Nullable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.Widget; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 22f5926962cc665d4a2e6464f9ba9e3e9788496a6fSvetoslav Ganovimport android.content.res.Configuration; 234243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganovimport android.content.res.TypedArray; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 268a2a89588c3889b999a8fffa2d7c7a5c3ce25eb8Svetoslav Ganovimport android.view.accessibility.AccessibilityEvent; 278a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganovimport android.view.accessibility.AccessibilityNodeInfo; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29a53efe9923bedab4fe5d578f32eaff308e5b9e76Svetoslav Ganovimport com.android.internal.R; 30a53efe9923bedab4fe5d578f32eaff308e5b9e76Svetoslav Ganov 31f5926962cc665d4a2e6464f9ba9e3e9788496a6fSvetoslav Ganovimport java.util.Locale; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 344243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * A view for selecting the time of day, in either 24 hour or AM/PM mode. The 354243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * hour, each minute digit, and AM/PM (if applicable) can be conrolled by 364243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * vertical spinners. The hour can be entered by keyboard input. Entering in two 374243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * digit hours can be accomplished by hitting two digits within a timeout of 384243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * about a second (e.g. '1' then '2' to select 12). The minutes can be entered 394243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * by entering single digits. Under AM/PM mode, the user can hit 'a', 'A", 'p' 404243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * or 'P' to pick. For a dialog using this view, see 414243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * {@link android.app.TimePickerDialog}. 425134478151d8aa3d776f8d4f368dbcdbc501a92aAlan Viverette * <p> 434c359b76f9a030f92a302ba74a528faa170bad4eScott Main * See the <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a> 444c359b76f9a030f92a302ba74a528faa170bad4eScott Main * guide. 454243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov * </p> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Widget 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TimePicker extends FrameLayout { 493053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase private static final int MODE_SPINNER = 1; 503053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase private static final int MODE_CLOCK = 2; 513053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase 525134478151d8aa3d776f8d4f368dbcdbc501a92aAlan Viverette private final TimePickerDelegate mDelegate; 53eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio 549e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 559e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * The callback interface used to indicate the time has been adjusted. 569e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 579e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public interface OnTimeChangedListener { 589e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 599e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 609e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @param view The view associated with this listener. 619e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @param hourOfDay The current hour. 629e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @param minute The current minute. 639e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 649e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onTimeChanged(TimePicker view, int hourOfDay, int minute); 659e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 669e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 679e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public TimePicker(Context context) { 689e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio this(context, null); 699e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 709e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 719e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public TimePicker(Context context, AttributeSet attrs) { 729e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio this(context, attrs, R.attr.timePickerStyle); 739e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 749e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 75617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public TimePicker(Context context, AttributeSet attrs, int defStyleAttr) { 76617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette this(context, attrs, defStyleAttr, 0); 77617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette } 78617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 79617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public TimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 80617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette super(context, attrs, defStyleAttr, defStyleRes); 81eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio 825134478151d8aa3d776f8d4f368dbcdbc501a92aAlan Viverette final TypedArray a = context.obtainStyledAttributes( 835134478151d8aa3d776f8d4f368dbcdbc501a92aAlan Viverette attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes); 84518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette final int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER); 85dfaa6c7439d1506b2450005a6c1e0be6771eb9e5Fabrice Di Meglio a.recycle(); 86dfaa6c7439d1506b2450005a6c1e0be6771eb9e5Fabrice Di Meglio 873053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase switch (mode) { 883053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase case MODE_CLOCK: 89daf33ed85353ab7d7a7668dd0e3f9a66f0d5583fAlan Viverette mDelegate = new TimePickerClockDelegate( 903053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase this, context, attrs, defStyleAttr, defStyleRes); 913053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase break; 923053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase case MODE_SPINNER: 933053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase default: 94daf33ed85353ab7d7a7668dd0e3f9a66f0d5583fAlan Viverette mDelegate = new TimePickerSpinnerDelegate( 953053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase this, context, attrs, defStyleAttr, defStyleRes); 963053b2fdcf7486f2e2f572f9b05ce65dacdd2b4cChet Haase break; 97dfaa6c7439d1506b2450005a6c1e0be6771eb9e5Fabrice Di Meglio } 989e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 999e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1009e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1019e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * Set the current hour. 1029e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1039e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void setCurrentHour(Integer currentHour) { 1049e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.setCurrentHour(currentHour); 1059e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1069e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1079e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1089e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @return The current hour in the range (0-23). 1099e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1109e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public Integer getCurrentHour() { 1119e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.getCurrentHour(); 1129e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1139e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1149e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1159e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * Set the current minute (0-59). 1169e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1179e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void setCurrentMinute(Integer currentMinute) { 1189e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.setCurrentMinute(currentMinute); 1199e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1209e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1219e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1229e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @return The current minute. 1239e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1249e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public Integer getCurrentMinute() { 1259e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.getCurrentMinute(); 1269e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1279e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1289e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1299e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * Set whether in 24 hour or AM/PM mode. 1309e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * 1319e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @param is24HourView True = 24 hour mode. False = AM/PM. 1329e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1339e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void setIs24HourView(Boolean is24HourView) { 1349e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.setIs24HourView(is24HourView); 1359e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1369e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 1379e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 1389e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @return true if this is in 24 hour view else false. 1399e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 1409e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public boolean is24HourView() { 1419e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.is24HourView(); 1429e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1434243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1459e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * Set the callback that indicates the time has been adjusted by the user. 1469e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * 1479e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * @param onTimeChangedListener the callback, should not be null. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) { 1509e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.setOnTimeChangedListener(onTimeChangedListener); 1519e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1529e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 153518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette /** 154518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * Sets the callback that indicates the current time is valid. 155518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * 156518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * @param callback the callback, may be null 157518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * @hide 158518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette */ 159518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette public void setValidationCallback(@Nullable ValidationCallback callback) { 160518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette mDelegate.setValidationCallback(callback); 161518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette } 162518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette 1639e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1649e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void setEnabled(boolean enabled) { 1659e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.setEnabled(enabled); 1669e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.setEnabled(enabled); 1679e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1684243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1699e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1709e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public boolean isEnabled() { 1719e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.isEnabled(); 1729e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1734243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1749e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1759e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public int getBaseline() { 1769e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.getBaseline(); 1779e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1809e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio protected void onConfigurationChanged(Configuration newConfig) { 1819e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.onConfigurationChanged(newConfig); 1829e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.onConfigurationChanged(newConfig); 1839e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1844243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1859e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1869e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio protected Parcelable onSaveInstanceState() { 1879e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio Parcelable superState = super.onSaveInstanceState(); 1889e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.onSaveInstanceState(superState); 1899e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1904243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1919e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1929e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio protected void onRestoreInstanceState(Parcelable state) { 193eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio BaseSavedState ss = (BaseSavedState) state; 1949e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.onRestoreInstanceState(ss.getSuperState()); 1959e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.onRestoreInstanceState(ss); 1969e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 1974243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 1989e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 1999e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 2009e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return mDelegate.dispatchPopulateAccessibilityEvent(event); 2019e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 2026304b0d58e74509a9f21b67b5227b2fee2f1b60fSvetoslav Ganov 2039e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 2049e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void onPopulateAccessibilityEvent(AccessibilityEvent event) { 2059e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.onPopulateAccessibilityEvent(event); 2069e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.onPopulateAccessibilityEvent(event); 2079e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 2086304b0d58e74509a9f21b67b5227b2fee2f1b60fSvetoslav Ganov 2099e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 2109e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 2119e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.onInitializeAccessibilityEvent(event); 2129e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.onInitializeAccessibilityEvent(event); 2139e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 2146304b0d58e74509a9f21b67b5227b2fee2f1b60fSvetoslav Ganov 2159e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio @Override 2169e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 2179e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio super.onInitializeAccessibilityNodeInfo(info); 2189e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegate.onInitializeAccessibilityNodeInfo(info); 2199e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 2209e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 2219e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio /** 2229e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * A delegate interface that defined the public API of the TimePicker. Allows different 2239e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * TimePicker implementations. This would need to be implemented by the TimePicker delegates 2249e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio * for the real behavior. 2259e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio */ 226eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio interface TimePickerDelegate { 2279e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void setCurrentHour(Integer currentHour); 2289e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio Integer getCurrentHour(); 229206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 2309e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void setCurrentMinute(Integer currentMinute); 2319e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio Integer getCurrentMinute(); 2324243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 2339e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void setIs24HourView(Boolean is24HourView); 2349e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio boolean is24HourView(); 235206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 2369e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener); 237518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette void setValidationCallback(ValidationCallback callback); 23851c52edad7d40697d7fb2a091f850506fa897643Svetoslav Ganov 2399e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void setEnabled(boolean enabled); 2409e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio boolean isEnabled(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio int getBaseline(); 2438a2a89588c3889b999a8fffa2d7c7a5c3ce25eb8Svetoslav Ganov 2449e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onConfigurationChanged(Configuration newConfig); 245f5926962cc665d4a2e6464f9ba9e3e9788496a6fSvetoslav Ganov 2469e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio Parcelable onSaveInstanceState(Parcelable superState); 2479e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onRestoreInstanceState(Parcelable state); 2489e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 2499e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event); 2509e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onPopulateAccessibilityEvent(AccessibilityEvent event); 2519e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onInitializeAccessibilityEvent(AccessibilityEvent event); 2529e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info); 2539e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 25464902bd89ea0630a59eb61345061002e9895af84Fabrice Di Meglio 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 256518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * A callback interface for updating input validity when the TimePicker 257518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette * when included into a Dialog. 258eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio * 259eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio * @hide 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 261518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette public static interface ValidationCallback { 262518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette void onValidationChanged(boolean valid); 263eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio } 2649e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 265eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio /** 266eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio * An abstract class which can be used as a start for TimePicker implementations 267eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio */ 268eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio abstract static class AbstractTimePickerDelegate implements TimePickerDelegate { 269eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio // The delegator 270eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio protected TimePicker mDelegator; 2719e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 272eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio // The context 273eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio protected Context mContext; 2749e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 275eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio // The current locale 276eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio protected Locale mCurrentLocale; 2779e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio 278eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio // Callbacks 279518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette protected OnTimeChangedListener mOnTimeChangedListener; 280518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette protected ValidationCallback mValidationCallback; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 282eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio public AbstractTimePickerDelegate(TimePicker delegator, Context context) { 2839e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mDelegator = delegator; 284eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio mContext = context; 2854243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 2869e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio // initialization based on locale 2879e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio setCurrentLocale(Locale.getDefault()); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2894243dc394d89a93cb207efa36e9755c2424d688bSvetoslav Ganov 290eeff63a5c347f282b5c8c3ae6a0924bf03fbce8fFabrice Di Meglio public void setCurrentLocale(Locale locale) { 2919e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio if (locale.equals(mCurrentLocale)) { 2929e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio return; 2939e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 2949e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio mCurrentLocale = locale; 2959e4009ea150a7020fb8cf315281679979e67e762Fabrice Di Meglio } 296518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette 297518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette @Override 298518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette public void setValidationCallback(ValidationCallback callback) { 299518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette mValidationCallback = callback; 300518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette } 301518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette 302518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette protected void onValidationChanged(boolean valid) { 303518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette if (mValidationCallback != null) { 304518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette mValidationCallback.onValidationChanged(valid); 305518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette } 306518ff0de95e64116ecb07706fc564d4c19197ca7Alan Viverette } 3073fec3fe0e3a83c5e0d1264f34bcc55b158537bc6Svetoslav Ganov } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 309