Merge "Remove setting switch for phrase gesture."
diff --git a/common/src/com/android/inputmethod/latin/common/NativeSuggestOptions.java b/common/src/com/android/inputmethod/latin/common/NativeSuggestOptions.java
index db21f11..d673442 100644
--- a/common/src/com/android/inputmethod/latin/common/NativeSuggestOptions.java
+++ b/common/src/com/android/inputmethod/latin/common/NativeSuggestOptions.java
@@ -43,10 +43,6 @@
         setBooleanOption(BLOCK_OFFENSIVE_WORDS, value);
     }
 
-    public void setSpaceAwareGestureEnabled(final boolean value) {
-        setBooleanOption(SPACE_AWARE_GESTURE_ENABLED, value);
-    }
-
     public void setWeightForLocale(final float value) {
         // We're passing this option as a fixed point value, in thousands. This is decoded in
         // native code by SuggestOptions#weightForLocale().
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
index d71dc59..47013fe 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -63,7 +63,7 @@
  */
 public final class KeyboardLayoutSet {
     private static final String TAG = KeyboardLayoutSet.class.getSimpleName();
-    private static final boolean DEBUG_CACHE = DebugFlags.DEBUG_ENABLED;
+    private static final boolean DEBUG_CACHE = false;
 
     private static final String TAG_KEYBOARD_SET = "KeyboardLayoutSet";
     private static final String TAG_ELEMENT = "Element";
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 6b2b123..c101551 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -292,8 +292,6 @@
         session.mNativeSuggestOptions.setIsGesture(isGesture);
         session.mNativeSuggestOptions.setBlockOffensiveWords(
                 settingsValuesForSuggestion.mBlockPotentiallyOffensive);
-        session.mNativeSuggestOptions.setSpaceAwareGestureEnabled(
-                settingsValuesForSuggestion.mSpaceAwareGestureEnabled);
         session.mNativeSuggestOptions.setWeightForLocale(weightForLocale);
         if (inOutWeightOfLangModelVsSpatialModel != null) {
             session.mInputOutputWeightOfLangModelVsSpatialModel[0] =
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 7e91600..b658889 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -89,9 +89,6 @@
         void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
     }
 
-    // TODO: remove this, it's confusing with seamless multiple language switching
-    void setIsMonolingualUser(final boolean isMonolingualUser);
-
     boolean isActive();
 
     /**
@@ -165,14 +162,10 @@
 
     boolean isValidSuggestionWord(final String word);
 
-    int getFrequency(final String word);
+    void clearUserHistoryDictionary(final Context context);
 
-    int getMaxFrequencyOfExactMatches(final String word);
-
-    void clearUserHistoryDictionary();
-    
     String dump(final Context context);
-    
+
     void dumpDictionaryForDebug(final String dictName);
 
     ArrayList<Pair<String, DictionaryStats>> getStatsOfEnabledSubDicts();
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
index 6080900..e0b0b2b 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
@@ -230,10 +230,6 @@
     public DictionaryFacilitatorImpl() {
     }
 
-    // TODO: remove this, it's confusing with seamless multiple language switching
-    public void setIsMonolingualUser(final boolean isMonolingualUser) {
-    }
-
     public boolean isActive() {
         return null != mDictionaryGroups[0].mLocale;
     }
@@ -730,8 +726,7 @@
         return false;
     }
 
-    private int getFrequencyInternal(final String word,
-            final boolean isGettingMaxFrequencyOfExactMatches) {
+    private int getFrequency(final String word) {
         if (TextUtils.isEmpty(word)) {
             return Dictionary.NOT_A_PROBABILITY;
         }
@@ -741,12 +736,7 @@
             for (final String dictType : ALL_DICTIONARY_TYPES) {
                 final Dictionary dictionary = dictionaryGroup.getDict(dictType);
                 if (dictionary == null) continue;
-                final int tempFreq;
-                if (isGettingMaxFrequencyOfExactMatches) {
-                    tempFreq = dictionary.getMaxFrequencyOfExactMatches(word);
-                } else {
-                    tempFreq = dictionary.getFrequency(word);
-                }
+                final int tempFreq = dictionary.getFrequency(word);
                 if (tempFreq >= maxFreq) {
                     maxFreq = tempFreq;
                 }
@@ -755,16 +745,6 @@
         return maxFreq;
     }
 
-    @Override
-    public int getFrequency(final String word) {
-        return getFrequencyInternal(word, false /* isGettingMaxFrequencyOfExactMatches */);
-    }
-
-    @Override
-    public int getMaxFrequencyOfExactMatches(final String word) {
-        return getFrequencyInternal(word, true /* isGettingMaxFrequencyOfExactMatches */);
-    }
-
     private void clearSubDictionary(final String dictName) {
         final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
         for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
@@ -776,7 +756,7 @@
     }
 
     @Override
