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