// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.content.browser.input; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Build; import org.chromium.content.R; import org.chromium.content.browser.input.TwoFieldDatePicker.OnMonthOrWeekChangedListener; public abstract class TwoFieldDatePickerDialog extends AlertDialog implements OnClickListener, OnMonthOrWeekChangedListener { private static final String YEAR = "year"; private static final String POSITION_IN_YEAR = "position_in_year"; protected final TwoFieldDatePicker mPicker; protected final OnValueSetListener mCallBack; /** * The callback used to indicate the user is done filling in the date. */ public interface OnValueSetListener { /** * @param year The year that was set. * @param positionInYear The position in the year that was set. */ void onValueSet(int year, int positionInYear); } /** * @param context The context the dialog is to run in. * @param callBack How the parent is notified that the date is set. * @param year The initial year of the dialog. * @param weekOfYear The initial week of the dialog. */ public TwoFieldDatePickerDialog(Context context, OnValueSetListener callBack, int year, int positionInYear, double minValue, double maxValue) { this(context, 0, callBack, year, positionInYear, minValue, maxValue); } /** * @param context The context the dialog is to run in. * @param theme the theme to apply to this dialog * @param callBack How the parent is notified that the date is set. * @param year The initial year of the dialog. * @param weekOfYear The initial week of the dialog. */ public TwoFieldDatePickerDialog(Context context, int theme, OnValueSetListener callBack, int year, int positionInYear, double minValue, double maxValue) { super(context, theme); mCallBack = callBack; setButton(BUTTON_POSITIVE, context.getText( R.string.date_picker_dialog_set), this); setButton(BUTTON_NEGATIVE, context.getText(android.R.string.cancel), (OnClickListener) null); setIcon(0); mPicker = createPicker(context, minValue, maxValue); setView(mPicker); mPicker.init(year, positionInYear, this); } protected TwoFieldDatePicker createPicker(Context context, double minValue, double maxValue) { return null; } @Override public void onClick(DialogInterface dialog, int which) { tryNotifyDateSet(); } /** * Notifies the listener, if such, that a date has been set. */ protected void tryNotifyDateSet() { if (mCallBack != null) { mPicker.clearFocus(); mCallBack.onValueSet(mPicker.getYear(), mPicker.getPositionInYear()); } } @Override protected void onStop() { if (Build.VERSION.SDK_INT >= 16) { // The default behavior of dialogs changed in JellyBean and onwards. // Dismissing a dialog (by pressing back for example) // applies the chosen date. This code is added here so that the custom // pickers behave the same as the internal DatePickerDialog. tryNotifyDateSet(); } super.onStop(); } @Override public void onMonthOrWeekChanged(TwoFieldDatePicker view, int year, int positionInYear) { mPicker.init(year, positionInYear, null); } /** * Sets the current date. * * @param year The date week year. * @param weekOfYear The date week. */ public void updateDate(int year, int weekOfYear) { mPicker.updateDate(year, weekOfYear); } }