Implement logical or to Keyboard switch-case matching

Change-Id: Iab615459c21fa5799a7b30b8649d75347e46c804
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 7473b42..5557dde 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -70,7 +70,7 @@
         <attr name="shadowRadius" format="float" />
         <attr name="backgroundDimAmount" format="float" />
 
-        <attr name="keyLetterStyle">
+        <attr name="keyLetterStyle" format="enum">
             <!-- This should be aligned with Typeface.NORMAL etc. -->
             <enum name="normal" value="0" />
             <enum name="bold" value="1" />
@@ -78,7 +78,7 @@
             <enum name="boldItalic" value="3" />
         </attr>
 
-        <attr name="colorScheme">
+        <attr name="colorScheme" format="enum">
             <!-- This should be aligned with KeyboardView.COLOR_SCHEME_* -->
             <enum name="white" value="0" />
             <enum name="black" value="1" />
@@ -125,7 +125,7 @@
         <!-- Maximum column of popup keyboard -->
         <attr name="maxPopupKeyboardColumn" format="integer" />
         <!-- Key edge flags. -->
-        <attr name="keyEdgeFlags">
+        <attr name="keyEdgeFlags" format="integer">
             <!-- Key is anchored to the left of the keyboard. -->
             <flag name="left" value="1" />
             <!-- Key is anchored to the right of the keyboard. -->
@@ -144,7 +144,7 @@
         <!-- The label to display on the key. -->
         <attr name="keyLabel" format="string" />
         <!-- The key label option -->
-        <attr name="keyLabelOption">
+        <attr name="keyLabelOption" format="integer">
             <!-- This should be aligned with KeyboardView.KEY_LABEL_OPTION_* -->
             <flag name="alignLeft" value="1" />
             <flag name="alignRight" value="2" />
@@ -176,7 +176,7 @@
 
     <declare-styleable name="Keyboard_Row">
         <!-- Row edge flags. -->
-        <attr name="rowEdgeFlags">
+        <attr name="rowEdgeFlags" format="integer">
             <!-- Row is anchored to the top of the keyboard. -->
             <flag name="top" value="4" />
             <!-- Row is anchored to the bottom of the keyboard. -->
@@ -190,7 +190,7 @@
 
     <declare-styleable name="Keyboard_Case">
         <!-- This should be aligned with KeyboardId.MODE_* -->
-        <attr name="mode">
+        <attr name="mode" format="enum|string">
             <enum name="text" value="0" />
             <enum name="url" value="1" />
             <enum name="email" value="2" />
@@ -203,17 +203,18 @@
         <attr name="hasSettingsKey" format="string" />
         <attr name="voiceKeyEnabled" format="string" />
         <attr name="hasVoiceKey" format="string" />
-        <attr name="imeAction">
+        <attr name="imeAction" format="enum">
             <!-- This should be aligned with EditorInfo.IME_ACTION_* -->
-            <flag name="actionUnspecified" value="0" />
-            <flag name="actionNone" value="1" />
-            <flag name="actionGo" value="2" />
-            <flag name="actionSearch" value="3" />
-            <flag name="actionSend" value="4" />
-            <flag name="actionNext" value="5" />
-            <flag name="actionDone" value="6" />
-            <flag name="actionPrevious" value="7" />
+            <enum name="actionUnspecified" value="0" />
+            <enum name="actionNone" value="1" />
+            <enum name="actionGo" value="2" />
+            <enum name="actionSearch" value="3" />
+            <enum name="actionSend" value="4" />
+            <enum name="actionNext" value="5" />
+            <enum name="actionDone" value="6" />
+            <enum name="actionPrevious" value="7" />
         </attr>
+        <attr name="localeCode" format="string" />
         <attr name="languageCode" format="string" />
         <attr name="countryCode" format="string" />
     </declare-styleable>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row4.xml b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
index b24ea5e..a2e4f1f 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
@@ -40,15 +40,8 @@
                 latin:languageCode="ru"
             >
                 <switch>
-                    <!-- TODO: implement logical OR for <case> attribute -->
                     <case
-                        latin:mode="email"
-                    >
-                        <Key
-                            latin:keyStyle="comKeyStyle" />
-                    </case>
-                    <case
-                        latin:mode="url"
+                        latin:mode="email|url"
                     >
                         <Key
                             latin:keyStyle="comKeyStyle" />
diff --git a/java/res/xml/kbd_currency_key_styles.xml b/java/res/xml/kbd_currency_key_styles.xml
index b30dd64..9d3bb47 100644
--- a/java/res/xml/kbd_currency_key_styles.xml
+++ b/java/res/xml/kbd_currency_key_styles.xml
@@ -27,229 +27,59 @@
         >
             <key-style
                 latin:styleName="currencyKeyStyle"
-                latin:keyLabel="$"
-                latin:popupCharacters="@string/alternates_for_currency_dollar" />
+                latin:keyLabel="$" />
         </case>
         <!-- Countries using Euro currency, 23 countries as for January 2011. -->
