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

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

Merge "Make use of the FULL_EDIT_DISTANCE flag."

parents 59f8ca75 673cebf9
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -61,16 +61,26 @@ public class BinaryDictionary extends Dictionary {
    public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
            new Flag(R.bool.config_require_umlaut_processing, 0x1);

    // FULL_EDIT_DISTANCE is a flag that forces the dictionary to use full words
    // when computing edit distance, instead of the default behavior of stopping
    // the evaluation at the size the user typed.
    public static final Flag FLAG_USE_FULL_EDIT_DISTANCE = new Flag(0x2);

    // Can create a new flag from extravalue :
    // public static final Flag FLAG_MYFLAG =
    //         new Flag("my_flag", 0x02);

    private static final Flag[] ALL_FLAGS = {
    // ALL_CONFIG_FLAGS is a collection of flags that enable reading all flags from configuration.
    // This is but a mask - it does not mean the flags will be on, only that the configuration
    // will be read for this particular flag.
    public static final Flag[] ALL_CONFIG_FLAGS = {
        // Here should reside all flags that trigger some special processing
        // These *must* match the definition in UnigramDictionary enum in
        // unigram_dictionary.h so please update both at the same time.
        // Please note that flags created with a resource are of type CONFIG while flags
        // created with a string are of type EXTRAVALUE. These behave like masks, and the
        // actual value will be read from the configuration/extra value at run time for
        // the configuration at dictionary creation time.
        FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING,
    };

@@ -93,7 +103,7 @@ public class BinaryDictionary extends Dictionary {
        // the Suggest class knows everything about every single dictionary.
        mDicTypeId = Suggest.DIC_MAIN;
        // TODO: Stop relying on the state of SubtypeSwitcher, get it as a parameter
        mFlags = Flag.initFlags(null == flagArray ? ALL_FLAGS : flagArray, context,
        mFlags = Flag.initFlags(null == flagArray ? ALL_CONFIG_FLAGS : flagArray, context,
                SubtypeSwitcher.getInstance());
        loadDictionary(filename, offset, length);
    }
+21 −4
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ public class DictionaryFactory {
    private static String TAG = DictionaryFactory.class.getSimpleName();

    /**
     * Initializes a dictionary from a dictionary pack.
     * Initializes a dictionary from a dictionary pack, with explicit flags.
     *
     * This searches for a content provider providing a dictionary pack for the specified
     * locale. If none is found, it falls back to using the resource passed as fallBackResId
@@ -42,10 +42,11 @@ public class DictionaryFactory {
     * @param context application context for reading resources
     * @param locale the locale for which to create the dictionary
     * @param fallbackResId the id of the resource to use as a fallback if no pack is found
     * @param flagArray an array of flags to use
     * @return an initialized instance of DictionaryCollection
     */
    public static DictionaryCollection createDictionaryFromManager(Context context, Locale locale,
            int fallbackResId) {
    public static DictionaryCollection createDictionaryFromManager(final Context context,
            final Locale locale, final int fallbackResId, final Flag[] flagArray) {
        if (null == locale) {
            Log.e(TAG, "No locale defined for dictionary");
            return new DictionaryCollection(createBinaryDictionary(context, fallbackResId, locale));
@@ -57,7 +58,7 @@ public class DictionaryFactory {
        if (null != assetFileList) {
            for (final AssetFileAddress f : assetFileList) {
                final BinaryDictionary binaryDictionary =
                        new BinaryDictionary(context, f.mFilename, f.mOffset, f.mLength, null);
                        new BinaryDictionary(context, f.mFilename, f.mOffset, f.mLength, flagArray);
                if (binaryDictionary.isValidDictionary()) {
                    dictList.add(binaryDictionary);
                }
@@ -70,6 +71,22 @@ public class DictionaryFactory {
        return new DictionaryCollection(dictList);
    }

    /**
     * Initializes a dictionary from a dictionary pack, with default flags.
     *
     * This searches for a content provider providing a dictionary pack for the specified
     * locale. If none is found, it falls back to using the resource passed as fallBackResId
     * as a dictionary.
     * @param context application context for reading resources
     * @param locale the locale for which to create the dictionary
     * @param fallbackResId the id of the resource to use as a fallback if no pack is found
     * @return an initialized instance of DictionaryCollection
     */
    public static DictionaryCollection createDictionaryFromManager(final Context context,
            final Locale locale, final int fallbackResId) {
        return createDictionaryFromManager(context, locale, fallbackResId, null);
    }

    /**
     * Initializes a dictionary from a raw resource file
     * @param context application context for reading resources
+15 −1
Original line number Diff line number Diff line
@@ -28,11 +28,13 @@ import android.text.TextUtils;
import com.android.inputmethod.compat.ArraysCompatUtils;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.BinaryDictionary;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.Dictionary.DataType;
import com.android.inputmethod.latin.Dictionary.WordCallback;
import com.android.inputmethod.latin.DictionaryCollection;
import com.android.inputmethod.latin.DictionaryFactory;
import com.android.inputmethod.latin.Flag;
import com.android.inputmethod.latin.LocaleUtils;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary;
@@ -65,6 +67,17 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
    private final static SuggestionsInfo IN_DICT_EMPTY_SUGGESTIONS =
            new SuggestionsInfo(SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY,
                    EMPTY_STRING_ARRAY);
    private final static Flag[] USE_FULL_EDIT_DISTANCE_FLAG_ARRAY;
    static {
        // See BinaryDictionary.java for an explanation of these flags
        // Specifially, ALL_CONFIG_FLAGS means that we want to consider all flags with the
        // current dictionary configuration - for example, consider the UMLAUT flag
        // so that it will be turned on for German dictionaries and off for others.
        USE_FULL_EDIT_DISTANCE_FLAG_ARRAY = Arrays.copyOf(BinaryDictionary.ALL_CONFIG_FLAGS,
                BinaryDictionary.ALL_CONFIG_FLAGS.length + 1);
        USE_FULL_EDIT_DISTANCE_FLAG_ARRAY[BinaryDictionary.ALL_CONFIG_FLAGS.length] =
                BinaryDictionary.FLAG_USE_FULL_EDIT_DISTANCE;
    }
    private Map<String, DictionaryPool> mDictionaryPools =
            Collections.synchronizedMap(new TreeMap<String, DictionaryPool>());
    private Map<String, Dictionary> mUserDictionaries =
@@ -263,7 +276,8 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
        final Resources resources = getResources();
        final int fallbackResourceId = Utils.getMainDictionaryResourceId(resources);
        final DictionaryCollection dictionaryCollection =
                DictionaryFactory.createDictionaryFromManager(this, locale, fallbackResourceId);
                DictionaryFactory.createDictionaryFromManager(this, locale, fallbackResourceId,
                        USE_FULL_EDIT_DISTANCE_FLAG_ARRAY);
        final String localeStr = locale.toString();
        Dictionary userDict = mUserDictionaries.get(localeStr);
        if (null == userDict) {