Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/input/DateDialogNormalizer.java

Issue 15533003: [Android] Implement min/max on all supported date types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased to pick up the simplifications of the month picker Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content.browser.input;
6
7 import android.widget.DatePicker;
8 import android.widget.DatePicker.OnDateChangedListener;
9
10 import java.util.Calendar;
11
12 /**
13 * Normalize a date dialog so that it respect min and max.
14 */
15 class DateDialogNormalizer {
16 private static final long ONE_DAY_MILLIS = 24 * 60 * 60 * 1000;
17
18 private static void setLimits(DatePicker picker, long min, long max) {
19 // DatePicker intervals are non inclusive
bulach 2013/05/30 14:16:30 nit: end with .
Miguel Garcia 2013/06/03 13:08:58 Done.
20 long minTime = min > 0 ? min - 1 : 0;
21 long maxTime = (max - ONE_DAY_MILLIS) >= (Long.MAX_VALUE - ONE_DAY_MILLI S) ?
22 Long.MAX_VALUE : max + ONE_DAY_MILLIS;
23
24 // set max/min Date accepts a time so while the widget is only able to
bulach 2013/05/30 14:16:30 this sentence is a bit confusing, how about: // Wh
Miguel Garcia 2013/06/03 13:08:58 Done.
25 // display dates it can fail if the min and max time are in the same dat e as the
26 // min max accepted date but a different times.
27 Calendar cal = Calendar.getInstance();
28 cal.clear();
29 cal.setTimeInMillis(max);
30
31 picker.setMaxDate(trimToDate(maxTime));
32 picker.setMinDate(trimToDate(minTime));
33 }
34
35 /**
36 * Resets the hour, minute, second piece of a time stamp to 0, maintaining t he remaining
37 * components (year, month, day).
38 */
39 private static long trimToDate(long time) {
40 Calendar cal = Calendar.getInstance();
41 cal.clear();
42 cal.setTimeInMillis(time);
43 Calendar result = Calendar.getInstance();
44 result.clear();
45 result.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Cale ndar.DAY_OF_MONTH),
46 0, 0, 0);
47 return result.getTimeInMillis();
48 }
49
50 /**
51 * Normalizes an existing DateDialogPicker changing the default date if
52 * needed to comply with the {@code min} and {@code max} attributes.
53 */
54 static void normalize(DatePicker picker, OnDateChangedListener listener,
55 int year, int month, int day, int hour, int minute, long min, long m ax) {
56 Calendar calendar = Calendar.getInstance();
57 calendar.clear();
58 calendar.set(year, month, day, hour, minute, 0);
59 if (calendar.getTimeInMillis() < min) {
60 calendar.clear();
61 calendar.setTimeInMillis(min);
62 } else if (calendar.getTimeInMillis() > max) {
63 calendar.clear();
64 calendar.setTimeInMillis(max);
65 }
66 picker.init(
67 calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
68 calendar.get(Calendar.DAY_OF_MONTH), listener);
69
70 setLimits(picker, min, max);
71 }
72 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698