-        <!-- 1. Andorra (ca_AD, ca_ES) -->
+              1. Andorra (ca_AD, ca_ES)
+              2. Austria (de_AT)
+              3. Belgium (nl_BE, fr_BE, de_BE)
+              4. Cyprus (el_CY, tr_CY)
+              5. Estonia (et_EE)
+              6. Finland (fi_FI, sv_FI)
+              7. France (fr_FR)
+              8. Germany (de_DE)
+              9. Greece (el_GR)
+             10. Ireland (ga_IE, en_IE)
+             11. Italy (it_IT)
+             12. Kosovo (??_XK) ??
+             13. Luxembourg (lb_LU, fr_LU, de_LU)
+             14. Malta (mt_MT, en_MT)
+             15. Monaco (fr_MO)
+             16. Montenegro (sla_ME)
+             17. Netherlands (nl_NL)
+             18. Portugal (pt_PT)
+             19. San Marino (it_SM)
+             20. Slovakia (sk_SK)
+             21. Slovenia (sl_SI)
+             22. Spain (es_ES, ca_ES)
+             23. Vatican City (it_VA)
+        -->
+        <!-- Note: Some locales may not have country code, and it it supposed to indicate the
+             country where the language originally/mainly spoken. -->
         <case
-            latin:languageCode="ca"
-            latin:countryCode=""
+            latin:localeCode="de|es|el|fi|fr|it|nl|sk|sl|pt_PT"
         >
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
                 latin:popupCharacters="@string/alternates_for_currency_euro" />
         </case>
-        <!-- 2. Austria (de_AT) -->
-<!--        <case-->
-<!--            latin:countryCode="AT"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 3. Belgium (nl_BE, fr_BE, de_BE) -->
-<!--        <case-->
-<!--            latin:countryCode="BE"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 4. Cyprus (el_CY, tr_CY) -->
         <case
-            latin:countryCode="CY"
+            latin:languageCode="ca|et|lb|mt|sla"
         >
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
                 latin:popupCharacters="@string/alternates_for_currency_euro" />
         </case>
-        <!-- 5. Estonia (et_EE) -->
-<!--        <case-->
-<!--            latin:languageCode="et"-->
-<!--            latin:countryCode=""-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 6. Finland (fi_FI, sv_FI) -->
         <case
-            latin:languageCode="fi"
-            latin:countryCode=""
+            latin:countryCode="AD|AT|BE|CY|EE|FI|FR|DE|GR|IE|IT|XK|LU|MT|MO|ME|NL|PT|SM|SK|SI|ES|VA"
         >
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
                 latin:popupCharacters="@string/alternates_for_currency_euro" />
         </case>
-        <!-- 7. France (fr_FR) -->
-        <case
-            latin:languageCode="fr"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 8. Germany (de_DE) -->
-        <case
-            latin:languageCode="de"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 9. Greece (el_GR) -->
-        <case
-            latin:languageCode="el"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 10. Ireland (ga_IE, en_IE) -->
-        <case
-            latin:countryCode="IE"
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 11. Italy (it_IT) -->
-        <case
-            latin:languageCode="it"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 12. Kosovo -->
-<!--        <case-->
-<!--            latin:countryCode="XK"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 13. Luxembourg (lb_LU, fr_LU, de_LU) -->
-        <case
-            latin:countryCode="LU"
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 14. Malta (mt_MT, en_MT) -->
-        <case
-            latin:countryCode="MT"
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 15. Monaco (fr_MO) -->
-<!--        <case-->
-<!--            latin:countryCode="MO"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 16. Montenegro (sla_ME) -->
-        <case
-            latin:countryCode="ME"
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 17. Netherlands (nl_NL) -->
-        <case
-            latin:languageCode="nl"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 18. Portugal (pt_PT) -->
-        <case
-            latin:languageCode="pt"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 19. San Marino (it_SM) -->
-<!--        <case-->
-<!--            latin:countryCode="SM"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
-        <!-- 20. Slovakia (sk_SK) -->
-        <case
-            latin:languageCode="sk"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 21. Slovenia (sl_SI) -->
-        <case
-            latin:languageCode="sl"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 22. Spain (es_ES, ca_ES) -->
-        <case
-            latin:languageCode="es"
-            latin:countryCode=""
-        >
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
-        </case>
-        <!-- 23. Vatican City (it_VA) -->
-<!--        <case-->
-<!--            latin:countryCode="VA"-->
-<!--        >-->
-<!--            <key-style-->
-<!--                latin:styleName="currencyKeyStyle"-->
-<!--                latin:keyLabel="€"-->
-<!--                latin:popupCharacters="@string/alternates_for_currency_euro" />-->
-<!--        </case>-->
         <!-- United Kingdom -->
         <case
             latin:countryCode="GB"
@@ -266,4 +96,4 @@
                 latin:popupCharacters="@string/alternates_for_currency_dollar" />
         </default>
     </switch>
-</merge>
\ No newline at end of file
+</merge>