TimePickerDialog.java revision 206316a61f904ea0a6b106137dd7715a2c246d4c
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.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganovimport com.android.internal.R; 20206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.DialogInterface; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.DialogInterface.OnClickListener; 24c63806d852a550d82bbe6cadff8a2139d78ed559Adam Powellimport android.os.Build; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TimePicker; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TimePicker.OnTimeChangedListener; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A dialog that prompts the user for the time of day using a {@link TimePicker}. 3341ec65355bd6ded652769725b276d47c54a0d913Scott Main * 3441ec65355bd6ded652769725b276d47c54a0d913Scott Main * <p>See the <a href="{@docRoot}resources/tutorials/views/hello-timepicker.html">Time Picker 3541ec65355bd6ded652769725b276d47c54a0d913Scott Main * tutorial</a>.</p> 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganovpublic class TimePickerDialog extends AlertDialog 38206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov implements OnClickListener, OnTimeChangedListener { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The callback interface used to indicate the user is done filling in 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the time (they clicked on the 'Set' button). 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnTimeSetListener { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view associated with this listener. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hourOfDay The hour that was set. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param minute The minute that was set. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onTimeSet(TimePicker view, int hourOfDay, int minute); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String HOUR = "hour"; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String MINUTE = "minute"; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String IS_24_HOUR = "is24hour"; 57a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final TimePicker mTimePicker; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final OnTimeSetListener mCallback; 60a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mInitialHourOfDay; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mInitialMinute; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mIs24HourView; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context Parent. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callBack How parent is notified. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hourOfDay The initial hour. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param minute The initial minute. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param is24HourView Whether this is a 24 hour view, or AM/PM. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TimePickerDialog(Context context, 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnTimeSetListener callBack, 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int hourOfDay, int minute, boolean is24HourView) { 75c63806d852a550d82bbe6cadff8a2139d78ed559Adam Powell this(context, 76c63806d852a550d82bbe6cadff8a2139d78ed559Adam Powell context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB 77c63806d852a550d82bbe6cadff8a2139d78ed559Adam Powell ? com.android.internal.R.style.Theme_Holo_Dialog_Alert 78c63806d852a550d82bbe6cadff8a2139d78ed559Adam Powell : com.android.internal.R.style.Theme_Dialog_Alert, 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callBack, hourOfDay, minute, is24HourView); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context Parent. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param theme the theme to apply to this dialog 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callBack How parent is notified. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hourOfDay The initial hour. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param minute The initial minute. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param is24HourView Whether this is a 24 hour view, or AM/PM. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TimePickerDialog(Context context, 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int theme, 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnTimeSetListener callBack, 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int hourOfDay, int minute, boolean is24HourView) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, theme); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCallback = callBack; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInitialHourOfDay = hourOfDay; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInitialMinute = minute; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIs24HourView = is24HourView; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 100206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov setCanceledOnTouchOutside(false); 101206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov setIcon(0); 102206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov setTitle(R.string.time_picker_dialog_title); 103a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 104a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer setButton(BUTTON_POSITIVE, context.getText(R.string.date_time_set), this); 105a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer setButton(BUTTON_NEGATIVE, context.getText(R.string.cancel), 106a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer (OnClickListener) null); 107a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 108a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer LayoutInflater inflater = 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View view = inflater.inflate(R.layout.time_picker_dialog, null); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setView(view); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker = (TimePicker) view.findViewById(R.id.timePicker); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // initialize state 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentHour(mInitialHourOfDay); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentMinute(mInitialMinute); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setIs24HourView(mIs24HourView); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setOnTimeChangedListener(this); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 120a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCallback != null) { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.clearFocus(); 124a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer mCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(), 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.getCurrentMinute()); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void updateTime(int hourOfDay, int minutOfHour) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentHour(hourOfDay); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentMinute(minutOfHour); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 134206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 135206316a61f904ea0a6b106137dd7715a2c246d4cSvetoslav Ganov /* do nothing */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 137a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle onSaveInstanceState() { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle state = super.onSaveInstanceState(); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project state.putInt(HOUR, mTimePicker.getCurrentHour()); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project state.putInt(MINUTE, mTimePicker.getCurrentMinute()); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project state.putBoolean(IS_24_HOUR, mTimePicker.is24HourView()); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 146a47130783b386df4a371d9b6898eaae5720260f6Christian Mehlmauer 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onRestoreInstanceState(Bundle savedInstanceState) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(savedInstanceState); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int hour = savedInstanceState.getInt(HOUR); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int minute = savedInstanceState.getInt(MINUTE); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentHour(hour); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setCurrentMinute(minute); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimePicker.setIs24HourView(savedInstanceState.getBoolean(IS_24_HOUR)); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 157