OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.content.browser.input; | 5 package org.chromium.content.browser.input; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.view.LayoutInflater; | 8 import android.view.LayoutInflater; |
9 import android.widget.NumberPicker; | 9 import android.widget.NumberPicker; |
10 import android.widget.NumberPicker.OnValueChangeListener; | 10 import android.widget.NumberPicker.OnValueChangeListener; |
11 import android.text.format.DateUtils; | 11 import android.text.format.DateUtils; |
12 import android.view.accessibility.AccessibilityEvent; | 12 import android.view.accessibility.AccessibilityEvent; |
13 import android.widget.FrameLayout; | 13 import android.widget.FrameLayout; |
14 import android.widget.NumberPicker; | 14 import android.widget.NumberPicker; |
15 | 15 |
16 import java.util.Calendar; | 16 import java.util.Calendar; |
17 import java.util.TimeZone; | |
17 | 18 |
18 import org.chromium.content.R; | 19 import org.chromium.content.R; |
19 | 20 |
20 // This class is heavily based on android.widget.DatePicker. | 21 // This class is heavily based on android.widget.DatePicker. |
21 public abstract class TwoFieldDatePicker extends FrameLayout { | 22 public abstract class TwoFieldDatePicker extends FrameLayout { |
22 | 23 |
23 private NumberPicker mPositionInYearSpinner; | 24 private NumberPicker mPositionInYearSpinner; |
24 | 25 |
25 private NumberPicker mYearSpinner; | 26 private NumberPicker mYearSpinner; |
26 | 27 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
78 throw new IllegalArgumentException(); | 79 throw new IllegalArgumentException(); |
79 } | 80 } |
80 | 81 |
81 // now set the date to the adjusted one | 82 // now set the date to the adjusted one |
82 setCurrentDate(year, positionInYear); | 83 setCurrentDate(year, positionInYear); |
83 updateSpinners(); | 84 updateSpinners(); |
84 notifyDateChanged(); | 85 notifyDateChanged(); |
85 } | 86 } |
86 }; | 87 }; |
87 | 88 |
88 mCurrentDate = Calendar.getInstance(); | 89 mCurrentDate = Calendar.getInstance(TimeZone.getTimeZone("UTC")); |
89 if (minValue >= maxValue) { | 90 if (minValue >= maxValue) { |
90 mMinDate = Calendar.getInstance(); | 91 mMinDate = Calendar.getInstance(TimeZone.getTimeZone("UTC")); |
91 mMinDate.set(0, 0, 1); | 92 mMinDate.set(0, 0, 1); |
92 mMaxDate = Calendar.getInstance(); | 93 mMaxDate = Calendar.getInstance(TimeZone.getTimeZone("UTC")); |
93 mMaxDate.set(9999, 0, 1); | 94 mMaxDate.set(9999, 0, 1); |
94 } else { | 95 } else { |
95 mMinDate = createDateFromValue(minValue); | 96 mMinDate = createDateFromValue(minValue); |
96 mMaxDate = createDateFromValue(maxValue); | 97 mMaxDate = createDateFromValue(maxValue); |
97 } | 98 } |
98 | 99 |
99 // month | 100 // month |
100 mPositionInYearSpinner = (NumberPicker) findViewById(R.id.position_in_ye ar); | 101 mPositionInYearSpinner = (NumberPicker) findViewById(R.id.position_in_ye ar); |
101 mPositionInYearSpinner.setOnLongPressUpdateInterval(200); | 102 mPositionInYearSpinner.setOnLongPressUpdateInterval(200); |
102 mPositionInYearSpinner.setOnValueChangedListener(onChangeListener); | 103 mPositionInYearSpinner.setOnValueChangedListener(onChangeListener); |
(...skipping 23 matching lines...) Expand all Loading... | |
126 public boolean isNewDate(int year, int positionInYear) { | 127 public boolean isNewDate(int year, int positionInYear) { |
127 return (getYear() != year || getPositionInYear() != positionInYear); | 128 return (getYear() != year || getPositionInYear() != positionInYear); |
128 } | 129 } |
129 | 130 |
130 /** | 131 /** |
131 * Subclasses know the semantics of @value, and need to return | 132 * Subclasses know the semantics of @value, and need to return |
132 * a Calendar corresponding to it. | 133 * a Calendar corresponding to it. |
133 */ | 134 */ |
134 protected abstract Calendar createDateFromValue(long value); | 135 protected abstract Calendar createDateFromValue(long value); |
135 | 136 |
136 /** | 137 /** |
newt (away)
2013/11/04 17:35:55
javadoc
keishi
2013/11/05 07:23:42
Done.
| |
138 */ | |
139 protected abstract long valueFromDate(int year, int positionInYear); | |
140 | |
141 /** | |
137 * Updates the current date. | 142 * Updates the current date. |
138 * | 143 * |
139 * @param year The year. | 144 * @param year The year. |
140 * @param positionInYear The month or week in year. | 145 * @param positionInYear The month or week in year. |
141 */ | 146 */ |
142 public void updateDate(int year, int positionInYear) { | 147 public void updateDate(int year, int positionInYear) { |
143 if (!isNewDate(year, positionInYear)) { | 148 if (!isNewDate(year, positionInYear)) { |
144 return; | 149 return; |
145 } | 150 } |
146 setCurrentDate(year, positionInYear); | 151 setCurrentDate(year, positionInYear); |
(...skipping 28 matching lines...) Expand all Loading... | |
175 } | 180 } |
176 | 181 |
177 /** | 182 /** |
178 * @return The selected year. | 183 * @return The selected year. |
179 */ | 184 */ |
180 public int getYear() { | 185 public int getYear() { |
181 return mCurrentDate.get(Calendar.YEAR); | 186 return mCurrentDate.get(Calendar.YEAR); |
182 } | 187 } |
183 | 188 |
184 /** | 189 /** |
190 * @return The selected value. | |
191 */ | |
192 public long getValue() { | |
193 return valueFromDate(getYear(), getPositionInYear()); | |
194 } | |
195 | |
196 /** | |
185 * @return The selected month or week. | 197 * @return The selected month or week. |
186 */ | 198 */ |
187 public abstract int getPositionInYear(); | 199 public abstract int getPositionInYear(); |
188 | 200 |
189 protected abstract int getMaxYear(); | 201 protected abstract int getMaxYear(); |
190 | 202 |
191 protected abstract int getMinYear(); | 203 protected abstract int getMinYear(); |
192 | 204 |
193 protected abstract int getMaxPositionInYear(int year); | 205 protected abstract int getMaxPositionInYear(int year); |
194 | 206 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
239 /** | 251 /** |
240 * Notifies the listener, if such, for a change in the selected date. | 252 * Notifies the listener, if such, for a change in the selected date. |
241 */ | 253 */ |
242 protected void notifyDateChanged() { | 254 protected void notifyDateChanged() { |
243 sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); | 255 sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); |
244 if (mMonthOrWeekChangedListener != null) { | 256 if (mMonthOrWeekChangedListener != null) { |
245 mMonthOrWeekChangedListener.onMonthOrWeekChanged(this, getYear(), ge tPositionInYear()); | 257 mMonthOrWeekChangedListener.onMonthOrWeekChanged(this, getYear(), ge tPositionInYear()); |
246 } | 258 } |
247 } | 259 } |
248 } | 260 } |
OLD | NEW |