Merge "Do not change the proximity orders"
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index e111bdd..aec1703 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -37,12 +37,9 @@
     <string name="misc_category" msgid="6894192814868233453">"Otras opciones"</string>
     <string name="advanced_settings" msgid="362895144495591463">"Configuración avanzada"</string>
     <string name="advanced_settings_summary" msgid="4487980456152830271">"Opciones para expertos"</string>
-    <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
-    <skip />
-    <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
-    <skip />
-    <!-- no translation found for suppress_language_switch_key (8003788410354806368) -->
-    <skip />
+    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de entrada"</string>
+    <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de cambio de idioma abarca otros métodos de entrada."</string>
+    <string name="suppress_language_switch_key" msgid="8003788410354806368">"Supr. tecla cambio idioma"</string>
     <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Retraso en rechazo de alerta de tecla"</string>
     <string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Sin demora"</string>
     <string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predeterminada"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 2018c55..3dd1519 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -37,12 +37,9 @@
     <string name="misc_category" msgid="6894192814868233453">"Otras opciones"</string>
     <string name="advanced_settings" msgid="362895144495591463">"Ajustes avanzados"</string>
     <string name="advanced_settings_summary" msgid="4487980456152830271">"Opciones para expertos"</string>
-    <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
-    <skip />
-    <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
-    <skip />
-    <!-- no translation found for suppress_language_switch_key (8003788410354806368) -->
-    <skip />
+    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de introducción"</string>
+    <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de cambio de idioma sirve también para otros métodos."</string>
+    <string name="suppress_language_switch_key" msgid="8003788410354806368">"Eliminar tecla cambiar idioma"</string>
     <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Retraso de rechazo"</string>
     <string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Sin retraso"</string>
     <string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predeterminado"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index d65a568..a3f01e1 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -37,12 +37,9 @@
     <string name="misc_category" msgid="6894192814868233453">"Altre opzioni"</string>
     <string name="advanced_settings" msgid="362895144495591463">"Impostazioni avanzate"</string>
     <string name="advanced_settings_summary" msgid="4487980456152830271">"Opzioni per esperti"</string>
-    <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
-    <skip />
-    <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
-    <skip />
-    <!-- no translation found for suppress_language_switch_key (8003788410354806368) -->
-    <skip />
+    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Altri metodi immissione"</string>
+    <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Il tasto per cambiare lingua offre altri metodi di immissione"</string>
+    <string name="suppress_language_switch_key" msgid="8003788410354806368">"Elimina tasto cambio lingua"</string>
     <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Ritardo eliminaz. popup tasto"</string>
     <string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Nessun ritardo"</string>
     <string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predefinito"</string>
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index fa5a46f..7c08377 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1114,8 +1114,7 @@
             if (ic != null) {
                 ic.commitText(typedWord, 1);
             }
-            addToUserUnigramAndBigramDictionaries(typedWord,
-                    UserUnigramDictionary.FREQUENCY_FOR_TYPED);
+            addToUserHistoryDictionary(typedWord);
         }
         updateSuggestions();
     }
@@ -1834,9 +1833,8 @@
             mExpectingUpdateSelection = true;
             commitChosenWord(autoCorrection, LastComposedWord.COMMIT_TYPE_DECIDED_WORD,
                     separatorCodePoint);
-            // Add the word to the user unigram dictionary if it's not a known word
-            addToUserUnigramAndBigramDictionaries(autoCorrection,
-                    UserUnigramDictionary.FREQUENCY_FOR_TYPED);
+            // Add the word to the user history dictionary
+            addToUserHistoryDictionary(autoCorrection);
             if (!typedWord.equals(autoCorrection) && null != ic) {
                 // This will make the correction flash for a short while as a visual clue
                 // to the user that auto-correction happened.
@@ -1895,13 +1893,8 @@
         mExpectingUpdateSelection = true;
         commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK,
                 LastComposedWord.NOT_A_SEPARATOR);
