Add keyLetterSize and keyLabelSize as KeyboardView attribute

Bug: 5023981
Change-Id: Iea7f8f340775cbb093c50d6e741b2f1476e9ac39
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 4cabe93..8362226 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -38,11 +38,16 @@
              checkable+checked+pressed. -->
         <attr name="keyBackground" format="reference" />
 
+        <!-- Size of the text for one letter keys. If not defined, keyLetterRatio takes effect. -->
+        <attr name="keyLetterSize" format="float" />
+        <!-- Size of the text for keys with multiple letters. If not defined, keyLabelRatio takes
+             effect. -->
+        <attr name="keyLabelSize" format="float" />
         <!-- Size of the text for one letter keys, in the proportion of key height. -->
         <attr name="keyLetterRatio" format="float" />
         <!-- Large size of the text for one letter keys, in the proportion of key height. -->
         <attr name="keyLargeLetterRatio" format="float" />
-        <!-- Size of the text for keys with some text, in the proportion of key height. -->
+        <!-- Size of the text for keys with multiple letters, in the proportion of key height. -->
         <attr name="keyLabelRatio" format="float" />
         <!-- Size of the text for hint letter (= one character hint label), in the proportion of
              key height. -->
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index bc021a6..3225944 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -211,6 +211,7 @@
         private final float mKeyHintLetterRatio;
         private final float mKeyUppercaseLetterRatio;
         private final float mKeyHintLabelRatio;
+        private static final float UNDEFINED_RATIO = -1.0f;
 
         public final Rect mPadding = new Rect();
         public int mKeyLetterSize;
@@ -222,9 +223,21 @@
 
         public KeyDrawParams(TypedArray a) {
             mKeyBackground = a.getDrawable(R.styleable.KeyboardView_keyBackground);
-            mKeyLetterRatio = getRatio(a, R.styleable.KeyboardView_keyLetterRatio);
+            if (a.hasValue(R.styleable.KeyboardView_keyLabelSize)) {
+                mKeyLetterRatio = UNDEFINED_RATIO;
+                mKeyLetterSize = a.getDimensionPixelSize(
+                        R.styleable.KeyboardView_keyLetterRatio, 0);
+            } else {
+                mKeyLetterRatio = getRatio(a, R.styleable.KeyboardView_keyLetterRatio);
+            }
             mKeyLargeLetterRatio = getRatio(a, R.styleable.KeyboardView_keyLargeLetterRatio);
-            mKeyLabelRatio = getRatio(a, R.styleable.KeyboardView_keyLabelRatio);
+            if (a.hasValue(R.styleable.KeyboardView_keyLabelSize)) {
+                mKeyLabelRatio = UNDEFINED_RATIO;
+                mKeyLabelSize = a.getDimensionPixelSize(
+                        R.styleable.KeyboardView_keyLabelRatio, 0);
+            } else {
+                mKeyLabelRatio = getRatio(a, R.styleable.KeyboardView_keyLabelRatio);
+            }
             mKeyHintLetterRatio = getRatio(a, R.styleable.KeyboardView_keyHintLetterRatio);
             mKeyUppercaseLetterRatio = getRatio(a,
                     R.styleable.KeyboardView_keyUppercaseLetterRatio);
@@ -253,9 +266,11 @@
         }
 
         public void updateKeyHeight(int keyHeight) {
-            mKeyLetterSize = (int)(keyHeight * mKeyLetterRatio);
+            if (mKeyLetterRatio >= 0.0f)
+                mKeyLetterSize = (int)(keyHeight * mKeyLetterRatio);
             mKeyLargeLetterSize = (int)(keyHeight * mKeyLargeLetterRatio);
-            mKeyLabelSize = (int)(keyHeight * mKeyLabelRatio);
+            if (mKeyLabelRatio >= 0.0f)
+                mKeyLabelSize = (int)(keyHeight * mKeyLabelRatio);
             mKeyHintLetterSize = (int)(keyHeight * mKeyHintLetterRatio);
             mKeyUppercaseLetterSize = (int)(keyHeight * mKeyUppercaseLetterRatio);
             mKeyHintLabelSize = (int)(keyHeight * mKeyHintLabelRatio);