Support imeOptions condition in <case>

Change-Id: Ie5494601efb29cf65363c4aa3bf5a9ab04a0109a
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 24c9855..28ea6fc 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -155,6 +155,17 @@
         <attr name="hasSettingsKey" format="string" />
         <attr name="voiceKeyEnabled" format="string" />
         <attr name="hasVoiceKey" format="string" />
+        <attr name="imeOptions">
+            <!-- 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" />
+        </attr>
     </declare-styleable>
 
     <declare-styleable name="BaseKeyboard_KeyStyle">
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index ec813d7..b80bb9f 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -21,6 +21,7 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
+    <!-- Functional key styles -->
     <switch>
         <case
             latin:colorScheme="white"
@@ -84,12 +85,6 @@
                 latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
                 latin:parentStyle="functionalKeyStyle" />
             <key-style
-                latin:styleName="returnKeyStyle"
-                latin:codes="@integer/key_return"
-                latin:keyIcon="@drawable/sym_keyboard_return"
-                latin:iconPreview="@drawable/sym_keyboard_feedback_return"
-                latin:parentStyle="functionalKeyStyle" />
-            <key-style
                 latin:styleName="micKeyStyle"
                 latin:codes="@integer/key_voice"
                 latin:popupKeyboard="@xml/popup_mic"
@@ -166,12 +161,6 @@
                 latin:iconPreview="@drawable/sym_keyboard_feedback_tab"
                 latin:parentStyle="functionalKeyStyle" />
             <key-style
-                latin:styleName="returnKeyStyle"
-                latin:codes="@integer/key_return"
-                latin:keyIcon="@drawable/sym_bkeyboard_return"
-                latin:iconPreview="@drawable/sym_keyboard_feedback_return"
-                latin:parentStyle="functionalKeyStyle" />
-            <key-style
                 latin:styleName="micKeyStyle"
                 latin:codes="@integer/key_voice"
                 latin:popupKeyboard="@xml/popup_mic"
@@ -188,6 +177,95 @@
                 latin:iconPreview="@drawable/sym_keyboard_feedback_tab" />
         </case>
     </switch>
+    <!-- Return key style -->
+    <switch>
+        <case
+            latin:imeOptions="actionGo"
+        >
+            <key-style
+                latin:styleName="returnKeyStyle"
+                latin:codes="@integer/key_return"
+                latin:keyLabel="@string/label_go_key"
+                latin:parentStyle="functionalKeyStyle" />
+        </case>
+        <case
+            latin:imeOptions="actionNext"
+        >
+            <key-style
+                latin:styleName="returnKeyStyle"
+                latin:codes="@integer/key_return"
+                latin:keyLabel="@string/label_next_key"
+                latin:parentStyle="functionalKeyStyle" />
+        </case>
+        <case
+            latin:imeOptions="actionDone"
+        >
+            <key-style
+                latin:styleName="returnKeyStyle"
+                latin:codes="@integer/key_return"
+                latin:keyLabel="@string/label_done_key"
+                latin:parentStyle="functionalKeyStyle" />
+        </case>
+        <case
+            latin:imeOptions="actionSend"
+        >
+            <key-style
+                latin:styleName="returnKeyStyle"
+                latin:codes="@integer/key_return"
+                latin:keyLabel="@string/label_send_key"
+                latin:parentStyle="functionalKeyStyle" />
+        </case>
+        <case
+            latin:imeOptions="actionSearch"
+        >
+            <switch>
+                <case
+                    latin:colorScheme="white"
+                >
+                    <key-style
+                        latin:styleName="returnKeyStyle"
+                        latin:codes="@integer/key_return"
+                        latin:keyIcon="@drawable/sym_keyboard_search"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_search"
+                        latin:parentStyle="functionalKeyStyle" />
+                </case>
+                <case
+                    latin:colorScheme="black"
+                >
+                    <key-style
+                        latin:styleName="returnKeyStyle"
+                        latin:codes="@integer/key_return"
+                        latin:keyIcon="@drawable/sym_bkeyboard_search"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_search"
+                        latin:parentStyle="functionalKeyStyle" />
+                </case>
+            </switch>
+        </case>
+        <default>
+            <switch>
+                <case
+                    latin:colorScheme="white"
+                >
+                    <key-style
+                        latin:styleName="returnKeyStyle"
+                        latin:codes="@integer/key_return"
+                        latin:keyIcon="@drawable/sym_keyboard_return"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_return"
+                        latin:parentStyle="functionalKeyStyle" />
+                </case>
+                <case
+                    latin:colorScheme="black"
+                >
+                    <key-style
+                        latin:styleName="returnKeyStyle"
+                        latin:codes="@integer/key_return"
+                        latin:keyIcon="@drawable/sym_bkeyboard_return"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_return"
+                        latin:parentStyle="functionalKeyStyle" />
+                </case>
+            </switch>
+        </default>
+    </switch>
     <key-style
         latin:styleName="toAlphaKeyStyle"
         latin:codes="@integer/key_switch_alpha_symbol"