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