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.util.Log; 2077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglioimport java.lang.reflect.InvocationTargetException; 2277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglioimport java.lang.reflect.Method; 230dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamathimport java.util.Locale; 2477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 25c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglioclass ICUCompatIcs { 2677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 2777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio private static final String TAG = "ICUCompatIcs"; 2877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 29c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio private static Method sGetScriptMethod; 30c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio private static Method sAddLikelySubtagsMethod; 3177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 3277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio static { 3377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio try { 3477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio final Class<?> clazz = Class.forName("libcore.icu.ICU"); 3577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio if (clazz != null) { 36c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio sGetScriptMethod = clazz.getMethod("getScript", 3777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio new Class[]{ String.class }); 38c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio sAddLikelySubtagsMethod = clazz.getMethod("addLikelySubtags", 3977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio new Class[]{ String.class }); 4077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } catch (Exception e) { 420dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath sGetScriptMethod = null; 430dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath sAddLikelySubtagsMethod = null; 440dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath 4577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio // Nothing we can do here, we just log the exception 4677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio Log.w(TAG, e); 4777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 4977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 500dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath public static String maximizeAndGetScript(Locale locale) { 510dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath final String localeWithSubtags = addLikelySubtags(locale); 520dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath if (localeWithSubtags != null) { 530dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return getScript(localeWithSubtags); 540dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath } 550dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath 560dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return null; 570dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath } 580dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath 590dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath private static String getScript(String localeStr) { 6077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio try { 61c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio if (sGetScriptMethod != null) { 620dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath final Object[] args = new Object[] { localeStr }; 63c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio return (String) sGetScriptMethod.invoke(null, args); 6477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 6577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } catch (IllegalAccessException e) { 6677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio // Nothing we can do here, we just log the exception 6777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio Log.w(TAG, e); 6877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 6977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio catch (InvocationTargetException e) { 7077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio // Nothing we can do here, we just log the exception 7177f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio Log.w(TAG, e); 7277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 7377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio return null; 7477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 7577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio 760dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath private static String addLikelySubtags(Locale locale) { 770dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath final String localeStr = locale.toString(); 7877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio try { 79c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio if (sAddLikelySubtagsMethod != null) { 800dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath final Object[] args = new Object[] { localeStr }; 81c92d608279e5716a176e142abcd5e1b2148a0680Fabrice Di Meglio return (String) sAddLikelySubtagsMethod.invoke(null, args); 8277f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 8377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } catch (IllegalAccessException e) { 8477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio // Nothing we can do here, we just log the exception 8577f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio Log.w(TAG, e); 8677f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 8777f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio catch (InvocationTargetException e) { 8877f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio // Nothing we can do here, we just log the exception 8977f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio Log.w(TAG, e); 9077f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 910dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath 920dd57e65bcb8c9f0c7468a69ea3549a54a2482dfNarayan Kamath return localeStr; 9377f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio } 9477f6bada6f88acea9025afce3eb0127d45411798Fabrice Di Meglio} 95