Merge "Rename and reorganize key code"
diff --git a/java/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml
index 6b5c223..e656966 100644
--- a/java/res/xml-de/kbd_qwerty.xml
+++ b/java/res/xml-de/kbd_qwerty.xml
@@ -28,7 +28,7 @@
     latin:verticalGap="@dimen/key_bottom_gap"
     latin:popupKeyboardTemplate="@xml/kbd_popup_template"
     latin:maxPopupKeyboardColumn="@integer/config_max_popup_keyboard_column"
-    latin:keyboardLocale="de"
+    latin:keyboardLocale="de_DE"
 >
     <include
         latin:keyboardLayout="@xml/kbd_qwertz_rows" />
diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml
index e4b73bf..2f8e67b 100644
--- a/java/res/xml-fr/kbd_qwerty.xml
+++ b/java/res/xml-fr/kbd_qwerty.xml
@@ -28,7 +28,7 @@
     latin:verticalGap="@dimen/key_bottom_gap"
     latin:popupKeyboardTemplate="@xml/kbd_popup_template"
     latin:maxPopupKeyboardColumn="@integer/config_max_popup_keyboard_column"
-    latin:keyboardLocale="fr"
+    latin:keyboardLocale="fr_FR"
 >
     <include
         latin:keyboardLayout="@xml/kbd_azerty_rows" />
diff --git a/java/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml
index 065cf3a..e5aea58 100644
--- a/java/res/xml-ru/kbd_qwerty.xml
+++ b/java/res/xml-ru/kbd_qwerty.xml
@@ -27,7 +27,7 @@
     latin:verticalGap="@dimen/key_bottom_gap"
     latin:popupKeyboardTemplate="@xml/kbd_popup_template"
     latin:maxPopupKeyboardColumn="@integer/config_max_popup_keyboard_column"
-    latin:keyboardLocale="ru"
+    latin:keyboardLocale="ru_RU"
 >
     <include
         latin:keyboardLayout="@xml/kbd_ru_rows" />
diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml
index 6bf6b78..a4251c0 100644
--- a/java/res/xml/kbd_qwerty.xml
+++ b/java/res/xml/kbd_qwerty.xml
@@ -28,7 +28,7 @@
     latin:verticalGap="@dimen/key_bottom_gap"
     latin:popupKeyboardTemplate="@xml/kbd_popup_template"
     latin:maxPopupKeyboardColumn="@integer/config_max_popup_keyboard_column"
-    latin:keyboardLocale="en"
+    latin:keyboardLocale="en_GB,en_US"
 >
     <include
         latin:keyboardLayout="@xml/kbd_qwerty_rows" />
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index fb7b0ea..cbfc3c3 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -64,13 +64,6 @@
             android:key="subtype_settings"
             android:title="@string/language_selection_title"
             android:summary="@string/language_selection_summary" />
