| /* |
| * Copyright (C) 2015 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.support.v17.leanback.widget; |
| |
| import android.content.Context; |
| import android.os.Bundle; |
| import android.support.v17.leanback.widget.picker.DatePicker; |
| |
| import java.util.Calendar; |
| import java.util.TimeZone; |
| |
| /** |
| * Subclass of GuidedAction that can choose a date. The Action is editable by default; to make it |
| * read only, call hasEditableActivatorView(false) on the Builder. |
| */ |
| public class GuidedDatePickerAction extends GuidedAction { |
| |
| /** |
| * Base Builder class to build GuidedDatePickerAction. Subclass this BuilderBase when app needs |
| * to subclass GuidedDatePickerAction, implement your build() which should call |
| * {@link #applyDatePickerValues(GuidedDatePickerAction)}. When using GuidedDatePickerAction |
| * directly, use {@link Builder}. |
| */ |
| public abstract static class BuilderBase<B extends BuilderBase> |
| extends GuidedAction.BuilderBase<B> { |
| |
| private String mDatePickerFormat; |
| private long mDate; |
| private long mMinDate = Long.MIN_VALUE; |
| private long mMaxDate = Long.MAX_VALUE; |
| |
| public BuilderBase(Context context) { |
| super(context); |
| Calendar c = Calendar.getInstance(); |
| mDate = c.getTimeInMillis(); |
| hasEditableActivatorView(true); |
| } |
| |
| /** |
| * Sets format of date Picker or null for default. The format is a case insensitive String |
| * containing the day ('d'), month ('m'), and year ('y'). When the format is not specified, |
| * a default format of current locale will be used. |
| * @param format Format of showing Date, e.g. "YMD". |
| * @return This Builder object. |
| */ |
| public B datePickerFormat(String format) { |
| mDatePickerFormat = format; |
| return (B) this; |
| } |
| |
| /** |
| * Sets a Date for date picker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @return This Builder Object. |
| */ |
| public B date(long date) { |
| mDate = date; |
| return (B) this; |
| } |
| |
| /** |
| * Sets minimal Date for date picker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @return This Builder Object. |
| */ |
| public B minDate(long minDate) { |
| mMinDate = minDate; |
| return (B) this; |
| } |
| |
| /** |
| * Sets maximum Date for date picker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @return This Builder Object. |
| */ |
| public B maxDate(long maxDate) { |
| mMaxDate = maxDate; |
| return (B) this; |
| } |
| |
| /** |
| * Apply values to GuidedDatePickerAction. |
| * @param action GuidedDatePickerAction to apply values. |
| */ |
| protected final void applyDatePickerValues(GuidedDatePickerAction action) { |
| super.applyValues(action); |
| action.mDatePickerFormat = mDatePickerFormat; |
| action.mDate = mDate; |
| if (mMinDate > mMaxDate) { |
| throw new IllegalArgumentException("MinDate cannot be larger than MaxDate"); |
| } |
| action.mMinDate = mMinDate; |
| action.mMaxDate = mMaxDate; |
| } |
| |
| } |
| |
| /** |
| * Builder class to build a GuidedDatePickerAction. |
| */ |
| public final static class Builder extends BuilderBase<Builder> { |
| public Builder(Context context) { |
| super(context); |
| } |
| |
| /** |
| * Builds the GuidedDatePickerAction corresponding to this Builder. |
| * @return The GuidedDatePickerAction as configured through this Builder. |
| */ |
| public GuidedDatePickerAction build() { |
| GuidedDatePickerAction action = new GuidedDatePickerAction(); |
| applyDatePickerValues(action); |
| return action; |
| } |
| } |
| |
| String mDatePickerFormat; |
| long mDate; |
| long mMinDate = Long.MIN_VALUE; |
| long mMaxDate = Long.MAX_VALUE; |
| |
| /** |
| * Returns format of date Picker or null if not specified. The format is a case insensitive |
| * String containing the * day ('d'), month ('m'), and year ('y'). When the format is not |
| * specified, a default format of current locale will |
| * be used. |
| * @return Format of showing Date, e.g. "YMD". Returns null if using current locale's default. |
| */ |
| public String getDatePickerFormat() { |
| return mDatePickerFormat; |
| } |
| |
| /** |
| * Get current value of DatePicker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @return Current value of DatePicker Action. |
| */ |
| public long getDate() { |
| return mDate; |
| } |
| |
| /** |
| * Sets current value of DatePicker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @param date New value to update current value of DatePicker Action. |
| */ |
| public void setDate(long date) { |
| mDate = date; |
| } |
| |
| /** |
| * Get minimal value of DatePicker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. -1 if not set. |
| * @return Minimal value of DatePicker Action or Long.MIN_VALUE if not set. |
| */ |
| public long getMinDate() { |
| return mMinDate; |
| } |
| |
| /** |
| * Get maximum value of DatePicker in milliseconds since January 1, 1970 00:00:00 in |
| * {@link TimeZone#getDefault()} time zone. |
| * @return Maximum value of DatePicker Action or Long.MAX_VALUE if not set. |
| */ |
| public long getMaxDate() { |
| return mMaxDate; |
| } |
| |
| @Override |
| public void onSaveInstanceState(Bundle bundle, String key) { |
| bundle.putLong(key, getDate()); |
| } |
| |
| @Override |
| public void onRestoreInstanceState(Bundle bundle, String key) { |
| setDate(bundle.getLong(key, getDate())); |
| } |
| } |