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