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