Merge "Fix offdevice build."
diff --git a/java/res/raw/main_de.dict b/java/res/raw/main_de.dict
index 69796bb..c65698d 100644
--- a/java/res/raw/main_de.dict
+++ b/java/res/raw/main_de.dict
Binary files differ
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 8b4986f..e8a8971 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -425,8 +425,8 @@
      */
     @Override
     public void setKeyboard(final Keyboard keyboard) {
-        // Remove any pending messages, except dismissing preview and key repeat.
-        mKeyTimerHandler.cancelLongPressTimer();
+        // Remove any pending messages.
+        mKeyTimerHandler.cancelAllKeyTimers();
         super.setKeyboard(keyboard);
         mKeyDetector.setKeyboard(
                 keyboard, -getPaddingLeft(), -getPaddingTop() + getVerticalCorrection());
@@ -987,7 +987,7 @@
         if (mNonDistinctMultitouchHelper != null) {
             if (me.getPointerCount() > 1 && mKeyTimerHandler.isInKeyRepeat()) {
                 // Key repeating timer will be canceled if 2 or more keys are in action.
-                mKeyTimerHandler.cancelKeyRepeatTimer();
+                mKeyTimerHandler.cancelKeyRepeatTimers();
             }
             // Non distinct multitouch screen support
             mNonDistinctMultitouchHelper.processMotionEvent(me, mKeyDetector);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index f4329b4..ae6aee4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -67,13 +67,13 @@
     public interface TimerProxy {
         public void startTypingStateTimer(Key typedKey);
         public boolean isTypingState();
-        public void startKeyRepeatTimer(PointerTracker tracker, int repeatCount, int delay);
-        public void startLongPressTimer(PointerTracker tracker, int delay);
-        public void cancelLongPressTimer();
+        public void startKeyRepeatTimerOf(PointerTracker tracker, int repeatCount, int delay);
+        public void startLongPressTimerOf(PointerTracker tracker, int delay);
+        public void cancelLongPressTimerOf(PointerTracker tracker);
+        public void cancelKeyTimersOf(PointerTracker tracker);
         public void startDoubleTapShiftKeyTimer();
         public void cancelDoubleTapShiftKeyTimer();
         public boolean isInDoubleTapShiftKeyTimeout();
-        public void cancelKeyTimers();
         public void startUpdateBatchInputTimer(PointerTracker tracker);
         public void cancelUpdateBatchInputTimer(PointerTracker tracker);
         public void cancelAllUpdateBatchInputTimers();
@@ -84,11 +84,13 @@
             @Override
             public boolean isTypingState() { return false; }
             @Override
-            public void startKeyRepeatTimer(PointerTracker tracker, int repeatCount, int delay) {}
+            public void startKeyRepeatTimerOf(PointerTracker tracker, int repeatCount, int delay) {}
             @Override
-            public void startLongPressTimer(PointerTracker tracker, int delay) {}
+            public void startLongPressTimerOf(PointerTracker tracker, int delay) {}
             @Override
-            public void cancelLongPressTimer() {}
+            public void cancelLongPressTimerOf(PointerTracker tracker) {}
+            @Override
+            public void cancelKeyTimersOf(PointerTracker tracker) {}
             @Override
             public void startDoubleTapShiftKeyTimer() {}
             @Override
@@ -96,8 +98,6 @@
             @Override
             public boolean isInDoubleTapShiftKeyTimeout() { return false; }
             @Override
-            public void cancelKeyTimers() {}
-            @Override
             public void startUpdateBatchInputTimer(PointerTracker tracker) {}
             @Override
             public void cancelUpdateBatchInputTimer(PointerTracker tracker) {}
@@ -741,7 +741,7 @@
             sListener.onStartBatchInput();
             dismissAllMoreKeysPanels();
         }
-        sTimerProxy.cancelLongPressTimer();
+        sTimerProxy.cancelLongPressTimerOf(this);
         // A gesture floating preview text will be shown at the oldest pointer/finger on the screen.
         sDrawingProxy.showGestureTrail(
                 this, isOldestTrackerInQueue() /* showsFloatingPreviewText */);
@@ -1072,7 +1072,7 @@
         setReleasedKeyGraphics(oldKey);
         callListenerOnRelease(oldKey, oldKey.getCode(), true /* withSliding */);
         startKeySelectionByDraggingFinger(oldKey);
-        sTimerProxy.cancelKeyTimers();
+        sTimerProxy.cancelKeyTimersOf(this);
     }
 
     private void dragFingerFromOldKeyToNewKey(final Key key, final int x, final int y,
@@ -1195,15 +1195,12 @@
         if (DEBUG_EVENT) {
             printTouchEvent("onPhntEvent:", mLastX, mLastY, eventTime);
         }
-        if (isShowingMoreKeysPanel()) {
-            return;
-        }
         onUpEventInternal(mLastX, mLastY, eventTime);
         cancelTrackingForAction();
     }
 
     private void onUpEventInternal(final int x, final int y, final long eventTime) {
-        sTimerProxy.cancelKeyTimers();
+        sTimerProxy.cancelKeyTimersOf(this);
         final boolean isInDraggingFinger = mIsInDraggingFinger;
         final boolean isInSlidingKeyInput = mIsInSlidingKeyInput;
         resetKeySelectionByDraggingFinger();
@@ -1282,7 +1279,7 @@
     }
 
     private void onCancelEventInternal() {
-        sTimerProxy.cancelKeyTimers();
+        sTimerProxy.cancelKeyTimersOf(this);
         setReleasedKeyGraphics(mCurrentKey);
         resetKeySelectionByDraggingFinger();
         if (isShowingMoreKeysPanel()) {
@@ -1345,7 +1342,7 @@
         if (mIsInDraggingFinger && key.getMoreKeys() == null) return;
 
         final int delay = getLongPressTimeout(key.getCode());
-        sTimerProxy.startLongPressTimer(this, delay);
+        sTimerProxy.startLongPressTimerOf(this, delay);
     }
 
     private int getLongPressTimeout(final int code) {
@@ -1398,7 +1395,7 @@
     private void startKeyRepeatTimer(final int repeatCount) {
         final int delay =
                 (repeatCount == 1) ? sParams.mKeyRepeatStartTimeout : sParams.mKeyRepeatInterval;
-        sTimerProxy.startKeyRepeatTimer(this, repeatCount, delay);
+        sTimerProxy.startKeyRepeatTimerOf(this, repeatCount, delay);
     }
 
     private void printTouchEvent(final String title, final int x, final int y,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java b/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java
index 966cb95..88d0878 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java
@@ -66,6 +66,7 @@
             tracker.onKeyRepeat(msg.arg1 /* code */, msg.arg2 /* repeatCount */);
             break;
         case MSG_LONGPRESS_KEY:
+            cancelLongPressTimers();
             callbacks.onLongPress(tracker);
             break;
         case MSG_UPDATE_BATCH_INPUT:
@@ -76,7 +77,7 @@
     }
 
     @Override
-    public void startKeyRepeatTimer(final PointerTracker tracker, final int repeatCount,
+    public void startKeyRepeatTimerOf(final PointerTracker tracker, final int repeatCount,
             final int delay) {
         final Key key = tracker.getKey();
         if (key == null || delay == 0) {
@@ -86,7 +87,11 @@
                 obtainMessage(MSG_REPEAT_KEY, key.getCode(), repeatCount, tracker), delay);
     }
 
-    public void cancelKeyRepeatTimer() {
+    private void cancelKeyRepeatTimerOf(final PointerTracker tracker) {
+        removeMessages(MSG_REPEAT_KEY, tracker);
+    }
+
+    public void cancelKeyRepeatTimers() {
         removeMessages(MSG_REPEAT_KEY);
     }
 
@@ -96,14 +101,19 @@
     }
 
     @Override
-    public void startLongPressTimer(final PointerTracker tracker, final int delay) {
-        cancelLongPressTimer();
-        if (delay <= 0) return;
+    public void startLongPressTimerOf(final PointerTracker tracker, final int delay) {
+        if (delay <= 0) {
+            return;
+        }
         sendMessageDelayed(obtainMessage(MSG_LONGPRESS_KEY, tracker), delay);
     }
 
     @Override
-    public void cancelLongPressTimer() {
+    public void cancelLongPressTimerOf(final PointerTracker tracker) {
+        removeMessages(MSG_LONGPRESS_KEY, tracker);
+    }
+
+    private void cancelLongPressTimers() {
         removeMessages(MSG_LONGPRESS_KEY);
     }
 
@@ -159,9 +169,14 @@
     }
 
     @Override
-    public void cancelKeyTimers() {
-        cancelKeyRepeatTimer();
-        cancelLongPressTimer();
+    public void cancelKeyTimersOf(final PointerTracker tracker) {
+        cancelKeyRepeatTimerOf(tracker);
+        cancelLongPressTimerOf(tracker);
+    }
+
+    public void cancelAllKeyTimers() {
+        cancelKeyRepeatTimers();
+        cancelLongPressTimers();
     }
 
     @Override
@@ -185,7 +200,7 @@
     }
 
     public void cancelAllMessages() {
-        cancelKeyTimers();
+        cancelAllKeyTimers();
         cancelAllUpdateBatchInputTimers();
     }
 }
diff --git a/native/jni/src/suggest/core/dictionary/digraph_utils.cpp b/native/jni/src/suggest/core/dictionary/digraph_utils.cpp
index 3271c1b..5f9b8f3 100644
--- a/native/jni/src/suggest/core/dictionary/digraph_utils.cpp
+++ b/native/jni/src/suggest/core/dictionary/digraph_utils.cpp
@@ -28,11 +28,8 @@
         { { 'a', 'e', 0x00E4 }, // U+00E4 : LATIN SMALL LETTER A WITH DIAERESIS
         { 'o', 'e', 0x00F6 },   // U+00F6 : LATIN SMALL LETTER O WITH DIAERESIS
         { 'u', 'e', 0x00FC } }; // U+00FC : LATIN SMALL LETTER U WITH DIAERESIS
-const DigraphUtils::digraph_t DigraphUtils::FRENCH_LIGATURES_DIGRAPHS[] =
-        { { 'a', 'e', 0x00E6 }, // U+00E6 : LATIN SMALL LETTER AE
-        { 'o', 'e', 0x0153 } }; // U+0153 : LATIN SMALL LIGATURE OE
 const DigraphUtils::DigraphType DigraphUtils::USED_DIGRAPH_TYPES[] =
-        { DIGRAPH_TYPE_GERMAN_UMLAUT, DIGRAPH_TYPE_FRENCH_LIGATURES };
+        { DIGRAPH_TYPE_GERMAN_UMLAUT };
 
 /* static */ bool DigraphUtils::hasDigraphForCodePoint(
         const DictionaryHeaderStructurePolicy *const headerPolicy,
@@ -50,9 +47,6 @@
     if (headerPolicy->requiresGermanUmlautProcessing()) {
         return DIGRAPH_TYPE_GERMAN_UMLAUT;
     }
-    if (headerPolicy->requiresFrenchLigatureProcessing()) {
-        return DIGRAPH_TYPE_FRENCH_LIGATURES;
-    }
     return DIGRAPH_TYPE_NONE;
 }
 
@@ -86,10 +80,6 @@
         *digraphs = GERMAN_UMLAUT_DIGRAPHS;
         return NELEMS(GERMAN_UMLAUT_DIGRAPHS);
     }
-    if (digraphType == DIGRAPH_TYPE_FRENCH_LIGATURES) {
-        *digraphs = FRENCH_LIGATURES_DIGRAPHS;
-        return NELEMS(FRENCH_LIGATURES_DIGRAPHS);
-    }
     return 0;
 }
 
diff --git a/native/jni/src/suggest/core/dictionary/digraph_utils.h b/native/jni/src/suggest/core/dictionary/digraph_utils.h
index 6ae16e3..bec2cd6 100644
--- a/native/jni/src/suggest/core/dictionary/digraph_utils.h
+++ b/native/jni/src/suggest/core/dictionary/digraph_utils.h
@@ -34,7 +34,6 @@
     typedef enum {
         DIGRAPH_TYPE_NONE,
         DIGRAPH_TYPE_GERMAN_UMLAUT,
-        DIGRAPH_TYPE_FRENCH_LIGATURES
     } DigraphType;
 
     typedef struct { int first; int second; int compositeGlyph; } digraph_t;
@@ -55,7 +54,6 @@
             const DigraphType digraphType, const int compositeGlyphCodePoint);
 
     static const digraph_t GERMAN_UMLAUT_DIGRAPHS[];
-    static const digraph_t FRENCH_LIGATURES_DIGRAPHS[];
     static const DigraphType USED_DIGRAPH_TYPES[];
 };
 } // namespace latinime
