177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio/* 277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Copyright (C) 2013 The Android Open Source Project 377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License"); 577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * you may not use this file except in compliance with the License. 677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * You may obtain a copy of the License at 777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * http://www.apache.org/licenses/LICENSE-2.0 977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 1077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software 1177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS, 1277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * See the License for the specific language governing permissions and 1477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * limitations under the License. 1577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio */ 1677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 1777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Megliopackage android.support.v4.text; 1877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 1977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglioimport android.os.Build; 2077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Megliopublic class ICUCompat { 2277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio interface ICUCompatImpl { 2477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String getScript(String locale); 2577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String addLikelySubtags(String locale); 2677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 2777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static class ICUCompatImplBase implements ICUCompatImpl { 2977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 3077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String getScript(String locale) { 3177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return null; 3277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 3377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 3477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 3577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String addLikelySubtags(String locale) { 3677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return locale; 3777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 3877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 3977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 4077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static class ICUCompatImplIcs implements ICUCompatImpl { 4177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 4277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String getScript(String locale) { 4377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return ICUCompatIcs.getScript(locale); 4477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 4677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 4777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public String addLikelySubtags(String locale) { 4877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return ICUCompatIcs.addLikelySubtags(locale); 4977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 5077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 5177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 5277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio private static final ICUCompatImpl IMPL; 5377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 5477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static { 5577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio final int version = Build.VERSION.SDK_INT; 5677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio if (version >= 14) { 5777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio IMPL = new ICUCompatImplIcs(); 5877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } else { 5977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio IMPL = new ICUCompatImplBase(); 6077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 6177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 6277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 6377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio /** 6477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Returns the script (language code) of a script. 6577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 6677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * @param locale The locale. 6777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * @return a String representing the script (language code) of the locale. 6877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio */ 6977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public static String getScript(String locale) { 7077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return IMPL.getScript(locale); 7177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 7277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 7377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio /** 7477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Add the likely subtags for a provided locale ID, per the algorithm described in the following 7577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * CLDR technical report: 7677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * http://www.unicode.org/reports/tr35/#Likely_Subtags 7877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * If locale is already in the maximal form, or there is no data available for maximization, 8077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * it will be just returned. For example, "und-Zzzz" cannot be maximized, since there is no 8177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * reasonable maximization. 8277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 8377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Examples: 8477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 8577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "en" maximizes to "en_Latn_US" 8677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "de" maximizes to "de_Latn_US" 8777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "sr" maximizes to "sr_Cyrl_RS" 8877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.) 8977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.) 9077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 9177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * @param locale The locale to maximize 9277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 9377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * @return the maximized locale 9477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio */ 9577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio public static String addLikelySubtags(String locale) { 9677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return IMPL.addLikelySubtags(locale); 9777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 9877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio} 99