/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.app;

import android.annotation.TestApi;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

import com.android.internal.R;

A dialog that prompts the user for the time of day using a TimePicker.

See the Pickers guide.

/** * A dialog that prompts the user for the time of day using a * {@link TimePicker}. * * <p> * See the <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a> * guide. */
public class TimePickerDialog extends AlertDialog implements OnClickListener, OnTimeChangedListener { private static final String HOUR = "hour"; private static final String MINUTE = "minute"; private static final String IS_24_HOUR = "is24hour"; private final TimePicker mTimePicker; private final OnTimeSetListener mTimeSetListener; private final int mInitialHourOfDay; private final int mInitialMinute; private final boolean mIs24HourView;
The callback interface used to indicate the user is done filling in the time (e.g. they clicked on the 'OK' button).
/** * The callback interface used to indicate the user is done filling in * the time (e.g. they clicked on the 'OK' button). */
public interface OnTimeSetListener {
Called when the user is done setting a new time and the dialog has closed.
Params:
  • view – the view associated with this listener
  • hourOfDay – the hour that was set
  • minute – the minute that was set
/** * Called when the user is done setting a new time and the dialog has * closed. * * @param view the view associated with this listener * @param hourOfDay the hour that was set * @param minute the minute that was set */
void onTimeSet(TimePicker view, int hourOfDay, int minute); }
Creates a new time picker dialog.
Params:
  • context – the parent context
  • listener – the listener to call when the time is set
  • hourOfDay – the initial hour
  • minute – the initial minute
  • is24HourView – whether this is a 24 hour view or AM/PM
/** * Creates a new time picker dialog. * * @param context the parent context * @param listener the listener to call when the time is set * @param hourOfDay the initial hour * @param minute the initial minute * @param is24HourView whether this is a 24 hour view or AM/PM */
public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) { this(context, 0, listener, hourOfDay, minute, is24HourView); } static int resolveDialogTheme(Context context, int resId) { if (resId == 0) { final TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(R.attr.timePickerDialogTheme, outValue, true); return outValue.resourceId; } else { return resId; } }
Creates a new time picker dialog with the specified theme.

The theme is overlaid on top of the theme of the parent context. If themeResId is 0, the dialog will be inflated using the theme specified by the android:timePickerDialogTheme attribute on the parent context's theme.

Params:
  • context – the parent context
  • themeResId – the resource ID of the theme to apply to this dialog
  • listener – the listener to call when the time is set
  • hourOfDay – the initial hour
  • minute – the initial minute
  • is24HourView – Whether this is a 24 hour view, or AM/PM.
/** * Creates a new time picker dialog with the specified theme. * <p> * The theme is overlaid on top of the theme of the parent {@code context}. * If {@code themeResId} is 0, the dialog will be inflated using the theme * specified by the * {@link android.R.attr#timePickerDialogTheme android:timePickerDialogTheme} * attribute on the parent {@code context}'s theme. * * @param context the parent context * @param themeResId the resource ID of the theme to apply to this dialog * @param listener the listener to call when the time is set * @param hourOfDay the initial hour * @param minute the initial minute * @param is24HourView Whether this is a 24 hour view, or AM/PM. */
public TimePickerDialog(Context context, int themeResId, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView) { super(context, resolveDialogTheme(context, themeResId)); mTimeSetListener = listener; mInitialHourOfDay = hourOfDay; mInitialMinute = minute; mIs24HourView = is24HourView; final Context themeContext = getContext(); final LayoutInflater inflater = LayoutInflater.from(themeContext); final View view = inflater.inflate(R.layout.time_picker_dialog, null); setView(view); setButton(BUTTON_POSITIVE, themeContext.getString(R.string.ok), this); setButton(BUTTON_NEGATIVE, themeContext.getString(R.string.cancel), this); setButtonPanelLayoutHint(LAYOUT_HINT_SIDE); mTimePicker = (TimePicker) view.findViewById(R.id.timePicker); mTimePicker.setIs24HourView(mIs24HourView); mTimePicker.setCurrentHour(mInitialHourOfDay); mTimePicker.setCurrentMinute(mInitialMinute); mTimePicker.setOnTimeChangedListener(this); }
Returns:the time picker displayed in the dialog
@hideFor testing only.
/** * @return the time picker displayed in the dialog * @hide For testing only. */
@TestApi public TimePicker getTimePicker() { return mTimePicker; } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { /* do nothing */ } @Override public void show() { super.show(); getButton(BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mTimePicker.validateInput()) { TimePickerDialog.this.onClick(TimePickerDialog.this, BUTTON_POSITIVE); // Clearing focus forces the dialog to commit any pending // changes, e.g. typed text in a NumberPicker. mTimePicker.clearFocus(); dismiss(); } } }); } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: // Note this skips input validation and just uses the last valid time and hour // entry. This will only be invoked programmatically. User clicks on BUTTON_POSITIVE // are handled in show(). if (mTimeSetListener != null) { mTimeSetListener.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute()); } break; case BUTTON_NEGATIVE: cancel(); break; } }
Sets the current time.
Params:
  • hourOfDay – The current hour within the day.
  • minuteOfHour – The current minute within the hour.
/** * Sets the current time. * * @param hourOfDay The current hour within the day. * @param minuteOfHour The current minute within the hour. */
public void updateTime(int hourOfDay, int minuteOfHour) { mTimePicker.setCurrentHour(hourOfDay); mTimePicker.setCurrentMinute(minuteOfHour); } @Override public Bundle onSaveInstanceState() { final Bundle state = super.onSaveInstanceState(); state.putInt(HOUR, mTimePicker.getCurrentHour()); state.putInt(MINUTE, mTimePicker.getCurrentMinute()); state.putBoolean(IS_24_HOUR, mTimePicker.is24HourView()); return state; } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); final int hour = savedInstanceState.getInt(HOUR); final int minute = savedInstanceState.getInt(MINUTE); mTimePicker.setIs24HourView(savedInstanceState.getBoolean(IS_24_HOUR)); mTimePicker.setCurrentHour(hour); mTimePicker.setCurrentMinute(minute); } }