• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 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 libcore.icu;
18 
19 import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
20 import com.ibm.icu.text.DateTimePatternGenerator;
21 import com.ibm.icu.util.Currency;
22 import com.ibm.icu.util.ULocale;
23 
24 import java.util.Locale;
25 
26 /**
27  * Delegate implementing the native methods of libcore.icu.ICU
28  *
29  * Through the layoutlib_create tool, the original native methods of ICU have been replaced
30  * by calls to methods of the same name in this delegate class.
31  *
32  */
33 public class ICU_Delegate {
34 
35     // --- Java delegates
36 
37     @LayoutlibDelegate
toLowerCase(String s, String localeName)38     /*package*/ static String toLowerCase(String s, String localeName) {
39         return s.toLowerCase();
40     }
41 
42     @LayoutlibDelegate
toUpperCase(String s, String localeName)43     /*package*/ static String toUpperCase(String s, String localeName) {
44         return s.toUpperCase();
45     }
46 
47     // --- Native methods accessing ICU's database.
48 
49     @LayoutlibDelegate
getBestDateTimePatternNative(String skeleton, String localeName)50     /*package*/ static String getBestDateTimePatternNative(String skeleton, String localeName) {
51         return DateTimePatternGenerator.getInstance(new ULocale(localeName))
52                 .getBestPattern(skeleton);
53     }
54 
55     @LayoutlibDelegate
getCldrVersion()56     /*package*/ static String getCldrVersion() {
57         return "22.1.1";      // TODO: check what the right value should be.
58     }
59 
60     @LayoutlibDelegate
getIcuVersion()61     /*package*/ static String getIcuVersion() {
62         return "unknown_layoutlib";
63     }
64 
65     @LayoutlibDelegate
getUnicodeVersion()66     /*package*/ static String getUnicodeVersion() {
67         return "5.2";
68     }
69 
70     @LayoutlibDelegate
getAvailableBreakIteratorLocalesNative()71     /*package*/ static String[] getAvailableBreakIteratorLocalesNative() {
72         return new String[0];
73     }
74 
75     @LayoutlibDelegate
getAvailableCalendarLocalesNative()76     /*package*/ static String[] getAvailableCalendarLocalesNative() {
77         return new String[0];
78     }
79 
80     @LayoutlibDelegate
getAvailableCollatorLocalesNative()81     /*package*/ static String[] getAvailableCollatorLocalesNative() {
82         return new String[0];
83     }
84 
85     @LayoutlibDelegate
getAvailableDateFormatLocalesNative()86     /*package*/ static String[] getAvailableDateFormatLocalesNative() {
87         return new String[0];
88     }
89 
90     @LayoutlibDelegate
getAvailableLocalesNative()91     /*package*/ static String[] getAvailableLocalesNative() {
92         return new String[0];
93     }
94 
95     @LayoutlibDelegate
getAvailableNumberFormatLocalesNative()96     /*package*/ static String[] getAvailableNumberFormatLocalesNative() {
97         return new String[0];
98     }
99 
100     @LayoutlibDelegate
getAvailableCurrencyCodes()101     /*package*/ static String[] getAvailableCurrencyCodes() {
102         return new String[0];
103     }
104 
105     @LayoutlibDelegate
getCurrencyCode(String locale)106     /*package*/ static String getCurrencyCode(String locale) {
107         return "";
108     }
109 
110     @LayoutlibDelegate
getCurrencyDisplayName(String locale, String currencyCode)111     /*package*/ static String getCurrencyDisplayName(String locale, String currencyCode) {
112         return "";
113     }
114 
115     @LayoutlibDelegate
getCurrencyFractionDigits(String currencyCode)116     /*package*/ static int getCurrencyFractionDigits(String currencyCode) {
117         return 0;
118     }
119 
120     @LayoutlibDelegate
getCurrencyNumericCode(String currencyCode)121     /*package*/ static int getCurrencyNumericCode(String currencyCode) {
122         return Currency.getInstance(currencyCode).getNumericCode();
123     }
124 
125     @LayoutlibDelegate
getCurrencySymbol(String locale, String currencyCode)126     /*package*/ static String getCurrencySymbol(String locale, String currencyCode) {
127         return "";
128     }
129 
130     @LayoutlibDelegate
getDisplayCountryNative(String countryCode, String locale)131     /*package*/ static String getDisplayCountryNative(String countryCode, String locale) {
132         return "";
133     }
134 
135     @LayoutlibDelegate
getDisplayLanguageNative(String languageCode, String locale)136     /*package*/ static String getDisplayLanguageNative(String languageCode, String locale) {
137         return "";
138     }
139 
140     @LayoutlibDelegate
getDisplayVariantNative(String variantCode, String locale)141     /*package*/ static String getDisplayVariantNative(String variantCode, String locale) {
142         return "";
143     }
144 
145     @LayoutlibDelegate
getDisplayScriptNative(String variantCode, String locale)146     /*package*/ static String getDisplayScriptNative(String variantCode, String locale) {
147         return "";
148     }
149 
150     @LayoutlibDelegate
getISO3Country(String locale)151     /*package*/ static String getISO3Country(String locale) {
152         return "";
153     }
154 
155     @LayoutlibDelegate
getISO3Language(String locale)156     /*package*/ static String getISO3Language(String locale) {
157         return "";
158     }
159 
160     @LayoutlibDelegate
addLikelySubtags(String locale)161     /*package*/ static String addLikelySubtags(String locale) {
162         return "";
163     }
164 
165     @LayoutlibDelegate
getScript(String locale)166     /*package*/ static String getScript(String locale) {
167         return "";
168     }
169 
170     @LayoutlibDelegate
getISOLanguagesNative()171     /*package*/ static String[] getISOLanguagesNative() {
172         return Locale.getISOLanguages();
173     }
174 
175     @LayoutlibDelegate
getISOCountriesNative()176     /*package*/ static String[] getISOCountriesNative() {
177         return Locale.getISOCountries();
178     }
179 
180     @LayoutlibDelegate
initLocaleDataNative(String locale, LocaleData result)181     /*package*/ static boolean initLocaleDataNative(String locale, LocaleData result) {
182 
183         // Used by Calendar.
184         result.firstDayOfWeek = Integer.valueOf(1);
185         result.minimalDaysInFirstWeek = Integer.valueOf(1);
186 
187         // Used by DateFormatSymbols.
188         result.amPm = new String[] { "AM", "PM" };
189         result.eras = new String[] { "BC", "AD" };
190 
191         result.longMonthNames = new String[] { "January", "February", "March", "April", "May",
192                 "June", "July", "August", "September", "October", "November", "December" };
193         result.shortMonthNames = new String[] { "Jan", "Feb", "Mar", "Apr", "May",
194                 "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
195         result.longStandAloneMonthNames = result.longMonthNames;
196         result.shortStandAloneMonthNames = result.shortMonthNames;
197 
198         // The platform code expects this to begin at index 1, rather than 0. It maps it directly to
199         // the constants from java.util.Calendar.<weekday>
200         result.longWeekdayNames = new String[] {
201                 "", "Sunday", "Monday" ,"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
202         result.shortWeekdayNames = new String[] {
203                 "", "Sun", "Mon" ,"Tue", "Wed", "Thu", "Fri", "Sat" };
204         result.tinyWeekdayNames = new String[] {
205                 "", "S", "M", "T", "W", "T", "F", "S" };
206 
207         result.longStandAloneWeekdayNames = result.longWeekdayNames;
208         result.shortStandAloneWeekdayNames = result.shortWeekdayNames;
209         result.tinyStandAloneWeekdayNames = result.tinyWeekdayNames;
210 
211         result.fullTimeFormat = "";
212         result.longTimeFormat = "";
213         result.mediumTimeFormat = "";
214         result.shortTimeFormat = "";
215 
216         result.fullDateFormat = "";
217         result.longDateFormat = "";
218         result.mediumDateFormat = "";
219         result.shortDateFormat = "";
220 
221         // Used by DecimalFormatSymbols.
222         result.zeroDigit = '0';
223         result.decimalSeparator = '.';
224         result.groupingSeparator = ',';
225         result.patternSeparator = ' ';
226         result.percent = "%";
227         result.perMill = '\u2030';
228         result.monetarySeparator = ' ';
229         result.minusSign = "-";
230         result.exponentSeparator = "e";
231         result.infinity = "\u221E";
232         result.NaN = "NaN";
233         // Also used by Currency.
234         result.currencySymbol = "$";
235         result.internationalCurrencySymbol = "USD";
236 
237         // Used by DecimalFormat and NumberFormat.
238         result.numberPattern = "%f";
239         result.integerPattern = "%d";
240         result.currencyPattern = "%s";
241         result.percentPattern = "%f";
242 
243         return true;
244     }
245 
246     @LayoutlibDelegate
setDefaultLocale(String locale)247     /*package*/ static void setDefaultLocale(String locale) {
248         ICU.setDefaultLocale(locale);
249     }
250 
251     @LayoutlibDelegate
getDefaultLocale()252     /*package*/ static String getDefaultLocale() {
253         return ICU.getDefaultLocale();
254     }
255 }
256