diff --git a/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h b/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
index b05b7c3..b76b139 100644
--- a/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
+++ b/native/jni/src/suggest/core/policy/dictionary_header_structure_policy.h
@@ -31,12 +31,8 @@
 
     virtual int getFormatVersionNumber() const = 0;
 
-    virtual bool supportsDynamicUpdate() const = 0;
-
     virtual bool requiresGermanUmlautProcessing() const = 0;
 
-    virtual bool requiresFrenchLigatureProcessing() const = 0;
-
     virtual float getMultiWordCostMultiplier() const = 0;
 
     virtual int getLastDecayedTime() const = 0;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.cpp
index 133ae9f..be7a3c2 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.cpp
@@ -20,6 +20,8 @@
 
 // Note that these are corresponding definitions in Java side in FormatSpec.FileHeader.
 const char *const HeaderPolicy::MULTIPLE_WORDS_DEMOTION_RATE_KEY = "MULTIPLE_WORDS_DEMOTION_RATE";
+const char *const HeaderPolicy::REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY =
+        "REQUIRES_GERMAN_UMLAUT_PROCESSING";
 // TODO: Change attribute string to "IS_DECAYING_DICT".
 const char *const HeaderPolicy::IS_DECAYING_DICT_KEY = "USES_FORGETTING_CURVE";
 const char *const HeaderPolicy::LAST_UPDATED_TIME_KEY = "date";
