PickerUtility.java revision 1d43a78a12bd32b07d299123f3e4f0df19c71f52
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.support.v17.leanback.widget.picker;
18
19import android.content.res.Resources;
20import android.support.v17.leanback.R;
21
22import java.text.DateFormatSymbols;
23import java.util.Calendar;
24import java.util.Locale;
25
26/**
27 * Utility class that provides Date/Time related constants as well as locale-specific calendar for
28 * both {@link DatePicker} and {@link TimePicker}.
29 */
30class PickerUtility {
31
32    public static class DateConstant {
33        public final Locale locale;
34        public final String[] months;
35        public final String[] days;
36        public final String dateSeparator;
37
38        private DateConstant(Locale locale, Resources resources) {
39            this.locale = locale;
40            DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
41            months = symbols.getShortMonths();
42            Calendar calendar = Calendar.getInstance(locale);
43            days = createStringIntArrays(calendar.getMinimum(Calendar.DAY_OF_MONTH),
44                    calendar.getMaximum(Calendar.DAY_OF_MONTH), "%02d");
45            dateSeparator = resources.getString(R.string.lb_date_separator);
46        }
47    }
48
49    public static class TimeConstant {
50        public final Locale locale;
51        public final String[] hours12;
52        public final String[] hours24;
53        public final String[] minutes;
54        public final String[] ampm;
55        public final String timeSeparator;
56
57        private TimeConstant(Locale locale, Resources resources) {
58            this.locale = locale;
59            DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
60            hours12 = createStringIntArrays(1, 12, "%02d");
61            hours24 = createStringIntArrays(0, 23, "%02d");
62            minutes = createStringIntArrays(0, 59, "%02d");
63            ampm = symbols.getAmPmStrings();
64            timeSeparator = resources.getString(R.string.lb_time_separator);
65        }
66    }
67
68    public static DateConstant getDateConstantInstance(Locale locale, Resources resources) {
69        return new DateConstant(locale, resources);
70    }
71
72    public static TimeConstant getTimeConstantInstance(Locale locale, Resources resources) {
73        return new TimeConstant(locale, resources);
74    }
75
76
77    public static String[] createStringIntArrays(int firstNumber, int lastNumber, String format) {
78        String[] array = new String[lastNumber - firstNumber + 1];
79        for (int i = firstNumber; i <= lastNumber; i++) {
80            if (format != null) {
81                array[i - firstNumber] = String.format(format, i);
82            } else {
83                array[i - firstNumber] = String.valueOf(i);
84            }
85        }
86        return array;
87    }
88
89    public static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
90        if (oldCalendar == null) {
91            return Calendar.getInstance(locale);
92        } else {
93            final long currentTimeMillis = oldCalendar.getTimeInMillis();
94            Calendar newCalendar = Calendar.getInstance(locale);
95            newCalendar.setTimeInMillis(currentTimeMillis);
96            return newCalendar;
97        }
98    }
99}
100