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);
+ }
+ }
+ }
+ }
+ }
+}