@@ -66,6 +68,11 @@
     return MULTIPLE_WORD_COST_MULTIPLIER_SCALE / static_cast<float>(demotionRate);
 }
 
+bool HeaderPolicy::readRequiresGermanUmlautProcessing() const {
+    return HeaderReadWriteUtils::readBoolAttributeValue(&mAttributeMap,
+            REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY, false);
+}
+
 bool HeaderPolicy::writeHeaderToBuffer(BufferWithExtendableBuffer *const bufferToWrite,
         const bool updatesLastUpdatedTime, const bool updatesLastDecayedTime,
         const int unigramCount, const int bigramCount, const int extendedRegionSize) const {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
index d71e0a0..5e8b5f1 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_policy.h
@@ -36,6 +36,7 @@
               mSize(HeaderReadWriteUtils::getHeaderSize(dictBuf)),
               mAttributeMap(createAttributeMapAndReadAllAttributes(dictBuf)),
               mMultiWordCostMultiplier(readMultipleWordCostMultiplier()),
+              mRequiresGermanUmlautProcessing(readRequiresGermanUmlautProcessing()),
               mIsDecayingDict(HeaderReadWriteUtils::readBoolAttributeValue(&mAttributeMap,
                       IS_DECAYING_DICT_KEY, false /* defaultValue */)),
               mLastUpdatedTime(HeaderReadWriteUtils::readIntAttributeValue(&mAttributeMap,
@@ -58,6 +59,7 @@
               mDictionaryFlags(HeaderReadWriteUtils::createAndGetDictionaryFlagsUsingAttributeMap(
                       attributeMap)), mSize(0), mAttributeMap(*attributeMap),
               mMultiWordCostMultiplier(readMultipleWordCostMultiplier()),
+              mRequiresGermanUmlautProcessing(readRequiresGermanUmlautProcessing()),
               mIsDecayingDict(HeaderReadWriteUtils::readBoolAttributeValue(&mAttributeMap,
                       IS_DECAYING_DICT_KEY, false /* defaultValue */)),
               mLastUpdatedTime(HeaderReadWriteUtils::readIntAttributeValue(&mAttributeMap,
@@ -71,7 +73,8 @@
     // Temporary dummy header.
     HeaderPolicy()
             : mDictFormatVersion(FormatUtils::UNKNOWN_VERSION), mDictionaryFlags(0), mSize(0),
-              mAttributeMap(), mMultiWordCostMultiplier(0.0f), mIsDecayingDict(false),
+              mAttributeMap(), mMultiWordCostMultiplier(0.0f),
+              mRequiresGermanUmlautProcessing(false), mIsDecayingDict(false),
               mLastUpdatedTime(0), mLastDecayedTime(0), mUnigramCount(0), mBigramCount(0),
               mExtendedRegionSize(0), mHasHistoricalInfoOfWords(false) {}
 
@@ -109,18 +112,6 @@
         return mSize;
     }
 
-    AK_FORCE_INLINE bool supportsDynamicUpdate() const {
-        return HeaderReadWriteUtils::supportsDynamicUpdate(mDictionaryFlags);
-    }
-
-    AK_FORCE_INLINE bool requiresGermanUmlautProcessing() const {
-        return HeaderReadWriteUtils::requiresGermanUmlautProcessing(mDictionaryFlags);
-    }
-
-    AK_FORCE_INLINE bool requiresFrenchLigatureProcessing() const {
-        return HeaderReadWriteUtils::requiresFrenchLigatureProcessing(mDictionaryFlags);
-    }
-
     AK_FORCE_INLINE float getMultiWordCostMultiplier() const {
         return mMultiWordCostMultiplier;
     }
@@ -129,6 +120,10 @@
         return mIsDecayingDict;
     }
 
+    AK_FORCE_INLINE bool requiresGermanUmlautProcessing() const {
+        return mRequiresGermanUmlautProcessing;
+    }
+
     AK_FORCE_INLINE int getLastUpdatedTime() const {
         return mLastUpdatedTime;
     }
@@ -164,6 +159,7 @@
     DISALLOW_COPY_AND_ASSIGN(HeaderPolicy);
 
     static const char *const MULTIPLE_WORDS_DEMOTION_RATE_KEY;
+    static const char *const REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY;
     static const char *const IS_DECAYING_DICT_KEY;
     static const char *const LAST_UPDATED_TIME_KEY;
     static const char *const LAST_DECAYED_TIME_KEY;
@@ -179,6 +175,7 @@
     const int mSize;
     HeaderReadWriteUtils::AttributeMap mAttributeMap;
     const float mMultiWordCostMultiplier;
+    const bool mRequiresGermanUmlautProcessing;
     const bool mIsDecayingDict;
     const int mLastUpdatedTime;
     const int mLastDecayedTime;
@@ -188,6 +185,7 @@
     const bool mHasHistoricalInfoOfWords;
 
     float readMultipleWordCostMultiplier() const;
+    bool readRequiresGermanUmlautProcessing() const;
 
     static HeaderReadWriteUtils::AttributeMap createAttributeMapAndReadAllAttributes(
             const uint8_t *const dictBuf);
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 f5eee99..2d45470 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
@@ -35,22 +35,6 @@
 const int HeaderReadWriteUtils::HEADER_SIZE_FIELD_SIZE = 4;
 
 const HeaderReadWriteUtils::DictionaryFlags HeaderReadWriteUtils::NO_FLAGS = 0;
-// Flags for special processing
-// Those *must* match the flags in makedict (FormatSpec#*_PROCESSING_FLAG) or
-// something very bad (like, the apocalypse) will happen. Please update both at the same time.
-const HeaderReadWriteUtils::DictionaryFlags
-        HeaderReadWriteUtils::GERMAN_UMLAUT_PROCESSING_FLAG = 0x1;
-const HeaderReadWriteUtils::DictionaryFlags
-        HeaderReadWriteUtils::SUPPORTS_DYNAMIC_UPDATE_FLAG = 0x2;
-const HeaderReadWriteUtils::DictionaryFlags
-        HeaderReadWriteUtils::FRENCH_LIGATURE_PROCESSING_FLAG = 0x4;
-
-// Note that these are corresponding definitions in Java side in FormatSpec.FileHeader.
-const char *const HeaderReadWriteUtils::SUPPORTS_DYNAMIC_UPDATE_KEY = "SUPPORTS_DYNAMIC_UPDATE";
-const char *const HeaderReadWriteUtils::REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY =
-        "REQUIRES_GERMAN_UMLAUT_PROCESSING";
-const char *const HeaderReadWriteUtils::REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY =
-        "REQUIRES_FRENCH_LIGATURE_PROCESSING";
 
 /* static */ int HeaderReadWriteUtils::getHeaderSize(const uint8_t *const dictBuf) {
     // See the format of the header in the comment in
@@ -68,17 +52,7 @@
 /* static */ HeaderReadWriteUtils::DictionaryFlags
         HeaderReadWriteUtils::createAndGetDictionaryFlagsUsingAttributeMap(
                 const HeaderReadWriteUtils::AttributeMap *const attributeMap) {
-    const bool requiresGermanUmlautProcessing = readBoolAttributeValue(attributeMap,
-            REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY, false /* defaultValue */);
-    const bool requiresFrenchLigatureProcessing = readBoolAttributeValue(attributeMap,
-            REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY, false /* defaultValue */);
-    const bool supportsDynamicUpdate = readBoolAttributeValue(attributeMap,
-            SUPPORTS_DYNAMIC_UPDATE_KEY, false /* defaultValue */);
-    DictionaryFlags dictflags = NO_FLAGS;
-    dictflags |= requiresGermanUmlautProcessing ? GERMAN_UMLAUT_PROCESSING_FLAG : 0;
-    dictflags |= requiresFrenchLigatureProcessing ? FRENCH_LIGATURE_PROCESSING_FLAG : 0;
-    dictflags |= supportsDynamicUpdate ? SUPPORTS_DYNAMIC_UPDATE_FLAG : 0;
-    return dictflags;
+    return NO_FLAGS;
 }
 
 /* static */ void HeaderReadWriteUtils::fetchAllHeaderAttributes(const uint8_t *const dictBuf,
diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.h b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.h
index 2259683..fc24bbd 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.h
@@ -37,18 +37,6 @@
 
     static DictionaryFlags getFlags(const uint8_t *const dictBuf);
 
-    static AK_FORCE_INLINE bool supportsDynamicUpdate(const DictionaryFlags flags) {
-        return (flags & SUPPORTS_DYNAMIC_UPDATE_FLAG) != 0;
-    }
-
-    static AK_FORCE_INLINE bool requiresGermanUmlautProcessing(const DictionaryFlags flags) {
-        return (flags & GERMAN_UMLAUT_PROCESSING_FLAG) != 0;
-    }
-
-    static AK_FORCE_INLINE bool requiresFrenchLigatureProcessing(const DictionaryFlags flags) {
-        return (flags & FRENCH_LIGATURE_PROCESSING_FLAG) != 0;
-    }
-
     static AK_FORCE_INLINE int getHeaderOptionsPosition() {
         return HEADER_MAGIC_NUMBER_SIZE + HEADER_DICTIONARY_VERSION_SIZE + HEADER_FLAG_SIZE
                 + HEADER_SIZE_FIELD_SIZE;
@@ -101,17 +89,8 @@
     static const int HEADER_FLAG_SIZE;
     static const int HEADER_SIZE_FIELD_SIZE;
 
+    // Value for the "flags" field. It's unused at the moment.
     static const DictionaryFlags NO_FLAGS;
-    // Flags for special processing
-    // Those *must* match the flags in makedict (FormatSpec#*_PROCESSING_FLAGS) or
-    // something very bad (like, the apocalypse) will happen. Please update both at the same time.
-    static const DictionaryFlags GERMAN_UMLAUT_PROCESSING_FLAG;
-    static const DictionaryFlags SUPPORTS_DYNAMIC_UPDATE_FLAG;
-    static const DictionaryFlags FRENCH_LIGATURE_PROCESSING_FLAG;
-
-    static const char *const SUPPORTS_DYNAMIC_UPDATE_KEY;
-    static const char *const REQUIRES_GERMAN_UMLAUT_PROCESSING_KEY;
-    static const char *const REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY;
 
     static void setIntAttributeInner(AttributeMap *const headerAttributes,
             const AttributeMap::key_type *const key, const int value);