118222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang/* 218222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * Copyright (C) 2012 The Android Open Source Project 318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * 418222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * Licensed under the Apache License, Version 2.0 (the "License"); 518222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * you may not use this file except in compliance with the License. 618222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * You may obtain a copy of the License at 718222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * 818222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * http://www.apache.org/licenses/LICENSE-2.0 918222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * 1018222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * Unless required by applicable law or agreed to in writing, software 1118222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * distributed under the License is distributed on an "AS IS" BASIS, 1218222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * See the License for the specific language governing permissions and 1418222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang * limitations under the License. 1518222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang */ 1618222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 1718222f8c863e509538857b1fafca9c696fae2f55Tom Ouyangpackage com.android.inputmethod.latin; 1818222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 1918222f8c863e509538857b1fafca9c696fae2f55Tom Ouyangimport android.content.Context; 2018222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 2118222f8c863e509538857b1fafca9c696fae2f55Tom Ouyangimport com.android.inputmethod.keyboard.ProximityInfo; 22d82898c5a91f8aa69d5dc594b7a9290b8be1247aJean Chalardimport com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; 2318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 24d82898c5a91f8aa69d5dc594b7a9290b8be1247aJean Chalardimport java.util.ArrayList; 25a6166d3776c810e51789bfdc19e4823acd4a2f18Jean Chalardimport java.util.Locale; 26a6166d3776c810e51789bfdc19e4823acd4a2f18Jean Chalard 27a28a05e971cc242b338331a3b78276fa95188d19Tadashi G. Takaokapublic final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsBinaryDictionary { 2818222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang private boolean mClosed; 2918222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 30a6166d3776c810e51789bfdc19e4823acd4a2f18Jean Chalard public SynchronouslyLoadedContactsBinaryDictionary(final Context context, final Locale locale) { 3105efe576f976f5fa280f8d523f2935c15cbb9bd1Jean Chalard super(context, locale); 3218222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang } 3318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 3418222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang @Override 35f5943153ad2ba611feec916119dca2343a1ef6deJean Chalard public synchronized ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes, 3660eed92dc37e59403142ac35bdf676ae7ceac298Jean Chalard final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) { 3718222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang syncReloadDictionaryIfRequired(); 38f5943153ad2ba611feec916119dca2343a1ef6deJean Chalard return super.getSuggestions(codes, prevWordForBigrams, proximityInfo); 3918222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang } 4018222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 4118222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang @Override 4218222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang public synchronized boolean isValidWord(CharSequence word) { 4318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang syncReloadDictionaryIfRequired(); 4418222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang return isValidWordInner(word); 4518222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang } 4618222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang 4718222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang // Protect against multiple closing 4818222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang @Override 4918222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang public synchronized void close() { 5018222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang // Actually with the current implementation of ContactsDictionary it's safe to close 5118222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang // several times, so the following protection is really only for foolproofing 5218222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang if (mClosed) return; 5318222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang mClosed = true; 5418222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang super.close(); 5518222f8c863e509538857b1fafca9c696fae2f55Tom Ouyang } 56a6166d3776c810e51789bfdc19e4823acd4a2f18Jean Chalard} 57