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