Utils.java revision 3e9818e0267619fecebd55095ab26c53eff92e93
1b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein/*
2b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Copyright (C) 2013 The Android Open Source Project
3b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein *
4b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Licensed under the Apache License, Version 2.0 (the "License");
5b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * you may not use this file except in compliance with the License.
6b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * You may obtain a copy of the License at
7b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein *
8b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein *      http://www.apache.org/licenses/LICENSE-2.0
9b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein *
10b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Unless required by applicable law or agreed to in writing, software
11b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * distributed under the License is distributed on an "AS IS" BASIS,
12b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * See the License for the specific language governing permissions and
14b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * limitations under the License.
15b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein */
16b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein
17b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinpackage com.android.datetimepicker;
18b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein
19b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinimport android.os.Build;
203e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.text.format.Time;
21b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein
223e9818e0267619fecebd55095ab26c53eff92e93James Kungimport java.util.Calendar;
233e9818e0267619fecebd55095ab26c53eff92e93James Kung
243e9818e0267619fecebd55095ab26c53eff92e93James Kung/**
253e9818e0267619fecebd55095ab26c53eff92e93James Kung * Utility helper functions for time and date pickers.
263e9818e0267619fecebd55095ab26c53eff92e93James Kung */
27b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinpublic class Utils {
283e9818e0267619fecebd55095ab26c53eff92e93James Kung
293e9818e0267619fecebd55095ab26c53eff92e93James Kung    public static final int MONDAY_BEFORE_JULIAN_EPOCH = Time.EPOCH_JULIAN_DAY - 3;
303e9818e0267619fecebd55095ab26c53eff92e93James Kung
313e9818e0267619fecebd55095ab26c53eff92e93James Kung    static final String SHARED_PREFS_NAME = "com.android.calendar_preferences";
323e9818e0267619fecebd55095ab26c53eff92e93James Kung
33b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein    public static boolean isJellybeanOrLater() {
343e9818e0267619fecebd55095ab26c53eff92e93James Kung      return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
353e9818e0267619fecebd55095ab26c53eff92e93James Kung    }
363e9818e0267619fecebd55095ab26c53eff92e93James Kung
373e9818e0267619fecebd55095ab26c53eff92e93James Kung    public static int getDaysInMonth(int month, int year) {
383e9818e0267619fecebd55095ab26c53eff92e93James Kung        switch (month) {
393e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.JANUARY:
403e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.MARCH:
413e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.MAY:
423e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.JULY:
433e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.AUGUST:
443e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.OCTOBER:
453e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.DECEMBER:
463e9818e0267619fecebd55095ab26c53eff92e93James Kung                return 31;
473e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.APRIL:
483e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.JUNE:
493e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.SEPTEMBER:
503e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.NOVEMBER:
513e9818e0267619fecebd55095ab26c53eff92e93James Kung                return 30;
523e9818e0267619fecebd55095ab26c53eff92e93James Kung            case Calendar.FEBRUARY:
533e9818e0267619fecebd55095ab26c53eff92e93James Kung                return (year % 4 == 0) ? 29 : 28;
543e9818e0267619fecebd55095ab26c53eff92e93James Kung            default:
553e9818e0267619fecebd55095ab26c53eff92e93James Kung                throw new IllegalArgumentException("Invalid Month");
563e9818e0267619fecebd55095ab26c53eff92e93James Kung        }
573e9818e0267619fecebd55095ab26c53eff92e93James Kung    }
583e9818e0267619fecebd55095ab26c53eff92e93James Kung
593e9818e0267619fecebd55095ab26c53eff92e93James Kung    /**
603e9818e0267619fecebd55095ab26c53eff92e93James Kung     * Takes a number of weeks since the epoch and calculates the Julian day of
613e9818e0267619fecebd55095ab26c53eff92e93James Kung     * the Monday for that week.
623e9818e0267619fecebd55095ab26c53eff92e93James Kung     *
633e9818e0267619fecebd55095ab26c53eff92e93James Kung     * This assumes that the week containing the {@link Time#EPOCH_JULIAN_DAY}
643e9818e0267619fecebd55095ab26c53eff92e93James Kung     * is considered week 0. It returns the Julian day for the Monday
653e9818e0267619fecebd55095ab26c53eff92e93James Kung     * {@code week} weeks after the Monday of the week containing the epoch.
663e9818e0267619fecebd55095ab26c53eff92e93James Kung     *
673e9818e0267619fecebd55095ab26c53eff92e93James Kung     * @param week Number of weeks since the epoch
683e9818e0267619fecebd55095ab26c53eff92e93James Kung     * @return The julian day for the Monday of the given week since the epoch
693e9818e0267619fecebd55095ab26c53eff92e93James Kung     */
703e9818e0267619fecebd55095ab26c53eff92e93James Kung    public static int getJulianMondayFromWeeksSinceEpoch(int week) {
713e9818e0267619fecebd55095ab26c53eff92e93James Kung        return MONDAY_BEFORE_JULIAN_EPOCH + week * 7;
723e9818e0267619fecebd55095ab26c53eff92e93James Kung    }
733e9818e0267619fecebd55095ab26c53eff92e93James Kung
743e9818e0267619fecebd55095ab26c53eff92e93James Kung    /**
753e9818e0267619fecebd55095ab26c53eff92e93James Kung     * Returns the week since {@link Time#EPOCH_JULIAN_DAY} (Jan 1, 1970)
763e9818e0267619fecebd55095ab26c53eff92e93James Kung     * adjusted for first day of week.
773e9818e0267619fecebd55095ab26c53eff92e93James Kung     *
783e9818e0267619fecebd55095ab26c53eff92e93James Kung     * This takes a julian day and the week start day and calculates which
793e9818e0267619fecebd55095ab26c53eff92e93James Kung     * week since {@link Time#EPOCH_JULIAN_DAY} that day occurs in, starting
803e9818e0267619fecebd55095ab26c53eff92e93James Kung     * at 0. *Do not* use this to compute the ISO week number for the year.
813e9818e0267619fecebd55095ab26c53eff92e93James Kung     *
823e9818e0267619fecebd55095ab26c53eff92e93James Kung     * @param julianDay The julian day to calculate the week number for
833e9818e0267619fecebd55095ab26c53eff92e93James Kung     * @param firstDayOfWeek Which week day is the first day of the week,
843e9818e0267619fecebd55095ab26c53eff92e93James Kung     *          see {@link Time#SUNDAY}
853e9818e0267619fecebd55095ab26c53eff92e93James Kung     * @return Weeks since the epoch
863e9818e0267619fecebd55095ab26c53eff92e93James Kung     */
873e9818e0267619fecebd55095ab26c53eff92e93James Kung    public static int getWeeksSinceEpochFromJulianDay(int julianDay, int firstDayOfWeek) {
883e9818e0267619fecebd55095ab26c53eff92e93James Kung        int diff = Time.THURSDAY - firstDayOfWeek;
893e9818e0267619fecebd55095ab26c53eff92e93James Kung        if (diff < 0) {
903e9818e0267619fecebd55095ab26c53eff92e93James Kung            diff += 7;
913e9818e0267619fecebd55095ab26c53eff92e93James Kung        }
923e9818e0267619fecebd55095ab26c53eff92e93James Kung        int refDay = Time.EPOCH_JULIAN_DAY - diff;
933e9818e0267619fecebd55095ab26c53eff92e93James Kung        return (julianDay - refDay) / 7;
94b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein    }
95b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein}
96