-        // Add the word to the auto dictionary if it's not a known word
-        if (index == 0) {
-            addToUserUnigramAndBigramDictionaries(suggestion,
-                    UserUnigramDictionary.FREQUENCY_FOR_PICKED);
-        } else {
-            addToOnlyBigramDictionary(suggestion, 1);
-        }
+        // Add the word to the user history dictionary
+        addToUserHistoryDictionary(suggestion);
         mSpaceState = SPACE_STATE_PHANTOM;
         // TODO: is this necessary?
         mKeyboardSwitcher.updateShiftState();
@@ -2002,21 +1995,10 @@
         setSuggestionStripShown(isSuggestionsStripVisible());
     }
 
-    private void addToUserUnigramAndBigramDictionaries(CharSequence suggestion,
-            int frequencyDelta) {
-        checkAddToDictionary(suggestion, frequencyDelta, false);
-    }
-
-    private void addToOnlyBigramDictionary(CharSequence suggestion, int frequencyDelta) {
-        checkAddToDictionary(suggestion, frequencyDelta, true);
-    }
-
     /**
      * Adds to the UserBigramDictionary and/or UserUnigramDictionary
-     * @param selectedANotTypedWord true if it should be added to bigram dictionary if possible
      */
-    private void checkAddToDictionary(CharSequence suggestion, int frequencyDelta,
-            boolean selectedANotTypedWord) {
+    private void addToUserHistoryDictionary(final CharSequence suggestion) {
         if (suggestion == null || suggestion.length() < 1) return;
 
         // Only auto-add to dictionary if auto-correct is ON. Otherwise we'll be
@@ -2027,28 +2009,17 @@
             return;
         }
 
-        if (null != mSuggest && null != mUserUnigramDictionary) {
-            final boolean selectedATypedWordAndItsInUserUnigramDic =
-                    !selectedANotTypedWord && mUserUnigramDictionary.isValidWord(suggestion);
-            final boolean isValidWord = AutoCorrection.isValidWord(
-                    mSuggest.getUnigramDictionaries(), suggestion, true);
-            final boolean needsToAddToUserUnigramDictionary =
-                    selectedATypedWordAndItsInUserUnigramDic || !isValidWord;
-            if (needsToAddToUserUnigramDictionary) {
-                mUserUnigramDictionary.addWord(suggestion.toString(), frequencyDelta);
-            }
+        if (null != mUserUnigramDictionary) {
+            mUserUnigramDictionary.addUnigram(suggestion.toString());
         }
 
         if (mUserBigramDictionary != null) {
-            // We don't want to register as bigrams words separated by a separator.
-            // For example "I will, and you too" : we don't want the pair ("will" "and") to be
-            // a bigram.
             final InputConnection ic = getCurrentInputConnection();
             if (null != ic) {
                 final CharSequence prevWord =
                         EditingUtils.getPreviousWord(ic, mSettingsValues.mWordSeparators);
-                if (!TextUtils.isEmpty(prevWord)) {
-                    mUserBigramDictionary.addBigrams(prevWord.toString(), suggestion.toString());
+                if (null != prevWord) {
+                    mUserBigramDictionary.addBigramPair(prevWord.toString(), suggestion.toString());
                 }
             }
         }
diff --git a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
index e6a59d0..52a31f2 100644
--- a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
@@ -157,7 +157,7 @@
     /**
      * Pair will be added to the userbigram database.
      */
-    public int addBigrams(String word1, String word2) {
+    public int addBigramPair(String word1, String word2) {
         // remove caps if second word is autocapitalized
         if (mIme != null && mIme.isAutoCapitalized()) {
             word2 = Character.toLowerCase(word2.charAt(0)) + word2.substring(1);
diff --git a/java/src/com/android/inputmethod/latin/UserUnigramDictionary.java b/java/src/com/android/inputmethod/latin/UserUnigramDictionary.java
index 869865d..2fc395c 100644
--- a/java/src/com/android/inputmethod/latin/UserUnigramDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserUnigramDictionary.java
@@ -143,9 +143,9 @@
         }
     }
 
-    @Override
-    public void addWord(String newWord, int addFrequency) {
+    public void addUnigram(String newWord) {
         if (!ENABLE_USER_UNIGRAM_DICTIONARY) return;
+        final int addFrequency = FREQUENCY_FOR_TYPED;
         String word = newWord;
         final int length = word.length();
         // Don't add very short or very long words.