Merge "Check bigrams for lowercased previous word if original is not found"
diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
index 031e706..a253391 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp
@@ -280,15 +280,6 @@
     return NOT_A_PROBABILITY;
 }
 
-/* static */ int DicNodeUtils::getWordPos(const uint8_t *const dicRoot, const int *word,
-        const int wordLength) {
-    if (!word) {
-        return NOT_VALID_WORD;
-    }
-    return BinaryFormat::getTerminalPosition(
-            dicRoot, word, wordLength, false /* forceLowerCaseSearch */);
-}
-
 /* static */ bool DicNodeUtils::isMatchedNodeCodePoint(const ProximityInfoState *pInfoState,
         const int pointIndex, const bool exactOnly, const int nodeCodePoint) {
     if (!pInfoState) {
diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.h b/native/jni/src/suggest/core/dicnode/dic_node_utils.h
index 15f9730..2e6361d 100644
--- a/native/jni/src/suggest/core/dicnode/dic_node_utils.h
+++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.h
@@ -41,7 +41,6 @@
     static void initByCopy(DicNode *srcNode, DicNode *destNode);
     static void getAllChildDicNodes(DicNode *dicNode, const uint8_t *const dicRoot,
             DicNodeVector *childDicNodes);
-    static int getWordPos(const uint8_t *const dicRoot, const int *word, const int prevWordLength);
     static float getBigramNodeImprobability(const uint8_t *const dicRoot,
             const DicNode *const node, hash_map_compat<int, int16_t> *const bigramCacheMap);
     static bool isDicNodeFilteredOut(const int nodeCodePoint, const ProximityInfo *const pInfo,
diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.cpp b/native/jni/src/suggest/core/session/dic_traverse_session.cpp
index 3c44db2..b3d4732 100644
--- a/native/jni/src/suggest/core/session/dic_traverse_session.cpp
+++ b/native/jni/src/suggest/core/session/dic_traverse_session.cpp
@@ -69,7 +69,15 @@
         mPrevWordPos = NOT_VALID_WORD;
         return;
     }
-    mPrevWordPos = DicNodeUtils::getWordPos(dictionary->getOffsetDict(), prevWord, prevWordLength);
+    // TODO: merge following similar calls to getTerminalPosition into one case-insensitive call.
+    mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord,
+            prevWordLength, false /* forceLowerCaseSearch */);
+    if (mPrevWordPos == NOT_VALID_WORD) {
+        // Check bigrams for lower-cased previous word if original was not found. Useful for
+        // auto-capitalized words like "The [current_word]".
+        mPrevWordPos = BinaryFormat::getTerminalPosition(dictionary->getOffsetDict(), prevWord,
+                prevWordLength, true /* forceLowerCaseSearch */);
+    }
 }
 
 void DicTraverseSession::setupForGetSuggestions(const ProximityInfo *pInfo,