11a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard/*
21a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * Copyright (C) 2013 The Android Open Source Project
31a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard *
41a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * Licensed under the Apache License, Version 2.0 (the "License");
51a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * you may not use this file except in compliance with the License.
61a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * You may obtain a copy of the License at
71a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard *
81a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard *      http://www.apache.org/licenses/LICENSE-2.0
91a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard *
101a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * Unless required by applicable law or agreed to in writing, software
111a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * distributed under the License is distributed on an "AS IS" BASIS,
121a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * See the License for the specific language governing permissions and
141a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard * limitations under the License.
151a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard */
161a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
171a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardpackage com.android.inputmethod.compat;
181a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
191a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardimport android.content.Context;
201a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardimport android.provider.UserDictionary.Words;
211a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
221a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardimport java.lang.reflect.Method;
231a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardimport java.util.Locale;
241a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
251a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalardpublic final class UserDictionaryCompatUtils {
261a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard    // UserDictionary.Words#addWord(Context, String, int, String, Locale) was introduced
271a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard    // in API level 16 (Build.VERSION_CODES.JELLY_BEAN).
281a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard    private static final Method METHOD_addWord = CompatUtils.getMethod(Words.class, "addWord",
2903a1c442aeddbd511be92e11465b6206d2ca976cTadashi G. Takaoka            Context.class, String.class, int.class, String.class, Locale.class);
301a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
31dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka    @SuppressWarnings("deprecation")
329ed7e47539932cd60d008ab6678a5f0413367c3bKeisuke Kuroyanagi    public static void addWord(final Context context, final String word,
339ed7e47539932cd60d008ab6678a5f0413367c3bKeisuke Kuroyanagi            final int freq, final String shortcut, final Locale locale) {
341a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard        if (hasNewerAddWord()) {
351a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            CompatUtils.invoke(Words.class, null, METHOD_addWord, context, word, freq, shortcut,
361a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard                    locale);
371a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard        } else {
381a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            // Fall back to the pre-JellyBean method.
391a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            final int localeType;
401a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            if (null == locale) {
411a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard                localeType = Words.LOCALE_TYPE_ALL;
421a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            } else {
43dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                final Locale currentLocale = context.getResources().getConfiguration().locale;
44dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                if (locale.equals(currentLocale)) {
45dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                    localeType = Words.LOCALE_TYPE_CURRENT;
46dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                } else {
47dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                    localeType = Words.LOCALE_TYPE_ALL;
48dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka                }
491a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            }
501a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard            Words.addWord(context, word, freq, localeType);
511a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard        }
521a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard    }
531a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard
54dcef94165b256c2bc8d3a05e2fe0caf0795c7155Satoshi Kataoka    public static final boolean hasNewerAddWord() {
551a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard        return null != METHOD_addWord;
561a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard    }
571a51833828569d76cbbc4865ccef8cc7f529dd68Jean Chalard}
58