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