-    public void clearUserHistoryDictionary() {
+    public void clearUserHistoryDictionary(final Context context) {
         clearSubDictionary(Dictionary.TYPE_USER_HISTORY);
     }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 0f99157..4ae47f3 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -609,19 +609,10 @@
 
     private void refreshPersonalizationDictionarySession(
             final SettingsValues currentSettingsValues) {
-        // TODO: Remove all existing personalized dictionaries.
-        mDictionaryFacilitator.setIsMonolingualUser(
-                mRichImm.isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes());
-        final boolean shouldKeepUserHistoryDictionaries;
-        if (currentSettingsValues.mUsePersonalizedDicts) {
-            shouldKeepUserHistoryDictionaries = true;
-        } else {
-            shouldKeepUserHistoryDictionaries = false;
-        }
-        if (!shouldKeepUserHistoryDictionaries) {
+        if (!currentSettingsValues.mUsePersonalizedDicts) {
             // Remove user history dictionaries.
             PersonalizationHelper.removeAllUserHistoryDictionaries(this);
-            mDictionaryFacilitator.clearUserHistoryDictionary();
+            mDictionaryFacilitator.clearUserHistoryDictionary(this);
         }
     }
 
@@ -1802,7 +1793,7 @@
     // DO NOT USE THIS for any other purpose than testing.
     @UsedForTesting
     /* package for test */ void clearPersonalizedDictionariesForTest() {
-        mDictionaryFacilitator.clearUserHistoryDictionary();
+        mDictionaryFacilitator.clearUserHistoryDictionary(this);
     }
 
     @UsedForTesting
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 934da7a..35486ce 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -534,29 +534,6 @@
             final InputPointers batchPointers,
             // TODO: remove these arguments
             final KeyboardSwitcher keyboardSwitcher) {
-        if (settingsValues.mPhraseGestureEnabled) {
-            final SuggestedWordInfo candidate = mSuggestedWords.getAutoCommitCandidate();
-            // If these suggested words have been generated with out of date input pointers, then
-            // we skip auto-commit (see comments above on the mSequenceNumber member).
-            if (null != candidate
-                    && mSuggestedWords.mSequenceNumber >= mAutoCommitSequenceNumber) {
-                if (candidate.mSourceDict.shouldAutoCommit(candidate)) {
-                    final String[] commitParts = candidate.mWord.split(Constants.WORD_SEPARATOR, 2);
-                    batchPointers.shift(candidate.mIndexOfTouchPointOfSecondWord);
-                    if (SpaceState.PHANTOM == mSpaceState) {
-                        insertAutomaticSpaceIfOptionsAndTextAllow(settingsValues);
-                    }
-                    mConnection.commitText(commitParts[0], 0);
-                    StatsUtils.onWordCommitUserTyped(commitParts[0], mWordComposer.isBatchMode());
-                    mSpaceState = SpaceState.PHANTOM;
-                    keyboardSwitcher.requestUpdatingShiftState(
-                            getCurrentAutoCapsState(settingsValues), getCurrentRecapitalizeState());
-                    mWordComposer.setCapitalizedModeAtStartComposingTime(getActualCapsMode(
-                            settingsValues, keyboardSwitcher.getKeyboardShiftMode()));
-                    ++mAutoCommitSequenceNumber;
-                }
-            }
-        }
         mInputLogicHandler.onUpdateBatchInput(batchPointers, mAutoCommitSequenceNumber);
     }
 
@@ -1984,27 +1961,8 @@
         if (SpaceState.PHANTOM == mSpaceState) {
             insertAutomaticSpaceIfOptionsAndTextAllow(settingsValues);
         }
-        final SuggestedWordInfo autoCommitCandidate = mSuggestedWords.getAutoCommitCandidate();
-        // Commit except the last word for phrase gesture if the top suggestion is eligible for auto
-        // commit.
-        if (settingsValues.mPhraseGestureEnabled && null != autoCommitCandidate) {
-            // Find the last space
-            final int indexOfLastSpace = batchInputText.lastIndexOf(Constants.CODE_SPACE) + 1;
-            if (0 != indexOfLastSpace) {
-                mConnection.commitText(batchInputText.substring(0, indexOfLastSpace), 1);
-                StatsUtils.onWordCommitUserTyped(
-                        batchInputText.substring(0, indexOfLastSpace), mWordComposer.isBatchMode());
-                final SuggestedWords suggestedWordsForLastWordOfPhraseGesture =
-                        suggestedWords.getSuggestedWordsForLastWordOfPhraseGesture();
-                mLatinIME.showSuggestionStrip(suggestedWordsForLastWordOfPhraseGesture);
-            }
-            final String lastWord = batchInputText.substring(indexOfLastSpace);
-            mWordComposer.setBatchInputWord(lastWord);
-            setComposingTextInternal(lastWord, 1);
-        } else {
-            mWordComposer.setBatchInputWord(batchInputText);
-            setComposingTextInternal(batchInputText, 1);
-        }
+        mWordComposer.setBatchInputWord(batchInputText);
+        setComposingTextInternal(batchInputText, 1);
         mConnection.endBatchEdit();
         // Space state must be updated before calling updateShiftState
         mSpaceState = SpaceState.PHANTOM;
@@ -2186,8 +2144,7 @@
                         // hence 2; if we aren't, we should just skip whitespace if any, so 1.
                         mWordComposer.isComposingWord() ? 2 : 1),
                 keyboard,
