11d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri/*
21d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * Copyright (C) 2017 The Android Open Source Project
31d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri *
41d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * Licensed under the Apache License, Version 2.0 (the "License");
51d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * you may not use this file except in compliance with the License.
61d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * You may obtain a copy of the License at
71d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri *
81d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri *      http://www.apache.org/licenses/LICENSE-2.0
91d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri *
101d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * Unless required by applicable law or agreed to in writing, software
111d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * distributed under the License is distributed on an "AS IS" BASIS,
121d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * See the License for the specific language governing permissions and
141d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * limitations under the License.
151d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri */
161d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
171d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiripackage android.support.v17.leanback.widget.picker;
181d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
191d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriimport android.content.res.Resources;
201d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriimport android.support.v17.leanback.R;
211d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
221d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriimport java.text.DateFormatSymbols;
231d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriimport java.util.Calendar;
241d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriimport java.util.Locale;
251d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
261d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri/**
271d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * Utility class that provides Date/Time related constants as well as locale-specific calendar for
281d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri * both {@link DatePicker} and {@link TimePicker}.
291d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri */
301d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiriclass PickerUtility {
311d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
321d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static class DateConstant {
331d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final Locale locale;
341d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] months;
351d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] days;
361d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String dateSeparator;
371d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
381d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        private DateConstant(Locale locale, Resources resources) {
391d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            this.locale = locale;
401d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
411d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            months = symbols.getShortMonths();
421d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            Calendar calendar = Calendar.getInstance(locale);
431d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            days = createStringIntArrays(calendar.getMinimum(Calendar.DAY_OF_MONTH),
441d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri                    calendar.getMaximum(Calendar.DAY_OF_MONTH), "%02d");
451d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            dateSeparator = resources.getString(R.string.lb_date_separator);
461d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        }
471d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
481d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
491d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static class TimeConstant {
501d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final Locale locale;
511d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] hours12;
521d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] hours24;
531d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] minutes;
541d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String[] ampm;
551d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        public final String timeSeparator;
561d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
571d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        private TimeConstant(Locale locale, Resources resources) {
581d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            this.locale = locale;
591d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
601d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            hours12 = createStringIntArrays(1, 12, "%02d");
611d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            hours24 = createStringIntArrays(0, 23, "%02d");
621d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            minutes = createStringIntArrays(0, 59, "%02d");
631d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            ampm = symbols.getAmPmStrings();
641d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            timeSeparator = resources.getString(R.string.lb_time_separator);
651d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        }
661d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
671d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
681d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static DateConstant getDateConstantInstance(Locale locale, Resources resources) {
691d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        return new DateConstant(locale, resources);
701d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
711d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
721d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static TimeConstant getTimeConstantInstance(Locale locale, Resources resources) {
731d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        return new TimeConstant(locale, resources);
741d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
751d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
761d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
771d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static String[] createStringIntArrays(int firstNumber, int lastNumber, String format) {
781d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        String[] array = new String[lastNumber - firstNumber + 1];
791d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        for (int i = firstNumber; i <= lastNumber; i++) {
801d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            if (format != null) {
811d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri                array[i - firstNumber] = String.format(format, i);
821d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            } else {
831d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri                array[i - firstNumber] = String.valueOf(i);
841d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            }
851d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        }
861d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        return array;
871d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
881d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri
891d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    public static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
901d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        if (oldCalendar == null) {
911d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            return Calendar.getInstance(locale);
921d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        } else {
931d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            final long currentTimeMillis = oldCalendar.getTimeInMillis();
941d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            Calendar newCalendar = Calendar.getInstance(locale);
951d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            newCalendar.setTimeInMillis(currentTimeMillis);
961d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri            return newCalendar;
971d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri        }
981d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri    }
991d43a78a12bd32b07d299123f3e4f0df19c71f52Keyvan Amiri}
100