Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5406d63d authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Fix a bug with synchronicity of spell checking/user dict"

parents 46286874 f019d505
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -202,7 +202,11 @@ public class ExpandableDictionary extends Dictionary {
            // Currently updating contacts, don't return any results.
            if (mUpdatingDictionary) return;
        }
        getWordsInner(codes, callback, proximityInfo);
    }

    protected final void getWordsInner(final WordComposer codes, final WordCallback callback,
            final ProximityInfo proximityInfo) {
        mInputLength = codes.size();
        if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
        // Cache the codes so that we don't have to lookup an array list
@@ -223,8 +227,7 @@ public class ExpandableDictionary extends Dictionary {
            if (mRequiresReload) startDictionaryLoadingTaskLocked();
            if (mUpdatingDictionary) return false;
        }
        final int freq = getWordFrequency(word);
        return freq > -1;
        return getWordFrequency(word) > -1;
    }

    /**
@@ -464,7 +467,7 @@ public class ExpandableDictionary extends Dictionary {
    }

    /**
     * Used only for testing purposes
     * Used for testing purposes and in the spell checker
     * This function will wait for loading from database to be done
     */
    void waitForDictionaryLoading() {
@@ -477,6 +480,11 @@ public class ExpandableDictionary extends Dictionary {
        }
    }

    protected final void blockingReloadDictionaryIfRequired() {
        reloadDictionaryIfRequired();
        waitForDictionaryLoading();
    }

    // Local to reverseLookUp, but do not allocate each time.
    private final char[] mLookedUpString = new char[MAX_WORD_LENGTH];

+41 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.latin;

import android.content.Context;

import com.android.inputmethod.keyboard.ProximityInfo;

public class SynchronouslyLoadedUserDictionary extends UserDictionary {

    public SynchronouslyLoadedUserDictionary(final Context context, final String locale) {
        super(context, locale);
    }

    @Override
    public void getWords(final WordComposer codes, final WordCallback callback,
            final ProximityInfo proximityInfo) {
        blockingReloadDictionaryIfRequired();
        getWordsInner(codes, callback, proximityInfo);
    }

    @Override
    public synchronized boolean isValidWord(CharSequence word) {
        blockingReloadDictionaryIfRequired();
        return getWordFrequency(word) > -1;
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.inputmethod.latin.Dictionary.WordCallback;
import com.android.inputmethod.latin.DictionaryCollection;
import com.android.inputmethod.latin.DictionaryFactory;
import com.android.inputmethod.latin.LocaleUtils;
import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary;
import com.android.inputmethod.latin.UserDictionary;
import com.android.inputmethod.latin.Utils;
import com.android.inputmethod.latin.WordComposer;
@@ -156,7 +157,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
        final String localeStr = locale.toString();
        Dictionary userDict = mUserDictionaries.get(localeStr);
        if (null == userDict) {
            userDict = new UserDictionary(this, localeStr);
            userDict = new SynchronouslyLoadedUserDictionary(this, localeStr);
            mUserDictionaries.put(localeStr, userDict);
        }
        dictionaryCollection.addDictionary(userDict);