-        <PreferenceScreen
-            android:key="language_selection"
-            android:title="@string/language_selection_title"
-            android:summary="@string/language_selection_summary">
-            <intent
-                    android:action="com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION"/>
-        </PreferenceScreen>
     </PreferenceCategory>
     <PreferenceCategory
         android:title="@string/prediction_category"
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index f06760e..0b532f7 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -40,8 +40,9 @@
             int flagsForSubtypeSettings) {
         final String action;
         Intent intent;
-        if (android.os.Build.VERSION.SDK_INT
-                >= /* android.os.Build.VERSION_CODES.HONEYCOMB */ 11) {
+        if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED
+                /* android.os.Build.VERSION_CODES.HONEYCOMB */
+                && android.os.Build.VERSION.SDK_INT >=  11) {
             // Refer to android.provider.Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS
             action = INPUT_METHOD_SUBTYPE_SETTINGS;
             intent = new Intent(action);
diff --git a/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java b/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java
index 6c6960c..ce576d0 100644
--- a/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java
+++ b/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java
@@ -43,13 +43,15 @@
 import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Locale;
 
 public class InputLanguageSelection extends PreferenceActivity {
 
     private SharedPreferences mPrefs;
     private String mSelectedLanguages;
-    private ArrayList<Loc> mAvailableLanguages = new ArrayList<Loc>();
+    private HashMap<CheckBoxPreference, Locale> mLocaleMap =
+            new HashMap<CheckBoxPreference, Locale>();
 
     private static class Loc implements Comparable<Object> {
         private static Collator sCollator = Collator.getInstance();
@@ -85,14 +87,17 @@
         mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
         mSelectedLanguages = mPrefs.getString(Settings.PREF_SELECTED_LANGUAGES, "");
         String[] languageList = mSelectedLanguages.split(",");
-        mAvailableLanguages = getUniqueLocales();
+        ArrayList<Loc> availableLanguages = getUniqueLocales();
         PreferenceGroup parent = getPreferenceScreen();
-        for (int i = 0; i < mAvailableLanguages.size(); i++) {
-            Locale locale = mAvailableLanguages.get(i).mLocale;
+        for (int i = 0; i < availableLanguages.size(); i++) {
+            Locale locale = availableLanguages.get(i).mLocale;
             final Pair<Boolean, Boolean> hasDictionaryOrLayout = hasDictionaryOrLayout(locale);
             final boolean hasDictionary = hasDictionaryOrLayout.first;
             final boolean hasLayout = hasDictionaryOrLayout.second;
-            if (!hasDictionary && !hasLayout) {
+            // Add this locale to the supported list if:
+            // 1) this locale has a layout/ 2) this locale has a dictionary and the length
+            // of the locale is equal to or larger than 5.
+            if (!hasLayout && !(hasDictionary && locale.toString().length() >= 5)) {
                 continue;
             }
             CheckBoxPreference pref = new CheckBoxPreference(this);
@@ -102,6 +107,7 @@
             if (hasDictionary) {
                 pref.setSummary(R.string.has_dictionary);
             }
+            mLocaleMap.put(pref, locale);
             parent.addPreference(pref);
         }
     }
@@ -135,11 +141,16 @@
             }
             bd.close();
 
-            final String countryCode = locale.getLanguage();
-            final String layoutCountryCode = KeyboardParser.parseKeyboardLocale(
-                    this, R.xml.kbd_qwerty);
-            if (!TextUtils.isEmpty(countryCode) && !TextUtils.isEmpty(layoutCountryCode)) {
-                hasLayout = countryCode.subSequence(0, 2).equals(layoutCountryCode.substring(0, 2));
+            final String localeStr = locale.toString();
+            final String[] layoutCountryCodes = KeyboardParser.parseKeyboardLocale(
+                    this, R.xml.kbd_qwerty).split(",", -1);
+            if (!TextUtils.isEmpty(localeStr) && layoutCountryCodes.length > 0) {
+                for (String s : layoutCountryCodes) {
+                    if (s.equals(localeStr)) {
+                        hasLayout = true;
+                        break;
+                    }
+                }
             }
         } catch (XmlPullParserException e) {
         } catch (IOException e) {
@@ -170,8 +181,7 @@
         for (int i = 0; i < count; i++) {
             CheckBoxPreference pref = (CheckBoxPreference) parent.getPreference(i);
             if (pref.isChecked()) {
-                Locale locale = mAvailableLanguages.get(i).mLocale;
-                checkedLanguages += get5Code(locale) + ",";
+                checkedLanguages += get5Code(mLocaleMap.get(pref)) + ",";
             }
         }
         if (checkedLanguages.length() < 1) checkedLanguages = null; // Save null
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 1725ee7..6a0b7b0 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -68,7 +68,6 @@
     public static final String PREF_AUTO_CORRECTION_THRESHOLD = "auto_correction_threshold";
     public static final String PREF_BIGRAM_SUGGESTIONS = "bigram_suggestion";
     public static final String PREF_DEBUG_SETTINGS = "debug_settings";
-    public static final String PREF_LANGUAGE_SELECTION = "language_selection";
 
     public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
 
@@ -152,7 +151,8 @@
 
         final boolean showSubtypeSettings = getResources().getBoolean(
                 R.bool.config_enable_show_subtype_settings);
-        if (!showSubtypeSettings) {
+        if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED
+                && !showSubtypeSettings) {
             generalSettings.removePreference(findPreference(PREF_SUBTYPES));
         }
 
@@ -185,10 +185,6 @@
         if (!showUsabilityModeStudyOption) {
             getPreferenceScreen().removePreference(findPreference(PREF_USABILITY_STUDY_MODE));
         }
-
-        if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) {
-            generalSettings.removePreference(findPreference(PREF_LANGUAGE_SELECTION));
-        }
     }
 
     @Override