Add sources for API 35 Downloaded from https://dl.google.com/android/repository/source-35_r01.zip using SdkManager in Studio Test: None Change-Id: I83f78aa820b66edfdc9f8594d17bc7b6cacccec1
diff --git a/android-35/android/icu/impl/CalendarUtil.java b/android-35/android/icu/impl/CalendarUtil.java new file mode 100644 index 0000000..7307935 --- /dev/null +++ b/android-35/android/icu/impl/CalendarUtil.java
@@ -0,0 +1,99 @@ +/* GENERATED SOURCE. DO NOT MODIFY. */ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* + ******************************************************************************* + * Copyright (C) 2009,2016 International Business Machines Corporation and + * others. All Rights Reserved. + ******************************************************************************* + */ +package android.icu.impl; + +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.TreeMap; + +import android.icu.util.ULocale; +import android.icu.util.UResourceBundle; + +/** + * Calendar utilities. + * + * Date/time format service classes in android.icu.text packages + * sometimes need to access calendar internal APIs. But calendar + * classes are in android.icu.util package, so the package local + * cannot be used. This class is added in android.icu.impl + * package for sharing some calendar internal code for calendar + * and date format. + * @hide Only a subset of ICU is exposed in Android + */ +public final class CalendarUtil { + private static final String CALKEY = "calendar"; + private static final String DEFCAL = "gregorian"; + + /** + * Returns a calendar type for the given locale. + * When the given locale has calendar keyword, the + * value of calendar keyword is returned. Otherwise, + * the default calendar type for the locale is returned. + * @param loc The locale + * @return Calendar type string, such as "gregorian" + */ + public static String getCalendarType(ULocale loc) { + String calType = loc.getKeywordValue(CALKEY); + if (calType != null) { + // Convert to lower case, because getKeywordValue does not + // canonicalize keyword value. + return calType.toLowerCase(Locale.ROOT); + } + + // Canonicalize, so that an old-style variant will be transformed to keywords. + ULocale canonical = ULocale.createCanonical(loc.toString()); + calType = canonical.getKeywordValue(CALKEY); + if (calType != null) { + return calType; + } + + // When calendar keyword is not available, use the locale's + // region to get the default calendar type + String region = ULocale.getRegionForSupplementalData(canonical, true); + return CalendarPreferences.INSTANCE.getCalendarTypeForRegion(region); + } + + private static final class CalendarPreferences extends UResource.Sink { + private static final CalendarPreferences INSTANCE = new CalendarPreferences(); + // A TreeMap should be good because we expect very few entries. + Map<String, String> prefs = new TreeMap<String, String>(); + + CalendarPreferences() { + try { + ICUResourceBundle rb = (ICUResourceBundle)UResourceBundle.getBundleInstance( + ICUData.ICU_BASE_NAME, "supplementalData"); + rb.getAllItemsWithFallback("calendarPreferenceData", this); + } catch (MissingResourceException mre) { + // Always use "gregorian". + } + } + + String getCalendarTypeForRegion(String region) { + String type = prefs.get(region); + return type == null ? DEFCAL : type; + } + + @Override + public void put(UResource.Key key, UResource.Value value, boolean noFallback) { + UResource.Table calendarPreferenceData = value.getTable(); + for (int i = 0; calendarPreferenceData.getKeyAndValue(i, key, value); ++i) { + UResource.Array types = value.getArray(); + // The first calendar type is the default for the region. + if (types.getValue(0, value)) { + String type = value.getString(); + if (!type.equals(DEFCAL)) { + prefs.put(key.toString(), type); + } + } + } + } + } +}