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

Commit fc6d0f87 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Implement getHeaderInfoNative."

parents 3bbd50c3 fc9ca59c
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -217,9 +217,8 @@ public final class BinaryDictionary extends Dictionary {
                    outAttributeValues.get(i));
            attributes.put(attributeKey, attributeValue);
        }
        final boolean hasHistoricalInfo =
                attributes.get(DictionaryHeader.HAS_HISTORICAL_INFO_KEY).equals(
                        DictionaryHeader.ATTRIBUTE_VALUE_TRUE);
        final boolean hasHistoricalInfo = DictionaryHeader.ATTRIBUTE_VALUE_TRUE.equals(
                attributes.get(DictionaryHeader.HAS_HISTORICAL_INFO_KEY));
        return new DictionaryHeader(outHeaderSize[0], new DictionaryOptions(attributes),
                new FormatSpec.FormatOptions(outFormatVersion[0], hasHistoricalInfo));
    }
+10 −1
Original line number Diff line number Diff line
@@ -23,10 +23,12 @@ import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.makedict.DictionaryHeader;
import com.android.inputmethod.latin.makedict.FormatSpec;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.AsyncResultHolder;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CombinedFormatUtils;
import com.android.inputmethod.latin.utils.FileUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
@@ -785,7 +787,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
        getExecutor(mDictName).execute(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "dictionary=" + mDictName);
                Log.d(TAG, "Dump dictionary: " + mDictName);
                try {
                    final DictionaryHeader header = mBinaryDictionary.getHeader();
                    Log.d(TAG, CombinedFormatUtils.formatAttributeMap(
                            header.mDictionaryOptions.mAttributes));
                } catch (final UnsupportedFormatException e) {
                    Log.d(TAG, "Cannot fetch header information.", e);
                }
                int token = 0;
                do {
                    final BinaryDictionary.GetNextWordPropertyResult result =
+3 −3
Original line number Diff line number Diff line
@@ -37,11 +37,11 @@ public class CombinedFormatUtils {
    public static String formatAttributeMap(final HashMap<String, String> attributeMap) {
        final StringBuilder builder = new StringBuilder();
        builder.append(DICTIONARY_TAG + "=");
        if (attributeMap.containsKey(DictionaryHeader.DICTIONARY_DESCRIPTION_KEY)) {
            builder.append(attributeMap.get(DictionaryHeader.DICTIONARY_DESCRIPTION_KEY));
        if (attributeMap.containsKey(DictionaryHeader.DICTIONARY_ID_KEY)) {
            builder.append(attributeMap.get(DictionaryHeader.DICTIONARY_ID_KEY));
        }
        for (final String key : attributeMap.keySet()) {
            if (key == DictionaryHeader.DICTIONARY_DESCRIPTION_KEY) {
            if (key.equals(DictionaryHeader.DICTIONARY_ID_KEY)) {
                continue;
            }
            final String value = attributeMap.get(key);
+32 −6
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ static jboolean latinime_BinaryDictionary_createEmptyDictFile(JNIEnv *env, jclas
        return false;
    }

    HeaderReadWriteUtils::AttributeMap attributeMap;
    DictionaryHeaderStructurePolicy::AttributeMap attributeMap;
    for (int i = 0; i < keyCount; i++) {
        jstring keyString = static_cast<jstring>(
                env->GetObjectArrayElement(attributeKeyStringArray, i));
@@ -61,7 +61,7 @@ static jboolean latinime_BinaryDictionary_createEmptyDictFile(JNIEnv *env, jclas
        char keyChars[keyUtf8Length + 1];
        env->GetStringUTFRegion(keyString, 0, env->GetStringLength(keyString), keyChars);
        keyChars[keyUtf8Length] = '\0';
        HeaderReadWriteUtils::AttributeMap::key_type key;
        DictionaryHeaderStructurePolicy::AttributeMap::key_type key;
        HeaderReadWriteUtils::insertCharactersIntoVector(keyChars, &key);

        jstring valueString = static_cast<jstring>(
@@ -70,7 +70,7 @@ static jboolean latinime_BinaryDictionary_createEmptyDictFile(JNIEnv *env, jclas
        char valueChars[valueUtf8Length + 1];
        env->GetStringUTFRegion(valueString, 0, env->GetStringLength(valueString), valueChars);
        valueChars[valueUtf8Length] = '\0';
        HeaderReadWriteUtils::AttributeMap::mapped_type value;
        DictionaryHeaderStructurePolicy::AttributeMap::mapped_type value;
        HeaderReadWriteUtils::insertCharactersIntoVector(valueChars, &value);
        attributeMap[key] = value;
    }
@@ -145,16 +145,42 @@ static void latinime_BinaryDictionary_getHeaderInfo(JNIEnv *env, jclass clazz, j
        jobject outAttributeValues) {
    Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
    if (!dictionary) return;
    const int formatVersion = dictionary->getFormatVersionNumber();
    const DictionaryHeaderStructurePolicy *const headerPolicy =
            dictionary->getDictionaryStructurePolicy()->getHeaderStructurePolicy();
    const int headerSize = headerPolicy->getSize();
    env->SetIntArrayRegion(outHeaderSize, 0 /* start */, 1 /* len */, &headerSize);
    const int formatVersion = headerPolicy->getFormatVersionNumber();
    env->SetIntArrayRegion(outFormatVersion, 0 /* start */, 1 /* len */, &formatVersion);
    // TODO: Implement
    // Output attribute map
    jclass arrayListClass = env->FindClass("java/util/ArrayList");
    jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
    const DictionaryHeaderStructurePolicy::AttributeMap *const attributeMap =
            headerPolicy->getAttributeMap();
    for (DictionaryHeaderStructurePolicy::AttributeMap::const_iterator it = attributeMap->begin();
            it != attributeMap->end(); ++it) {
        // Output key
        jintArray keyCodePointArray = env->NewIntArray(it->first.size());
        env->SetIntArrayRegion(
                keyCodePointArray, 0 /* start */, it->first.size(), &it->first.at(0));
        env->CallVoidMethod(outAttributeKeys, addMethodId, keyCodePointArray);
        env->DeleteLocalRef(keyCodePointArray);
        // Output value
        jintArray valueCodePointArray = env->NewIntArray(it->second.size());
        env->SetIntArrayRegion(
                valueCodePointArray, 0 /* start */, it->second.size(), &it->second.at(0));
        env->CallVoidMethod(outAttributeValues, addMethodId, valueCodePointArray);
        env->DeleteLocalRef(valueCodePointArray);
    }
    env->DeleteLocalRef(arrayListClass);
    return;
}

static int latinime_BinaryDictionary_getFormatVersion(JNIEnv *env, jclass clazz, jlong dict) {
    Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
    if (!dictionary) return 0;
    return dictionary->getFormatVersionNumber();
    const DictionaryHeaderStructurePolicy *const headerPolicy =
            dictionary->getDictionaryStructurePolicy()->getHeaderStructurePolicy();
    return headerPolicy->getFormatVersionNumber();
}

static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, jlong dict,
+0 −5
Original line number Diff line number Diff line
@@ -105,11 +105,6 @@ class Dictionary {
        return mDictionaryStructureWithBufferPolicy.get();
    }

    int getFormatVersionNumber() const {
        return mDictionaryStructureWithBufferPolicy.get()->getHeaderStructurePolicy()
                ->getFormatVersionNumber();
    }

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(Dictionary);

Loading