Add element predicator to <switch><case> condition of Keyboard

Change-Id: I8f9eb8eb28707d23e421e88f979022d844a3b3ee
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 57aa5dd..5824d17 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -294,6 +294,19 @@
     </declare-styleable>
 
     <declare-styleable name="Keyboard_Case">
+        <!-- This should be aligned with KeyboardSet_Element's elementName. -->
+        <attr name="keyboardSetElement" format="enum|string">
+            <enum name="alphabet" value="0" />
+            <enum name="alphabetManualShifted" value="1" />
+            <enum name="alphabetAutomaticShifted" value="2" />
+            <enum name="alphabetShiftLocked" value="3" />
+            <enum name="alphabetShiftLockShifted" value="4" />
+            <enum name="symbols" value="5" />
+            <enum name="symbolsShifted" value="6"  />
+            <enum name="phone" value="7"  />
+            <enum name="phoneShifted" value="8"  />
+            <enum name="number" value="9"  />
+        </attr>
         <!-- This should be aligned with KeyboardId.MODE_* -->
         <attr name="mode" format="enum|string">
             <enum name="text" value="0" />
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index c548f11..a09232b 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -1034,6 +1034,9 @@
             final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
                     R.styleable.Keyboard_Case);
             try {
+                final boolean keyboardSetElementMatched = matchTypedValue(a,
+                        R.styleable.Keyboard_Case_keyboardSetElement, id.mElementId,
+                        KeyboardId.elementIdToName(id.mElementId));
                 final boolean modeMatched = matchTypedValue(a,
                         R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode));
                 final boolean navigateActionMatched = matchBoolean(a,
@@ -1062,13 +1065,15 @@
                         R.styleable.Keyboard_Case_languageCode, id.mLocale.getLanguage());
                 final boolean countryCodeMatched = matchString(a,
                         R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry());
-                final boolean selected = modeMatched && navigateActionMatched
-                        && passwordInputMatched && hasSettingsKeyMatched && f2KeyModeMatched
-                        && clobberSettingsKeyMatched && shortcutKeyEnabledMatched
-                        && hasShortcutKeyMatched && imeActionMatched && localeCodeMatched
-                        && languageCodeMatched && countryCodeMatched;
+                final boolean selected = keyboardSetElementMatched && modeMatched
+                        && navigateActionMatched && passwordInputMatched && hasSettingsKeyMatched
+                        && f2KeyModeMatched && clobberSettingsKeyMatched
+                        && shortcutKeyEnabledMatched && hasShortcutKeyMatched && imeActionMatched
+                        && localeCodeMatched && languageCodeMatched && countryCodeMatched;
 
-                if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE,
+                if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE,
+                        textAttr(a.getString(R.styleable.Keyboard_Case_keyboardSetElement),
+                                "keyboardSetElement"),
                         textAttr(a.getString(R.styleable.Keyboard_Case_mode), "mode"),
                         booleanAttr(a, R.styleable.Keyboard_Case_navigateAction, "navigateAction"),
                         booleanAttr(a, R.styleable.Keyboard_Case_passwordInput, "passwordInput"),