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

Commit fc9ca59c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Implement getHeaderInfoNative.

Bug: 11281877
Bug: 12810574
Change-Id: Ia3d85ae2cfdb486e74b8636a62431eae883c85da
parent 48ea5280
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