1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochpackage org.chromium.content.browser.input; 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.app.AlertDialog; 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.content.Context; 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.content.DialogInterface; 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.content.DialogInterface.OnClickListener; 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.os.Build; 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.os.Bundle; 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport android.view.View; 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport org.chromium.content.browser.input.TwoFieldDatePicker.OnMonthOrWeekChangedListener; 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport org.chromium.content.R; 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochpublic abstract class TwoFieldDatePickerDialog extends AlertDialog implements OnClickListener, 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnMonthOrWeekChangedListener { 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private static final String YEAR = "year"; 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private static final String POSITION_IN_YEAR = "position_in_year"; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected final TwoFieldDatePicker mPicker; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected final OnValueSetListener mCallBack; 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * The callback used to indicate the user is done filling in the date. 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public interface OnValueSetListener { 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param year The year that was set. 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param positionInYear The week in year. 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * with {@link java.util.Calendar}. 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void onValueSet(int year, int positionInYear); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param context The context the dialog is to run in. 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param callBack How the parent is notified that the date is set. 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param year The initial year of the dialog. 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param weekOfYear The initial week of the dialog. 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public TwoFieldDatePickerDialog(Context context, 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnValueSetListener callBack, 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int year, 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int positionInYear, 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch long minValue, 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch long maxValue) { 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this(context, 0, callBack, year, positionInYear, minValue, maxValue); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param context The context the dialog is to run in. 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param theme the theme to apply to this dialog 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param callBack How the parent is notified that the date is set. 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param year The initial year of the dialog. 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param weekOfYear The initial week of the dialog. 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public TwoFieldDatePickerDialog(Context context, 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int theme, 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnValueSetListener callBack, 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int year, 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int positionInYear, 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch long minValue, 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch long maxValue) { 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch super(context, theme); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mCallBack = callBack; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setButton(BUTTON_POSITIVE, context.getText( 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch R.string.date_picker_dialog_set), this); 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setButton(BUTTON_NEGATIVE, context.getText(android.R.string.cancel), 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (OnClickListener) null); 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setIcon(0); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mPicker = createPicker(context, minValue, maxValue); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setView(mPicker); 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mPicker.init(year, positionInYear, this); 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected TwoFieldDatePicker createPicker(Context context, long minValue, long maxValue) { 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return null; 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public void onClick(DialogInterface dialog, int which) { 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tryNotifyDateSet(); 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Notifies the listener, if such, that a date has been set. 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected abstract void tryNotifyDateSet(); 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected void onStop() { 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (Build.VERSION.SDK_INT >= 16) { 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The default behavior of dialogs changed in JellyBean and onwards. 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Dismissing a dialog (by pressing back for example) 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // applies the chosen date. This code is added here so that the custom 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // pickers behave the same as the internal DatePickerDialog. 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tryNotifyDateSet(); 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch super.onStop(); 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public void onMonthOrWeekChanged(TwoFieldDatePicker view, int year, int positionInYear) { 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mPicker.init(year, positionInYear, null); 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Sets the current date. 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param year The date week year. 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @param weekOfYear The date week. 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public void updateDate(int year, int weekOfYear) { 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mPicker.updateDate(year, weekOfYear); 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 125