Merge "Refactor SetupStepGroup"
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
index 93f12d5..f042795 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
@@ -16,10 +16,9 @@
 
 package com.android.inputmethod.dictionarypack;
 
-import android.app.Dialog;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.preference.DialogPreference;
+import android.preference.Preference;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
@@ -38,7 +37,7 @@
  * pack. Upon being pressed, it displays a menu to allow the user to install, disable,
  * enable or delete it as appropriate for the current state of the word list.
  */
-public final class WordListPreference extends DialogPreference {
+public final class WordListPreference extends Preference {
     static final private String TAG = WordListPreference.class.getSimpleName();
 
     // What to display in the "status" field when we receive unknown data as a status from
@@ -93,12 +92,6 @@
         if (status == mStatus) return;
         mStatus = status;
         setSummary(getSummary(status));
-        // If we are currently displaying the dialog, we should update it, or at least
-        // dismiss it.
-        final Dialog dialog = getDialog();
-        if (null != dialog) {
-            dialog.dismiss();
-        }
     }
 
     private String getSummary(final int status) {
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,