-                new SettingsValuesForSuggestion(settingsValues.mBlockPotentiallyOffensive,
-                        settingsValues.mPhraseGestureEnabled),
+                new SettingsValuesForSuggestion(settingsValues.mBlockPotentiallyOffensive),
                 settingsValues.mAutoCorrectionEnabledPerUserSettings,
                 inputStyle, sequenceNumber, callback);
     }
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index 6ece59d..5596c7f 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -90,7 +90,6 @@
     public static final String PREF_GESTURE_PREVIEW_TRAIL = "pref_gesture_preview_trail";
     public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT =
             "pref_gesture_floating_preview_text";
-    public static final String PREF_PHRASE_GESTURE_ENABLED = "pref_gesture_space_aware";
 
     public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal";
 
@@ -235,12 +234,6 @@
                 && prefs.getBoolean(PREF_GESTURE_INPUT, true);
     }
 
-    public static boolean readPhraseGestureEnabled(final SharedPreferences prefs,
-            final Resources res) {
-        return prefs.getBoolean(PREF_PHRASE_GESTURE_ENABLED,
-                res.getBoolean(R.bool.config_default_phrase_gesture_enabled));
-    }
-
     public static boolean readFromBuildConfigIfToShowKeyPreviewPopupOption(final Resources res) {
         return res.getBoolean(R.bool.config_enable_show_key_preview_popup_option);
     }
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 1d6199d..ed11de9 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -77,7 +77,6 @@
     public final boolean mGestureTrailEnabled;
     public final boolean mGestureFloatingPreviewTextEnabled;
     public final boolean mSlidingKeyInputPreviewEnabled;
-    public final boolean mPhraseGestureEnabled;
     public final int mKeyLongpressTimeout;
     public final boolean mEnableEmojiAltPhysicalKey;
     public final boolean mEnableMetricsLogging;
@@ -174,7 +173,6 @@
                 null /* default */);
         mGestureFloatingPreviewTextEnabled = !mInputAttributes.mDisableGestureFloatingPreviewText
                 && prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true);
-        mPhraseGestureEnabled = Settings.readPhraseGestureEnabled(prefs, res);
         mAutoCorrectionEnabledPerUserSettings = mAutoCorrectEnabled
                 && !mInputAttributes.mInputTypeNoAutoCorrect;
         mSuggestionsEnabledPerUserSettings = readSuggestionsEnabled(prefs);
@@ -389,8 +387,6 @@
         sb.append("" + mGestureFloatingPreviewTextEnabled);
         sb.append("\n   mSlidingKeyInputPreviewEnabled = ");
         sb.append("" + mSlidingKeyInputPreviewEnabled);
-        sb.append("\n   mPhraseGestureEnabled = ");
-        sb.append("" + mPhraseGestureEnabled);
         sb.append("\n   mKeyLongpressTimeout = ");
         sb.append("" + mKeyLongpressTimeout);
         sb.append("\n   mLocale = ");
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValuesForSuggestion.java b/java/src/com/android/inputmethod/latin/settings/SettingsValuesForSuggestion.java
index 56e6fac..5e2e5a5 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValuesForSuggestion.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValuesForSuggestion.java
@@ -18,11 +18,8 @@
 
 public class SettingsValuesForSuggestion {
     public final boolean mBlockPotentiallyOffensive;
-    public final boolean mSpaceAwareGestureEnabled;
 
-    public SettingsValuesForSuggestion(final boolean blockPotentiallyOffensive,
-            final boolean spaceAwareGestureEnabled) {
+    public SettingsValuesForSuggestion(final boolean blockPotentiallyOffensive) {
         mBlockPotentiallyOffensive = blockPotentiallyOffensive;
-        mSpaceAwareGestureEnabled = spaceAwareGestureEnabled;
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index ff0578d..f524441 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -79,8 +79,7 @@
     private float mRecommendedThreshold;
     // TODO: make a spell checker option to block offensive words or not
     private final SettingsValuesForSuggestion mSettingsValuesForSuggestion =
-            new SettingsValuesForSuggestion(true /* blockPotentiallyOffensive */,
-                    true /* spaceAwareGestureEnabled */);
+            new SettingsValuesForSuggestion(true /* blockPotentiallyOffensive */);
 
     public static final String SINGLE_QUOTE = "\u0027";
     public static final String APOSTROPHE = "\u2019";
diff --git a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
index 9171468..a784461 100644
--- a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
@@ -85,11 +85,13 @@
         }
     }
 
+    @UsedForTesting
     public static Runnable chain(final Runnable... runnables) {
         return new RunnableChain(runnables);
     }
 
-    private static class RunnableChain implements Runnable {
+    @UsedForTesting
+    public static class RunnableChain implements Runnable {
         private final Runnable[] mRunnables;
 
         private RunnableChain(final Runnable... runnables) {
@@ -99,6 +101,11 @@
             mRunnables = runnables;
         }
 
+        @UsedForTesting
+        public Runnable[] getRunnables() {
+            return mRunnables;
+        }
+
         @Override
         public void run() {
             for (Runnable runnable : mRunnables) {