blob: 0f66fd7e6d87567c0f73d06f1a3572240aa74756 [file] [log] [blame]
Xavier Ducrohet345f8662011-02-02 11:50:34 -08001/*
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
17package libcore.icu;
18
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080019import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
Deepanshu Gupta39e75832013-10-16 20:27:51 -070020import com.ibm.icu.text.DateTimePatternGenerator;
21import com.ibm.icu.util.ULocale;
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080022
Xavier Ducrohet345f8662011-02-02 11:50:34 -080023import java.util.Locale;
24
25/**
26 * Delegate implementing the native methods of libcore.icu.ICU
27 *
28 * Through the layoutlib_create tool, the original native methods of ICU have been replaced
29 * by calls to methods of the same name in this delegate class.
30 *
31 */
32public class ICU_Delegate {
33
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080034 // --- Java delegates
35
36 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080037 /*package*/ static String toLowerCase(String s, String localeName) {
38 return s.toLowerCase();
39 }
40
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080041 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080042 /*package*/ static String toUpperCase(String s, String localeName) {
43 return s.toUpperCase();
44 }
45
46 // --- Native methods accessing ICU's database.
47
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080048 @LayoutlibDelegate
Deepanshu Gupta0d7ebc52014-03-05 19:23:48 -080049 /*package*/ static String getBestDateTimePatternNative(String skeleton, String localeName) {
Deepanshu Gupta39e75832013-10-16 20:27:51 -070050 return DateTimePatternGenerator.getInstance(new ULocale(localeName))
51 .getBestPattern(skeleton);
Deepanshu Gupta279c00e2013-05-23 15:20:04 -070052 }
53
54 @LayoutlibDelegate
55 /*package*/ static String getCldrVersion() {
56 return "22.1.1"; // TODO: check what the right value should be.
57 }
58
59 @LayoutlibDelegate
Xavier Ducrohet66743a12011-06-15 14:43:42 -070060 /*package*/ static String getIcuVersion() {
61 return "unknown_layoutlib";
62 }
63
64 @LayoutlibDelegate
65 /*package*/ static String getUnicodeVersion() {
66 return "5.2";
67 }
68
69 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080070 /*package*/ static String[] getAvailableBreakIteratorLocalesNative() {
71 return new String[0];
72 }
73
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080074 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080075 /*package*/ static String[] getAvailableCalendarLocalesNative() {
76 return new String[0];
77 }
78
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080079 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080080 /*package*/ static String[] getAvailableCollatorLocalesNative() {
81 return new String[0];
82 }
83
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080084 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080085 /*package*/ static String[] getAvailableDateFormatLocalesNative() {
86 return new String[0];
87 }
88
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080089 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080090 /*package*/ static String[] getAvailableLocalesNative() {
91 return new String[0];
92 }
93
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080094 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -080095 /*package*/ static String[] getAvailableNumberFormatLocalesNative() {
96 return new String[0];
97 }
98
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -080099 @LayoutlibDelegate
Xavier Ducrohet66743a12011-06-15 14:43:42 -0700100 /*package*/ static String[] getAvailableCurrencyCodes() {
101 return new String[0];
102 }
103
104 @LayoutlibDelegate
105 /*package*/ static String getCurrencyCode(String locale) {
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800106 return "";
107 }
108
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800109 @LayoutlibDelegate
Xavier Ducrohet66743a12011-06-15 14:43:42 -0700110 /*package*/ static String getCurrencyDisplayName(String locale, String currencyCode) {
111 return "";
112 }
113
114 @LayoutlibDelegate
115 /*package*/ static int getCurrencyFractionDigits(String currencyCode) {
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800116 return 0;
117 }
118
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800119 @LayoutlibDelegate
Xavier Ducrohet66743a12011-06-15 14:43:42 -0700120 /*package*/ static String getCurrencySymbol(String locale, String currencyCode) {
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800121 return "";
122 }
123
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800124 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800125 /*package*/ static String getDisplayCountryNative(String countryCode, String locale) {
126 return "";
127 }
128
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800129 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800130 /*package*/ static String getDisplayLanguageNative(String languageCode, String locale) {
131 return "";
132 }
133
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800134 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800135 /*package*/ static String getDisplayVariantNative(String variantCode, String locale) {
136 return "";
137 }
138
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800139 @LayoutlibDelegate
Deepanshu Gupta0d7ebc52014-03-05 19:23:48 -0800140 /*package*/ static String getDisplayScriptNative(String variantCode, String locale) {
141 return "";
142 }
143
144 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800145 /*package*/ static String getISO3CountryNative(String locale) {
146 return "";
147 }
148
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800149 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800150 /*package*/ static String getISO3LanguageNative(String locale) {
151 return "";
152 }
153
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800154 @LayoutlibDelegate
Xavier Ducrohet66743a12011-06-15 14:43:42 -0700155 /*package*/ static String addLikelySubtags(String locale) {
156 return "";
157 }
158
Xavier Ducrohetfc511682011-06-21 11:03:29 -0700159 @LayoutlibDelegate
160 /*package*/ static String getScript(String locale) {
161 return "";
162 }
Xavier Ducrohet66743a12011-06-15 14:43:42 -0700163
164 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800165 /*package*/ static String[] getISOLanguagesNative() {
166 return Locale.getISOLanguages();
167 }
168
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800169 @LayoutlibDelegate
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800170 /*package*/ static String[] getISOCountriesNative() {
171 return Locale.getISOCountries();
172 }
173
Deepanshu Gupta0d7ebc52014-03-05 19:23:48 -0800174
Xavier Ducrohet9a4fe292011-02-09 17:17:49 -0800175 @LayoutlibDelegate
Deepanshu Gupta0d7ebc52014-03-05 19:23:48 -0800176 /*package*/ static String localeForLanguageTag(String languageTag, boolean strict) {
177 return "";
178 }
179
180 @LayoutlibDelegate
181 /*package*/ static String languageTagForLocale(String locale) {
182 return "";
183 }
184
185 @LayoutlibDelegate
186 /*package*/ static boolean initLocaleDataNative(String locale, LocaleData result) {
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800187
188 // Used by Calendar.
189 result.firstDayOfWeek = Integer.valueOf(1);
190 result.minimalDaysInFirstWeek = Integer.valueOf(1);
191
192 // Used by DateFormatSymbols.
193 result.amPm = new String[] { "AM", "PM" };
194 result.eras = new String[] { "BC", "AD" };
195
196 result.longMonthNames = new String[] { "January", "February", "March", "April", "May",
197 "June", "July", "August", "September", "October", "November", "December" };
198 result.shortMonthNames = new String[] { "Jan", "Feb", "Mar", "Apr", "May",
199 "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
200 result.longStandAloneMonthNames = result.longMonthNames;
201 result.shortStandAloneMonthNames = result.shortMonthNames;
202
Deepanshu Gupta81f74f42013-10-12 18:37:19 -0700203 // The platform code expects this to begin at index 1, rather than 0. It maps it directly to
204 // the constants from java.util.Calendar.<weekday>
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800205 result.longWeekdayNames = new String[] {
Deepanshu Gupta81f74f42013-10-12 18:37:19 -0700206 "", "Sunday", "Monday" ,"Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800207 result.shortWeekdayNames = new String[] {
Deepanshu Gupta81f74f42013-10-12 18:37:19 -0700208 "", "Sun", "Mon" ,"Tue", "Wed", "Thu", "Fri", "Sat" };
209 result.tinyWeekdayNames = new String[] {
210 "", "S", "M", "T", "W", "T", "F", "S" };
211
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800212 result.longStandAloneWeekdayNames = result.longWeekdayNames;
213 result.shortStandAloneWeekdayNames = result.shortWeekdayNames;
Deepanshu Gupta81f74f42013-10-12 18:37:19 -0700214 result.tinyStandAloneWeekdayNames = result.tinyWeekdayNames;
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800215
216 result.fullTimeFormat = "";
217 result.longTimeFormat = "";
218 result.mediumTimeFormat = "";
219 result.shortTimeFormat = "";
220
221 result.fullDateFormat = "";
222 result.longDateFormat = "";
223 result.mediumDateFormat = "";
224 result.shortDateFormat = "";
225
226 // Used by DecimalFormatSymbols.
227 result.zeroDigit = '0';
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800228 result.decimalSeparator = '.';
229 result.groupingSeparator = ',';
230 result.patternSeparator = ' ';
231 result.percent = '%';
232 result.perMill = '\u2030';
233 result.monetarySeparator = ' ';
Narayan Kamathc73991b2014-03-14 14:10:30 +0000234 result.minusSign = "-";
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800235 result.exponentSeparator = "e";
236 result.infinity = "\u221E";
237 result.NaN = "NaN";
238 // Also used by Currency.
239 result.currencySymbol = "$";
240 result.internationalCurrencySymbol = "USD";
241
242 // Used by DecimalFormat and NumberFormat.
243 result.numberPattern = "%f";
244 result.integerPattern = "%d";
245 result.currencyPattern = "%s";
246 result.percentPattern = "%f";
247
248 return true;
249 }
Deepanshu Guptae2b67772014-04-21 14:33:33 -0700250
251 @LayoutlibDelegate
252 /*package*/ static void setDefaultLocale(String locale) {
253 ICU.setDefaultLocale(locale);
254 }
255
256 @LayoutlibDelegate
257 /*package*/ static String getDefaultLocale() {
258 return ICU.getDefaultLocale();
259 }
Xavier Ducrohet345f8662011-02-02 11:50:34 -0800260}