Merge "Initial step to support version 4 format in native code."
diff --git a/native/jni/src/suggest/policyimpl/dictionary/dictionary_structure_with_buffer_policy_factory.cpp b/native/jni/src/suggest/policyimpl/dictionary/dictionary_structure_with_buffer_policy_factory.cpp
index ff80dd2..a28535f 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/dictionary_structure_with_buffer_policy_factory.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/dictionary_structure_with_buffer_policy_factory.cpp
@@ -42,6 +42,9 @@
             return new PatriciaTriePolicy(mmapedBuffer);
         case FormatUtils::VERSION_3:
             return new DynamicPatriciaTriePolicy(mmapedBuffer);
+        case FormatUtils::VERSION_4:
+            // TODO: Support version 4 dictionary format.
+            // Fall through.
         default:
             AKLOGE("DICT: dictionary format is unknown, bad magic number");
             delete mmapedBuffer;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
index 5ded8f6..5ef8e50 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp
@@ -118,6 +118,9 @@
         case FormatUtils::VERSION_3:
             return buffer->writeUintAndAdvancePosition(3 /* data */,
                     HEADER_DICTIONARY_VERSION_SIZE, writingPos);
+        case FormatUtils::VERSION_4:
+            return buffer->writeUintAndAdvancePosition(4 /* data */,
+                    HEADER_DICTIONARY_VERSION_SIZE, writingPos);
         default:
             return false;
     }
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
index 994826f..5f781d5 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/dict_file_writing_utils.cpp
@@ -33,6 +33,9 @@
     switch (dictVersion) {
         case 3:
             return createEmptyV3DictFile(filePath, attributeMap);
+        case 4:
+            // TODO: Support version 4 dictionary format.
+            return false;
         default:
             // Only version 3 dictionary is supported for now.
             return false;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
index 1d77d5c..4843650 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.cpp
@@ -45,6 +45,8 @@
                 return VERSION_2;
             } else if (ByteArrayUtils::readUint16(dict, 4) == 3) {
                 return VERSION_3;
+            } else if (ByteArrayUtils::readUint16(dict, 4) == 4) {
+                return VERSION_4;
             } else {
                 return UNKNOWN_VERSION;
             }
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
index 79ed0de..b90393a 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/format_utils.h
@@ -31,6 +31,7 @@
     enum FORMAT_VERSION {
         VERSION_2,
         VERSION_3,
+        VERSION_4,
         UNKNOWN_VERSION
     };