Make action key background more visually prominent

Bug: 5232726
Change-Id: I76ff2fb431ca295693ceb231a0f13da44f9293e6
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png
new file mode 100644
index 0000000..8bb66b7
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png
new file mode 100644
index 0000000..c8d7ee0
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png
new file mode 100644
index 0000000..eba91db
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_holo.9.png
Binary files differ
diff --git a/java/res/drawable/btn_keyboard_key_ics.xml b/java/res/drawable/btn_keyboard_key_ics.xml
index 7335cc2..e893da1 100644
--- a/java/res/drawable/btn_keyboard_key_ics.xml
+++ b/java/res/drawable/btn_keyboard_key_ics.xml
@@ -23,6 +23,13 @@
     <item android:state_single="true"
           android:drawable="@drawable/btn_keyboard_key_dark_normal_holo" />
 
+    <!-- Action keys. -->
+
+    <item android:state_active="true" android:state_pressed="true"
+          android:drawable="@drawable/btn_keyboard_key_dark_pressed_holo" />
+    <item android:state_active="true"
+          android:drawable="@drawable/btn_keyboard_key_dark_active_holo" />
+
     <!-- Toggle keys. Use checkable/checked state. -->
 
     <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
@@ -34,7 +41,7 @@
     <item android:state_checkable="true"
           android:drawable="@drawable/btn_keyboard_key_dark_normal_off_holo" />
 
-    <!-- Normal keys -->
+    <!-- Normal keys. -->
 
     <item android:state_pressed="true"
           android:drawable="@drawable/btn_keyboard_key_light_pressed_holo" />
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 3275cd0..0451c9f 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -198,6 +198,7 @@
             <!-- This should be aligned with Key.BACKGROUND_TYPE_* -->
             <enum name="normal" value="0" />
             <enum name="functional" value="1" />
+            <enum name="action" value="2" />
         </attr>
         <!-- Whether this is a toggle key. -->
         <attr name="isSticky" format="boolean" />
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index e1f68d4..9df6472 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -102,7 +102,7 @@
                 latin:code="@integer/key_return"
                 latin:keyLabel="@string/label_go_key"
                 latin:keyLabelOption="autoXScale"
-                latin:parentStyle="functionalKeyStyle" />
+                latin:backgroundType="action" />
         </case>
         <case
             latin:imeAction="actionNext"
@@ -112,7 +112,7 @@
                 latin:code="@integer/key_return"
                 latin:keyLabel="@string/label_next_key"
                 latin:keyLabelOption="autoXScale"
-                latin:parentStyle="functionalKeyStyle" />
+                latin:backgroundType="action" />
         </case>
         <case
             latin:imeAction="actionDone"
@@ -122,7 +122,7 @@
                 latin:code="@integer/key_return"
                 latin:keyLabel="@string/label_done_key"
                 latin:keyLabelOption="autoXScale"
-                latin:parentStyle="functionalKeyStyle" />
+                latin:backgroundType="action" />
         </case>
         <case
             latin:imeAction="actionSend"
@@ -132,7 +132,7 @@
                 latin:code="@integer/key_return"
                 latin:keyLabel="@string/label_send_key"
                 latin:keyLabelOption="autoXScale"
-                latin:parentStyle="functionalKeyStyle" />
+                latin:backgroundType="action" />
         </case>
         <case
             latin:imeAction="actionSearch"
@@ -141,7 +141,7 @@
                 latin:styleName="returnKeyStyle"
                 latin:code="@integer/key_return"
                 latin:keyIcon="iconSearchKey"
-                latin:parentStyle="functionalKeyStyle" />
+                latin:backgroundType="action" />
         </case>
         <default>
             <key-style
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index c4d5e85..9959a78 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -107,6 +107,7 @@
     public final int mBackgroundType;
     public static final int BACKGROUND_TYPE_NORMAL = 0;
     public static final int BACKGROUND_TYPE_FUNCTIONAL = 1;
+    public static final int BACKGROUND_TYPE_ACTION = 2;
 
     /** Whether this key repeats itself when held down */
     public final boolean mRepeatable;
@@ -163,6 +164,17 @@
             android.R.attr.state_pressed
     };
 
+    // action normal state (with properties)
+    private static final int[] KEY_STATE_ACTIVE_NORMAL = {
+            android.R.attr.state_active
+    };
+
+    // action pressed state (with properties)
+    private static final int[] KEY_STATE_ACTIVE_PRESSED = {
+            android.R.attr.state_active,
+            android.R.attr.state_pressed
+    };
+
     // RTL parenthesis character swapping map.
     private static final Map<Integer, Integer> sRtlParenthesisMap = new HashMap<Integer, Integer>();
 
@@ -545,36 +557,24 @@
      */
     public int[] getCurrentDrawableState() {
         final boolean pressed = mPressed;
-        if (!mSticky && mBackgroundType == BACKGROUND_TYPE_FUNCTIONAL) {
-            if (pressed) {
-                return KEY_STATE_FUNCTIONAL_PRESSED;
+
+        // TODO: "Sticky" should be one of backgroundType.
+        if (mSticky) {
+            if (mHighlightOn) {
+                return pressed ? KEY_STATE_PRESSED_ON : KEY_STATE_NORMAL_ON;
             } else {
-                return KEY_STATE_FUNCTIONAL_NORMAL;
+                return pressed ? KEY_STATE_PRESSED_OFF : KEY_STATE_NORMAL_OFF;
             }
         }
 
-        int[] states = KEY_STATE_NORMAL;
-
-        if (mHighlightOn) {
-            if (pressed) {
-                states = KEY_STATE_PRESSED_ON;
-            } else {
-                states = KEY_STATE_NORMAL_ON;
-            }
-        } else {
-            if (mSticky) {
-                if (pressed) {
-                    states = KEY_STATE_PRESSED_OFF;
-                } else {
-                    states = KEY_STATE_NORMAL_OFF;
-                }
-            } else {
-                if (pressed) {
-                    states = KEY_STATE_PRESSED;
-                }
-            }
+        switch (mBackgroundType) {
+        case BACKGROUND_TYPE_FUNCTIONAL:
+            return pressed ? KEY_STATE_FUNCTIONAL_PRESSED : KEY_STATE_FUNCTIONAL_NORMAL;
+        case BACKGROUND_TYPE_ACTION:
+            return pressed ? KEY_STATE_ACTIVE_PRESSED : KEY_STATE_ACTIVE_NORMAL;
+        default: /* BACKGROUND_TYPE_NORMAL */
+            return pressed ? KEY_STATE_PRESSED : KEY_STATE_NORMAL;
         }
-        return states;
     }
 
     public static class Spacer extends Key {