From 194e004e81f74c4124184ad8597d68e3837ea560 Mon Sep 17 00:00:00 2001
From: Satoshi Kataoka <satok@google.com>
Date: Wed, 2 Oct 2013 17:00:23 +0900
Subject: [PATCH] Prepare for changing text color for functional keys

Bug: 10786040

Change-Id: I0de7d4923ea13b44adcf1f4ea456796cd02ef27b
---
 java/res/color/key_text_color_ics.xml         | 48 +++++++++++++++++++
 java/res/values/colors.xml                    |  4 +-
 .../com/android/inputmethod/keyboard/Key.java | 19 +++++++-
 .../keyboard/internal/KeyDrawParams.java      |  9 ++--
 .../internal/KeyVisualAttributes.java         |  5 +-
 5 files changed, 77 insertions(+), 8 deletions(-)
 create mode 100644 java/res/color/key_text_color_ics.xml

diff --git a/java/res/color/key_text_color_ics.xml b/java/res/color/key_text_color_ics.xml
new file mode 100644
index 0000000000..c6f111ad2a
--- /dev/null
+++ b/java/res/color/key_text_color_ics.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- Functional keys. -->
+    <item android:state_single="true" android:state_pressed="true"
+          android:color="@color/key_text_color_functional_ics" />
+    <item android:state_single="true"
+          android:color="@color/key_text_color_functional_ics" />
+
+    <!-- Action keys. -->
+    <item android:state_active="true" android:state_pressed="true"
+          android:color="@color/key_text_color_normal_ics" />
+    <item android:state_active="true"
+          android:color="@color/key_text_color_normal_ics" />
+
+    <!-- Toggle keys. Use checkable/checked state. -->
+    <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+          android:color="@color/key_text_color_normal_ics" />
+    <item android:state_checkable="true" android:state_pressed="true"
+          android:color="@color/key_text_color_normal_ics" />
+    <item android:state_checkable="true" android:state_checked="true"
+          android:color="@color/key_text_color_normal_ics" />
+    <item android:state_checkable="true"
+          android:color="@color/key_text_color_normal_ics" />
+
+    <!-- Empty background keys. -->
+    <item android:state_empty="true"
+          android:color="@color/key_text_color_normal_ics" />
+
+    <!-- Normal keys. -->
+    <item android:state_pressed="true"
+          android:color="@color/key_text_color_normal_ics" />
+    <item android:color="@color/key_text_color_normal_ics" />
+</selector>
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 3803cb7761..94fadb964d 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -39,7 +39,6 @@
     <color name="typed_word_color_ics">#D833B5E5</color>
     <color name="suggested_word_color_ics">#B233B5E5</color>
     <color name="highlight_translucent_color_ics">#9933B5E5</color>
-    <color name="key_text_color_ics">@android:color/white</color>
     <color name="key_text_shadow_color_ics">@android:color/transparent</color>
     <color name="key_text_inactivated_color_ics">#66E0E4E5</color>
     <color name="key_hint_letter_color_ics">#80000000</color>
@@ -66,4 +65,7 @@
     <!-- TODO: Color which should be included in the theme -->
     <color name="emoji_key_background_color">#00000000</color>
     <color name="emoji_key_pressed_background_color">#30FFFFFF</color>
