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

Unified Diff: content/public/android/java/src/org/chromium/content/browser/input/WeekPicker.java

Issue 15057004: Week picker for android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed min/max bug 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 side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/input/WeekPicker.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/WeekPicker.java b/content/public/android/java/src/org/chromium/content/browser/input/WeekPicker.java
new file mode 100644
index 0000000000000000000000000000000000000000..117793b19786e630a74627d555bf108b56550d75
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/WeekPicker.java
@@ -0,0 +1,130 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser.input;
+
+import android.content.Context;
+
+import java.util.Calendar;
+
+import org.chromium.content.R;
+
+// This class is heavily based on android.widget.DatePicker.
+public class WeekPicker extends TwoFieldDatePicker {
+
+ public WeekPicker(Context context, long minValue, long maxValue) {
+ super(context, minValue, maxValue);
+
+ getPositionInYearSpinner().setContentDescription(
+ getResources().getString(R.string.accessibility_date_picker_week));
+
+ // initialize to current date
+ Calendar cal = Calendar.getInstance();
+ cal.setFirstDayOfWeek(Calendar.MONDAY);
+ cal.setMinimalDaysInFirstWeek(4);
+ cal.setTimeInMillis(System.currentTimeMillis());
+ init(getISOWeekYearForDate(cal), getWeekForDate(cal), null);
+ }
+
+ private Calendar createDateFromWeek(int year, int week) {
+ Calendar date = Calendar.getInstance();
+ date.clear();
+ date.setFirstDayOfWeek(Calendar.MONDAY);
+ date.setMinimalDaysInFirstWeek(4);
+ date.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+ date.set(Calendar.YEAR, year);
+ date.set(Calendar.WEEK_OF_YEAR, week);
+ return date;
+ }
+
+ @Override
+ protected Calendar createDateFromValue(long value) {
+ Calendar date = Calendar.getInstance();
+ date.clear();
+ date.setFirstDayOfWeek(Calendar.MONDAY);
+ date.setMinimalDaysInFirstWeek(4);
+ date.setTimeInMillis(value);
+ return date;
+ }
+
+ public static int getISOWeekYearForDate(Calendar date) {
+ int year = date.get(Calendar.YEAR);
+ int month = date.get(Calendar.MONTH);
+ int week = date.get(Calendar.WEEK_OF_YEAR);
+ if (month == 0 && week > 51) {
+ year--;
+ } else if (month == 11 && week == 1) {
+ year++;
+ }
+ return year;
+ }
+
+ public static int getWeekForDate(Calendar date) {
+ return date.get(Calendar.WEEK_OF_YEAR);
+ }
+
+ @Override
+ protected void setCurrentDate(int year, int week) {
+ Calendar date = createDateFromWeek(year, week);
+ if (date.before(getMinDate())) {
+ setCurrentDate(getMinDate());
+ } else if (date.after(getMaxDate())) {
+ setCurrentDate(getMaxDate());
+ } else {
+ setCurrentDate(date);
+ }
+ }
+
+ private int getNumberOfWeeks() {
+ // Create a date in the middle of the year, where the week year matches the year.
+ Calendar date = createDateFromWeek(getYear(), 20);
+ return date.getActualMaximum(Calendar.WEEK_OF_YEAR);
+ }
+
+ /**
+ * @return The selected year.
+ */
+ @Override
+ public int getYear() {
+ return getISOWeekYearForDate(getCurrentDate());
+ }
+
+ /**
+ * @return The selected week.
+ */
+ public int getWeek() {
+ return getWeekForDate(getCurrentDate());
+ }
+
+ @Override
+ public int getPositionInYear() {
+ return getWeek();
+ }
+
+ @Override
+ protected int getMaxYear() {
+ return getISOWeekYearForDate(getMaxDate());
+ }
+
+ @Override
+ protected int getMinYear() {
+ return getISOWeekYearForDate(getMinDate());
+ }
+
+ @Override
+ protected int getMaxPositionInYear() {
+ if (getYear() == getISOWeekYearForDate(getMaxDate())) {
+ return getWeekForDate(getMaxDate());
+ }
+ return getNumberOfWeeks();
+ }
+
+ @Override
+ protected int getMinPositionInYear() {
+ if (getYear() == getISOWeekYearForDate(getMinDate())) {
+ return getWeekForDate(getMinDate());
+ }
+ return 1;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698