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 210dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamathimport java.util.Locale; 220dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath 2377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Megliopublic class ICUCompat { 2477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio interface ICUCompatImpl { 260dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public String maximizeAndGetScript(Locale locale); 2777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 2877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static class ICUCompatImplBase implements ICUCompatImpl { 3077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 310dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public String maximizeAndGetScript(Locale locale) { 3277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return null; 3377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 3477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 3577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 3677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static class ICUCompatImplIcs implements ICUCompatImpl { 3777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 380dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public String maximizeAndGetScript(Locale locale) { 390dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return ICUCompatIcs.maximizeAndGetScript(locale); 4077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 410dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath } 4277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 430dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath static class ICUCompatImplLollipop implements ICUCompatImpl { 4477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio @Override 450dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public String maximizeAndGetScript(Locale locale) { 460dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return ICUCompatApi23.maximizeAndGetScript(locale); 4777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 5077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio private static final ICUCompatImpl IMPL; 5177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 5277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static { 5377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio final int version = Build.VERSION.SDK_INT; 540dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath if (version >= 21) { 550dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath IMPL = new ICUCompatImplLollipop(); 560dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath } else 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 /** 640dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath * Returns the script for a given Locale. 6577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 660dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath * If the locale isn't already in its maximal form, likely subtags for the provided locale 670dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath * ID are added before we determine the script. For further details, see the following CLDR 680dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath * technical report : 6977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * http://www.unicode.org/reports/tr35/#Likely_Subtags 7177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * If locale is already in the maximal form, or there is no data available for maximization, 7377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * it will be just returned. For example, "und-Zzzz" cannot be maximized, since there is no 7477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * reasonable maximization. 7577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * Examples: 7777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 7877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "en" maximizes to "en_Latn_US" 7977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "de" maximizes to "de_Latn_US" 8077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "sr" maximizes to "sr_Cyrl_RS" 8177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.) 8277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.) 8377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio * 840dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath * @return 8577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio */ 860dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public static String maximizeAndGetScript(Locale locale) { 870dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return IMPL.maximizeAndGetScript(locale); 8877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 8977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio} 90