+
+    <color name="key_text_color_normal_ics">@android:color/white</color>
+    <color name="key_text_color_functional_ics">@android:color/white</color>
 </resources>
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 3ea68806b7..f7ec9509d5 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -139,6 +139,8 @@ public class Key implements Comparable<Key> {
 
     private final OptionalAttributes mOptionalAttributes;
 
+    private static final int DEFAULT_TEXT_COLOR = 0xFFFFFFFF;
+
     private static final class OptionalAttributes {
         /** Text to output when pressed. This can be multiple characters, like ".com" */
         public final String mOutputText;
@@ -602,7 +604,22 @@ public class Key implements Comparable<Key> {
     }
 
     public final int selectTextColor(final KeyDrawParams params) {
-        return isShiftedLetterActivated() ? params.mTextInactivatedColor : params.mTextColor;
+        if (isShiftedLetterActivated()) {
+            return params.mTextInactivatedColor;
+        }
+        if (params.mTextColorStateList == null) {
+            return DEFAULT_TEXT_COLOR;
+        }
+        final int[] state;
+        // TODO: Hack!!!!!!!! Consider having a new attribute for the functional text labels.
+        // Currently, we distinguish "input key" from "functional key" by checking the
+        // length of the label( > 1) and "functional" attributes (= true).
+        if (mLabel != null && mLabel.length() > 1) {
+            state = getCurrentDrawableState();
+        } else {
+            state = KEY_STATE_NORMAL;
+        }
+        return params.mTextColorStateList.getColorForState(state, DEFAULT_TEXT_COLOR);
     }
 
     public final int selectHintTextSize(final KeyDrawParams params) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
index 1716fa0495..b528b692e4 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.keyboard.internal;
 
+import android.content.res.ColorStateList;
 import android.graphics.Typeface;
 
 import com.android.inputmethod.latin.utils.ResourceUtils;
@@ -32,7 +33,7 @@ public final class KeyDrawParams {
     public int mHintLabelSize;
     public int mPreviewTextSize;
 
-    public int mTextColor;
+    public ColorStateList mTextColorStateList;
     public int mTextInactivatedColor;
     public int mTextShadowColor;
     public int mHintLetterColor;
@@ -57,7 +58,7 @@ public final class KeyDrawParams {
         mHintLabelSize = copyFrom.mHintLabelSize;
         mPreviewTextSize = copyFrom.mPreviewTextSize;
 
-        mTextColor = copyFrom.mTextColor;
+        mTextColorStateList = copyFrom.mTextColorStateList;
         mTextInactivatedColor = copyFrom.mTextInactivatedColor;
         mTextShadowColor = copyFrom.mTextShadowColor;
         mHintLetterColor = copyFrom.mHintLetterColor;
@@ -89,8 +90,8 @@ public final class KeyDrawParams {
                 attr.mShiftedLetterHintRatio, mShiftedLetterHintSize);
         mHintLabelSize = selectTextSize(keyHeight, attr.mHintLabelRatio, mHintLabelSize);
         mPreviewTextSize = selectTextSize(keyHeight, attr.mPreviewTextRatio, mPreviewTextSize);
-
-        mTextColor = selectColor(attr.mTextColor, mTextColor);
+        mTextColorStateList =
+                attr.mTextColorStateList != null ? attr.mTextColorStateList : mTextColorStateList;
         mTextInactivatedColor = selectColor(attr.mTextInactivatedColor, mTextInactivatedColor);
         mTextShadowColor = selectColor(attr.mTextShadowColor, mTextShadowColor);
         mHintLetterColor = selectColor(attr.mHintLetterColor, mHintLetterColor);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java b/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
index 7a2622cbb2..8bdad364c8 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.keyboard.internal;
 
+import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
 import android.graphics.Typeface;
 import android.util.SparseIntArray;
@@ -37,7 +38,7 @@ public final class KeyVisualAttributes {
     public final float mHintLabelRatio;
     public final float mPreviewTextRatio;
 
-    public final int mTextColor;
+    public final ColorStateList mTextColorStateList;
     public final int mTextInactivatedColor;
     public final int mTextShadowColor;
     public final int mHintLetterColor;
@@ -115,7 +116,7 @@ public final class KeyVisualAttributes {
         mPreviewTextRatio = ResourceUtils.getFraction(keyAttr,
                 R.styleable.Keyboard_Key_keyPreviewTextRatio);
 
-        mTextColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyTextColor, 0);
+        mTextColorStateList = keyAttr.getColorStateList(R.styleable.Keyboard_Key_keyTextColor);
         mTextInactivatedColor = keyAttr.getColor(
                 R.styleable.Keyboard_Key_keyTextInactivatedColor, 0);
         mTextShadowColor = keyAttr.getColor(R.styleable.Keyboard_Key_keyTextShadowColor, 0);
-- 
GitLab