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.widget.DatePicker; | 7 import android.widget.DatePicker; |
8 import android.widget.DatePicker.OnDateChangedListener; | 8 import android.widget.DatePicker.OnDateChangedListener; |
9 | 9 |
10 import java.util.Calendar; | 10 import java.util.Calendar; |
11 import java.util.TimeZone; | 11 import java.util.TimeZone; |
12 | 12 |
13 /** | 13 /** |
14 * Normalize a date dialog so that it respect min and max. | 14 * Normalize a date dialog so that it respect min and max. |
15 */ | 15 */ |
16 class DateDialogNormalizer { | 16 class DateDialogNormalizer { |
17 | 17 |
18 private static void setLimits(DatePicker picker, long min, long max) { | 18 private static void setLimits(DatePicker picker, long minMillis, long maxMil
lis) { |
19 // DatePicker intervals are non inclusive, the DatePicker will throw an | 19 // DatePicker intervals are non inclusive, the DatePicker will throw an |
20 // exception when setting the min/max attribute to the current date | 20 // exception when setting the min/max attribute to the current date |
21 // so make sure this never happens | 21 // so make sure this never happens |
22 if (max <= min) { | 22 if (maxMillis <= minMillis) { |
23 return; | 23 return; |
24 } | 24 } |
25 Calendar minCal = trimToDate(min); | 25 Calendar minCal = trimToDate(minMillis); |
26 Calendar maxCal = trimToDate(max); | 26 Calendar maxCal = trimToDate(maxMillis); |
27 int currentYear = picker.getYear(); | 27 int currentYear = picker.getYear(); |
28 int currentMonth = picker.getMonth(); | 28 int currentMonth = picker.getMonth(); |
29 int currentDayOfMonth = picker.getDayOfMonth(); | 29 int currentDayOfMonth = picker.getDayOfMonth(); |
30 picker.updateDate(maxCal.get(Calendar.YEAR), | 30 picker.updateDate(maxCal.get(Calendar.YEAR), |
31 maxCal.get(Calendar.MONTH), | 31 maxCal.get(Calendar.MONTH), |
32 maxCal.get(Calendar.DAY_OF_MONTH)); | 32 maxCal.get(Calendar.DAY_OF_MONTH)); |
33 picker.setMinDate(minCal.getTimeInMillis()); | 33 picker.setMinDate(minCal.getTimeInMillis()); |
34 picker.updateDate(minCal.get(Calendar.YEAR), | 34 picker.updateDate(minCal.get(Calendar.YEAR), |
35 minCal.get(Calendar.MONTH), | 35 minCal.get(Calendar.MONTH), |
36 minCal.get(Calendar.DAY_OF_MONTH)); | 36 minCal.get(Calendar.DAY_OF_MONTH)); |
(...skipping 13 matching lines...) Expand all Loading... |
50 result.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Cale
ndar.DAY_OF_MONTH), | 50 result.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Cale
ndar.DAY_OF_MONTH), |
51 0, 0, 0); | 51 0, 0, 0); |
52 return result; | 52 return result; |
53 } | 53 } |
54 | 54 |
55 /** | 55 /** |
56 * Normalizes an existing DateDialogPicker changing the default date if | 56 * Normalizes an existing DateDialogPicker changing the default date if |
57 * needed to comply with the {@code min} and {@code max} attributes. | 57 * needed to comply with the {@code min} and {@code max} attributes. |
58 */ | 58 */ |
59 static void normalize(DatePicker picker, OnDateChangedListener listener, | 59 static void normalize(DatePicker picker, OnDateChangedListener listener, |
60 int year, int month, int day, int hour, int minute, long min, long m
ax) { | 60 int year, int month, int day, int hour, int minute, long minMillis,
long maxMillis) { |
61 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); | 61 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); |
62 calendar.clear(); | 62 calendar.clear(); |
63 calendar.set(year, month, day, hour, minute, 0); | 63 calendar.set(year, month, day, hour, minute, 0); |
64 if (calendar.getTimeInMillis() < min) { | 64 if (calendar.getTimeInMillis() < minMillis) { |
65 calendar.clear(); | 65 calendar.clear(); |
66 calendar.setTimeInMillis(min); | 66 calendar.setTimeInMillis(minMillis); |
67 } else if (calendar.getTimeInMillis() > max) { | 67 } else if (calendar.getTimeInMillis() > maxMillis) { |
68 calendar.clear(); | 68 calendar.clear(); |
69 calendar.setTimeInMillis(max); | 69 calendar.setTimeInMillis(maxMillis); |
70 } | 70 } |
71 picker.init( | 71 picker.init( |
72 calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), | 72 calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), |
73 calendar.get(Calendar.DAY_OF_MONTH), listener); | 73 calendar.get(Calendar.DAY_OF_MONTH), listener); |
74 | 74 |
75 setLimits(picker, min, max); | 75 setLimits(picker, minMillis, maxMillis); |
76 } | 76 } |
77 } | 77 } |
OLD | NEW |