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