Merge "Fix automatic temporary upper case mode behaviour"
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 815c7fd..64a4c9f 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -132,7 +132,15 @@
     </declare-styleable>
 
     <declare-styleable name="BaseKeyboard_Case">
-        <attr name="mode" format="string" />
+        <!-- This should be matched with KeyboardSwitcher.MODE_* -->
+        <attr name="mode">
+            <flag name="text" value="0" />
+            <flag name="url" value="1" />
+            <flag name="email" value="2" />
+            <flag name="im" value="3" />
+            <flag name="web" value="4" />
+            <flag name="phone" value="5" />
+        </attr>
         <attr name="settingsKey" format="string" />
         <attr name="voiceKey" format="string" />
     </declare-styleable>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index d3ac0da..85612b0 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -70,12 +70,13 @@
             android:defaultValue="@string/voice_mode_main"
             />
 
-
+    <!-- TODO: Filter subtypes by IME in SubtypeEnabler -->
+    <!-- TODO: Maybe use this only for phone? -->
     <PreferenceScreen
             android:title="@string/language_selection_title"
             android:summary="@string/language_selection_summary">
         <intent
-                android:action="com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION"/>
+                android:action="android.settings.INPUT_METHOD_AND_SUBTYPE_ENABLER"/>
     </PreferenceScreen>
 
     <PreferenceCategory
diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
index 496f651..276abfc 100644
--- a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
+++ b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
@@ -120,14 +120,6 @@
     private static final String TAG_CASE = "case";
     private static final String TAG_DEFAULT = "default";
 
-    // String representation of KeyboardSwitcher.MODE_xxx.
-    private static final String MODE_TEXT = "text";
-    private static final String MODE_URL = "url";
-    private static final String MODE_EMAIL = "email";
-    private static final String MODE_IM = "im";
-    private static final String MODE_WEB = "web";
-    private static final String MODE_PHONE = "phone";
-
     private final BaseKeyboard mKeyboard;
     private final Resources mResources;
 
@@ -411,7 +403,7 @@
         final BaseKeyboard keyboard = mKeyboard;
         final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
                 R.styleable.BaseKeyboard_Case);
-        final String mode = a.getString(R.styleable.BaseKeyboard_Case_mode);
+        final int mode = a.getInt(R.styleable.BaseKeyboard_Case_mode, -1);
         final String settingsKey = a.getString(R.styleable.BaseKeyboard_Case_settingsKey);
         final String voiceKey = a.getString(R.styleable.BaseKeyboard_Case_voiceKey);
         a.recycle();
@@ -419,8 +411,7 @@
         final KeyboardId id = keyboard.mId;
         if (id == null)
             return true;
-        final boolean modeMatched = (mode == null
-                || id.mMode == parseModeString(mode));
+        final boolean modeMatched = (mode == -1 || id.mMode == mode);
         final boolean settingsKeyMatched = (settingsKey == null
                 || id.mHasSettingsKey == Boolean.parseBoolean(settingsKey));
         final boolean voiceKeyMatched = (voiceKey == null
@@ -428,23 +419,13 @@
         final boolean selected = modeMatched && settingsKeyMatched && voiceKeyMatched;
         if (DEBUG_TAG) {
             Log.d(TAG, "parseCaseCondition: " + Boolean.toString(selected).toUpperCase()
-                    + (mode != null ? " mode=" + mode : "")
+                    + (mode != -1 ? " mode=" + mode : "")
                     + (settingsKey != null ? " settingsKey="+settingsKey : "")
                     + (voiceKey != null ? " voiceKey=" + voiceKey : ""));
         }
         return selected;
     }
 
-    private static int parseModeString(String mode) {
-        if (mode.equals(MODE_TEXT)) return KeyboardSwitcher.MODE_TEXT;
-        if (mode.equals(MODE_URL)) return KeyboardSwitcher.MODE_URL;
-        if (mode.equals(MODE_EMAIL)) return KeyboardSwitcher.MODE_EMAIL;
-        if (mode.equals(MODE_IM)) return KeyboardSwitcher.MODE_IM;
-        if (mode.equals(MODE_WEB)) return KeyboardSwitcher.MODE_WEB;
-        if (mode.equals(MODE_PHONE)) return KeyboardSwitcher.MODE_PHONE;
-        throw new RuntimeException("uknown mode attribute in Keyboard XML: " + mode);
-    }
-
     private boolean parseDefault(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
         if (DEBUG_PARSER) debugEnterMethod("parseDefault", keys == null);