Merge "Clean up date picker, add simple constructors and setter for listener"
This commit is contained in:
committed by
Android (Google) Code Review
commit
db8f4e56fd
@@ -4082,11 +4082,14 @@ package android.app {
|
||||
}
|
||||
|
||||
public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
|
||||
ctor public DatePickerDialog(android.content.Context);
|
||||
ctor public DatePickerDialog(android.content.Context, int);
|
||||
ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
method public android.widget.DatePicker getDatePicker();
|
||||
method public void onClick(android.content.DialogInterface, int);
|
||||
method public void onDateChanged(android.widget.DatePicker, int, int, int);
|
||||
method public void setOnDateSetListener(android.app.DatePickerDialog.OnDateSetListener);
|
||||
method public void updateDate(int, int, int);
|
||||
}
|
||||
|
||||
|
||||
@@ -4202,11 +4202,14 @@ package android.app {
|
||||
}
|
||||
|
||||
public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
|
||||
ctor public DatePickerDialog(android.content.Context);
|
||||
ctor public DatePickerDialog(android.content.Context, int);
|
||||
ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
method public android.widget.DatePicker getDatePicker();
|
||||
method public void onClick(android.content.DialogInterface, int);
|
||||
method public void onDateChanged(android.widget.DatePicker, int, int, int);
|
||||
method public void setOnDateSetListener(android.app.DatePickerDialog.OnDateSetListener);
|
||||
method public void updateDate(int, int, int);
|
||||
}
|
||||
|
||||
|
||||
@@ -4082,11 +4082,14 @@ package android.app {
|
||||
}
|
||||
|
||||
public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
|
||||
ctor public DatePickerDialog(android.content.Context);
|
||||
ctor public DatePickerDialog(android.content.Context, int);
|
||||
ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int);
|
||||
method public android.widget.DatePicker getDatePicker();
|
||||
method public void onClick(android.content.DialogInterface, int);
|
||||
method public void onDateChanged(android.widget.DatePicker, int, int, int);
|
||||
method public void setOnDateSetListener(android.app.DatePickerDialog.OnDateSetListener);
|
||||
method public void updateDate(int, int, int);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package android.app;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.StyleRes;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
@@ -35,95 +38,126 @@ import java.util.Calendar;
|
||||
|
||||
/**
|
||||
* A simple dialog containing an {@link android.widget.DatePicker}.
|
||||
*
|
||||
* <p>See the <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a>
|
||||
* guide.</p>
|
||||
* <p>
|
||||
* See the <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a>
|
||||
* guide.
|
||||
*/
|
||||
public class DatePickerDialog extends AlertDialog implements OnClickListener,
|
||||
OnDateChangedListener {
|
||||
|
||||
private static final String YEAR = "year";
|
||||
private static final String MONTH = "month";
|
||||
private static final String DAY = "day";
|
||||
|
||||
private final DatePicker mDatePicker;
|
||||
private final OnDateSetListener mDateSetListener;
|
||||
private final Calendar mCalendar;
|
||||
|
||||
private OnDateSetListener mDateSetListener;
|
||||
|
||||
private boolean mTitleNeedsUpdate = true;
|
||||
|
||||
/**
|
||||
* The callback used to indicate the user is done filling in the date.
|
||||
* Creates a new date picker dialog for the current date using the parent
|
||||
* context's default date picker dialog theme.
|
||||
*
|
||||
* @param context the parent context
|
||||
*/
|
||||
public interface OnDateSetListener {
|
||||
|
||||
/**
|
||||
* @param view The view associated with this listener.
|
||||
* @param year The year that was set.
|
||||
* @param monthOfYear The month that was set (0-11) for compatibility
|
||||
* with {@link java.util.Calendar}.
|
||||
* @param dayOfMonth The day of the month that was set.
|
||||
*/
|
||||
void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);
|
||||
public DatePickerDialog(Context context) {
|
||||
this(context, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 monthOfYear The initial month of the dialog.
|
||||
* @param dayOfMonth The initial day of the dialog.
|
||||
* Creates a new date picker dialog for the current date.
|
||||
*
|
||||
* @param context the parent context
|
||||
* @param themeResId the resource ID of the theme against which to inflate
|
||||
* this dialog, or {@code 0} to use the parent
|
||||
* {@code context}'s default alert dialog theme
|
||||
*/
|
||||
public DatePickerDialog(Context context,
|
||||
OnDateSetListener callBack,
|
||||
int year,
|
||||
int monthOfYear,
|
||||
int dayOfMonth) {
|
||||
this(context, 0, callBack, year, monthOfYear, dayOfMonth);
|
||||
}
|
||||
|
||||
static int resolveDialogTheme(Context context, int resid) {
|
||||
if (resid == 0) {
|
||||
final TypedValue outValue = new TypedValue();
|
||||
context.getTheme().resolveAttribute(R.attr.datePickerDialogTheme, outValue, true);
|
||||
return outValue.resourceId;
|
||||
} else {
|
||||
return resid;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context The context the dialog is to run in.
|
||||
* @param theme the theme to apply to this dialog
|
||||
* @param listener How the parent is notified that the date is set.
|
||||
* @param year The initial year of the dialog.
|
||||
* @param monthOfYear The initial month of the dialog.
|
||||
* @param dayOfMonth The initial day of the dialog.
|
||||
*/
|
||||
public DatePickerDialog(Context context, int theme, OnDateSetListener listener, int year,
|
||||
int monthOfYear, int dayOfMonth) {
|
||||
super(context, resolveDialogTheme(context, theme));
|
||||
|
||||
mDateSetListener = listener;
|
||||
mCalendar = Calendar.getInstance();
|
||||
public DatePickerDialog(Context context, @StyleRes int themeResId) {
|
||||
super(context, resolveDialogTheme(context, themeResId));
|
||||
|
||||
final Context themeContext = getContext();
|
||||
final LayoutInflater inflater = LayoutInflater.from(themeContext);
|
||||
final View view = inflater.inflate(R.layout.date_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);
|
||||
|
||||
mCalendar = Calendar.getInstance();
|
||||
|
||||
final int year = mCalendar.get(Calendar.YEAR);
|
||||
final int monthOfYear = mCalendar.get(Calendar.MONTH);
|
||||
final int dayOfMonth = mCalendar.get(Calendar.DAY_OF_MONTH);
|
||||
mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);
|
||||
mDatePicker.init(year, monthOfYear, dayOfMonth, this);
|
||||
mDatePicker.setValidationCallback(mValidationCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new date picker dialog for the specified date using the parent
|
||||
* context's default date picker dialog theme.
|
||||
*
|
||||
* @param context the parent context
|
||||
* @param listener the listener to call when the user sets the date
|
||||
* @param year the initially selected year
|
||||
* @param month the initially selected month (0-11 for compatibility with
|
||||
* {@link Calendar#MONTH})
|
||||
* @param dayOfMonth the initially selected day of month (1-31, depending
|
||||
* on month)
|
||||
*/
|
||||
public DatePickerDialog(@Nullable Context context, @Nullable OnDateSetListener listener,
|
||||
int year, int month, int dayOfMonth) {
|
||||
this(context, 0, listener, year, month, dayOfMonth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new date picker dialog for the specified date.
|
||||
*
|
||||
* @param context the parent context
|
||||
* @param themeResId the resource ID of the theme against which to inflate
|
||||
* this dialog, or {@code 0} to use the parent
|
||||
* {@code context}'s default alert dialog theme
|
||||
* @param listener the listener to call when the user sets the date
|
||||
* @param year the initially selected year
|
||||
* @param month the initially selected month (0-11 for compatibility with
|
||||
* {@link Calendar#MONTH})
|
||||
* @param dayOfMonth the initially selected day of month (1-31, depending
|
||||
* on month)
|
||||
*/
|
||||
public DatePickerDialog(@NonNull Context context, @StyleRes int themeResId,
|
||||
@Nullable OnDateSetListener listener, int year, int month, int dayOfMonth) {
|
||||
this(context, themeResId);
|
||||
|
||||
mDateSetListener = listener;
|
||||
|
||||
mDatePicker.updateDate(year, month, dayOfMonth);
|
||||
}
|
||||
|
||||
static int resolveDialogTheme(@NonNull Context context, @StyleRes int themeResId) {
|
||||
if (themeResId == 0) {
|
||||
final TypedValue outValue = new TypedValue();
|
||||
context.getTheme().resolveAttribute(R.attr.datePickerDialogTheme, outValue, true);
|
||||
return outValue.resourceId;
|
||||
} else {
|
||||
return themeResId;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDateChanged(DatePicker view, int year, int month, int day) {
|
||||
mDatePicker.init(year, month, day, this);
|
||||
updateTitle(year, month, day);
|
||||
public void onDateChanged(DatePicker view, int year, int month, int dayOfMonth) {
|
||||
mDatePicker.init(year, month, dayOfMonth, this);
|
||||
updateTitle(year, month, dayOfMonth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the listener to call when the user sets the date.
|
||||
*
|
||||
* @param listener the listener to call when the user sets the date
|
||||
*/
|
||||
public void setOnDateSetListener(@Nullable OnDateSetListener listener) {
|
||||
mDateSetListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,10 +179,11 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener,
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link DatePicker} contained in this dialog.
|
||||
* Returns the {@link DatePicker} contained in this dialog.
|
||||
*
|
||||
* @return The calendar view.
|
||||
* @return the date picker
|
||||
*/
|
||||
@NonNull
|
||||
public DatePicker getDatePicker() {
|
||||
return mDatePicker;
|
||||
}
|
||||
@@ -156,20 +191,22 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener,
|
||||
/**
|
||||
* Sets the current date.
|
||||
*
|
||||
* @param year The date year.
|
||||
* @param monthOfYear The date month.
|
||||
* @param dayOfMonth The date day of month.
|
||||
* @param year the year
|
||||
* @param month the month (0-11 for compatibility with
|
||||
* {@link Calendar#MONTH})
|
||||
* @param dayOfMonth the day of month (1-31, depending on month)
|
||||
*/
|
||||
public void updateDate(int year, int monthOfYear, int dayOfMonth) {
|
||||
mDatePicker.updateDate(year, monthOfYear, dayOfMonth);
|
||||
public void updateDate(int year, int month, int dayOfMonth) {
|
||||
mDatePicker.updateDate(year, month, dayOfMonth);
|
||||
}
|
||||
|
||||
private void updateTitle(int year, int month, int day) {
|
||||
private void updateTitle(int year, int month, int dayOfMonth) {
|
||||
if (!mDatePicker.getCalendarViewShown()) {
|
||||
mCalendar.set(Calendar.YEAR, year);
|
||||
mCalendar.set(Calendar.MONTH, month);
|
||||
mCalendar.set(Calendar.DAY_OF_MONTH, day);
|
||||
String title = DateUtils.formatDateTime(mContext,
|
||||
mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
|
||||
|
||||
final String title = DateUtils.formatDateTime(mContext,
|
||||
mCalendar.getTimeInMillis(),
|
||||
DateUtils.FORMAT_SHOW_DATE
|
||||
| DateUtils.FORMAT_SHOW_WEEKDAY
|
||||
@@ -177,12 +214,12 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener,
|
||||
| DateUtils.FORMAT_ABBREV_MONTH
|
||||
| DateUtils.FORMAT_ABBREV_WEEKDAY);
|
||||
setTitle(title);
|
||||
|
||||
mTitleNeedsUpdate = true;
|
||||
} else {
|
||||
if (mTitleNeedsUpdate) {
|
||||
mTitleNeedsUpdate = false;
|
||||
setTitle(R.string.date_picker_dialog_title);
|
||||
}
|
||||
} else if (mTitleNeedsUpdate) {
|
||||
setTitle(R.string.date_picker_dialog_title);
|
||||
|
||||
mTitleNeedsUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,4 +250,19 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The listener used to indicate the user has finished selecting a date.
|
||||
*/
|
||||
public interface OnDateSetListener {
|
||||
/**
|
||||
* @param view the picker associated with the dialog
|
||||
* @param year the selected year
|
||||
* @param month the selected month (0-11 for compatibility with
|
||||
* {@link Calendar#MONTH})
|
||||
* @param dayOfMonth th selected day of the month (1-31, depending on
|
||||
* month)
|
||||
*/
|
||||
void onDateSet(DatePicker view, int year, int month, int dayOfMonth);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user