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 
17 package androidx.leanback.widget.picker;
18 
19 import android.content.res.Resources;
20 
21 import java.text.DateFormatSymbols;
22 import java.util.Calendar;
23 import java.util.Locale;
24 
25 /**
26  * Utility class that provides Date/Time related constants as well as locale-specific calendar for
27  * both {@link DatePicker} and {@link TimePicker}.
28  */
29 class PickerUtility {
30 
31     public static class DateConstant {
32         public final Locale locale;
33         public final String[] months;
34         public final String[] days;
35 
DateConstant(Locale locale, Resources resources)36         DateConstant(Locale locale, Resources resources) {
37             this.locale = locale;
38             DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
39             months = symbols.getShortMonths();
40             Calendar calendar = Calendar.getInstance(locale);
41             days = createStringIntArrays(calendar.getMinimum(Calendar.DAY_OF_MONTH),
42                     calendar.getMaximum(Calendar.DAY_OF_MONTH), "%02d");
43         }
44     }
45 
46     public static class TimeConstant {
47         public final Locale locale;
48         public final String[] hours12;
49         public final String[] hours24;
50         public final String[] minutes;
51         public final String[] ampm;
52 
TimeConstant(Locale locale, Resources resources)53         TimeConstant(Locale locale, Resources resources) {
54             this.locale = locale;
55             DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
56             hours12 = createStringIntArrays(1, 12, "%02d");
57             hours24 = createStringIntArrays(0, 23, "%02d");
58             minutes = createStringIntArrays(0, 59, "%02d");
59             ampm = symbols.getAmPmStrings();
60         }
61     }
62 
getDateConstantInstance(Locale locale, Resources resources)63     public static DateConstant getDateConstantInstance(Locale locale, Resources resources) {
64         return new DateConstant(locale, resources);
65     }
66 
getTimeConstantInstance(Locale locale, Resources resources)67     public static TimeConstant getTimeConstantInstance(Locale locale, Resources resources) {
68         return new TimeConstant(locale, resources);
69     }
70 
71 
createStringIntArrays(int firstNumber, int lastNumber, String format)72     public static String[] createStringIntArrays(int firstNumber, int lastNumber, String format) {
73         String[] array = new String[lastNumber - firstNumber + 1];
74         for (int i = firstNumber; i <= lastNumber; i++) {
75             if (format != null) {
76                 array[i - firstNumber] = String.format(format, i);
77             } else {
78                 array[i - firstNumber] = String.valueOf(i);
79             }
80         }
81         return array;
82     }
83 
getCalendarForLocale(Calendar oldCalendar, Locale locale)84     public static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
85         if (oldCalendar == null) {
86             return Calendar.getInstance(locale);
87         } else {
88             final long currentTimeMillis = oldCalendar.getTimeInMillis();
89             Calendar newCalendar = Calendar.getInstance(locale);
90             newCalendar.setTimeInMillis(currentTimeMillis);
91             return newCalendar;
92         }
93     }
94 
PickerUtility()95     private PickerUtility() {
96     }
97 }
98