From 5afc3ae2d9df0c2c93f2c66af13b128889ac3b5d Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Sun, 18 Dec 2011 04:55:17 +0900
Subject: [PATCH] Add LatinKeyboardView style

As a result, this change moves shortcut related update code to
LatinKeyboardView from LatinKeyboard.

Change-Id: I1882672577f61e73c90d6c018b7dbb61f3fe21e4
---
 java/res/values/attrs.xml                     | 10 ++++-
 java/res/values/styles.xml                    | 39 ++++++++++++++++++-
 java/res/values/themes-basic-highcontrast.xml |  1 +
 java/res/values/themes-basic.xml              |  1 +
 java/res/values/themes-gingerbread.xml        |  1 +
 java/res/values/themes-ics.xml                |  1 +
 java/res/values/themes-stone-bold.xml         |  1 +
 java/res/values/themes-stone.xml              |  1 +
 .../keyboard/KeyboardSwitcher.java            | 10 ++---
 .../inputmethod/keyboard/LatinKeyboard.java   | 19 +--------
 .../keyboard/LatinKeyboardView.java           | 27 ++++++++++++-
 11 files changed, 82 insertions(+), 29 deletions(-)

diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 2e8a0030e6..62d667878d 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -18,10 +18,13 @@
     <declare-styleable name="KeyboardTheme">
         <!-- Keyboard style -->
         <attr name="keyboardStyle" format="reference" />
+        <!-- TODO: Get rid of latinKeyboardStyle -->
         <!-- LatinKeyboard style -->
         <attr name="latinKeyboardStyle" format="reference" />
         <!-- KeyboardView style -->
         <attr name="keyboardViewStyle" format="reference" />
+        <!-- LatinKeyboardView style -->
+        <attr name="latinKeyboardViewStyle" format="reference" />
         <!-- MiniKeyboard style -->
         <attr name="miniKeyboardStyle" format="reference" />
         <!-- MiniKeyboardView style -->
@@ -120,6 +123,10 @@
         </attr>
     </declare-styleable>
 
+    <declare-styleable name="LatinKeyboardView">
+        <attr name="disabledShortcutIcon" format="reference" />
+    </declare-styleable>
+
     <declare-styleable name="SuggestionsView">
         <attr name="suggestionStripOption" format="integer">
             <!-- This should be aligned with SuggestionsViewParams.AUTO_CORRECT_* and etc. -->
@@ -321,11 +328,10 @@
         <attr name="parentStyle" format="string" />
     </declare-styleable>
 
-    <!-- Move these attributes to LatinKeyboardView -->
+    <!-- TODO: Move these attributes to LatinKeyboardView -->
     <declare-styleable name="LatinKeyboard">
         <attr name="autoCorrectionSpacebarLedEnabled" format="boolean" />
         <attr name="autoCorrectionSpacebarLedIcon" format="reference" />
-        <attr name="disabledShortcutIcon" format="reference" />
         <!-- Size of the text for spacebar language label, in the proportion of key height. -->
         <attr name="spacebarTextRatio" format="fraction" />
         <attr name="spacebarTextColor" format="color" />
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index ed8795ade4..b1b39088f6 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -71,6 +71,12 @@
         <item name="shadowRadius">2.75</item>
         <item name="backgroundDimAmount">0.5</item>
     </style>
+    <style
+        name="LatinKeyboardView"
+        parent="KeyboardView">
+        <!-- TODO: Needs non-holo disabled shortcut icon drawable -->
+        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
+    </style>
     <style
         name="MiniKeyboard"
         parent="Keyboard"
@@ -134,6 +140,13 @@
         <item name="android:background">@android:color/black</item>
         <item name="keyBackground">@drawable/btn_keyboard_key3</item>
     </style>
+    <style
+        name="LatinKeyboardView.HighContrast"
+        parent="KeyboardView.HighContrast"
+    >
+        <!-- TODO: Needs non-holo disabled shortcut icon drawable -->
+        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
+    </style>
     <!-- Theme "Stone" -->
     <style
         name="Keyboard.Stone"
@@ -166,6 +179,12 @@
         <item name="keyUppercaseLetterActivatedColor">#CC000000</item>
         <item name="shadowColor">#FFFFFFFF</item>
     </style>
+    <style
+        name="LatinKeyboardView.Stone"
+        parent="KeyboardView.Stone"
+    >
+        <item name="disabledShortcutIcon">@drawable/sym_bkeyboard_voice_off</item>
+    </style>
     <style
         name="MiniKeyboard.Stone"
         parent="Keyboard.Stone"
@@ -195,6 +214,12 @@
     >
         <item name="keyTextStyle">bold</item>
     </style>
+    <style
+        name="LatinKeyboardView.Stone.Bold"
+        parent="KeyboardView.Stone.Bold"
+    >
+        <item name="disabledShortcutIcon">@drawable/sym_bkeyboard_voice_off</item>
+    </style>
     <!-- Theme "Gingerbread" -->
     <style
         name="Keyboard.Gingerbread"
@@ -213,6 +238,13 @@
         <item name="keyBackground">@drawable/btn_keyboard_key_gingerbread</item>
         <item name="keyTextStyle">bold</item>
     </style>
+    <style
+        name="LatinKeyboardView.Gingerbread"
+        parent="KeyboardView.Gingerbread"
+    >
+        <!-- TODO: Needs non-holo disabled shortcut icon drawable -->
+        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
+    </style>
     <style
         name="MiniKeyboard.Gingerbread"
         parent="Keyboard.Gingerbread"
@@ -244,7 +276,6 @@
         parent="LatinKeyboard"
     >
         <item name="autoCorrectionSpacebarLedEnabled">false</item>
-        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
     </style>
     <style
         name="KeyboardView.IceCreamSandwich"
@@ -269,6 +300,12 @@
         <item name="shadowColor">#00000000</item>
         <item name="shadowRadius">0.0</item>
     </style>
+    <style
+        name="LatinKeyboardView.IceCreamSandwich"
+        parent="KeyboardView.IceCreamSandwich"
+    >
+        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
+        </style>
     <style
         name="MiniKeyboard.IceCreamSandwich"
         parent="Keyboard.IceCreamSandwich"
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index abb7c8057a..a1b917057d 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard.HighContrast</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.HighContrast</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView.HighContrast</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index ff9fed55f2..1c2db16481 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index be853eb0f7..2af3da12e5 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard.Gingerbread</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Gingerbread</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView.Gingerbread</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard.Gingerbread</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Gingerbread</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 618aaed79e..b7898414e8 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard.IceCreamSandwich</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.IceCreamSandwich</item>
         <item name="keyboardViewStyle">@style/KeyboardView.IceCreamSandwich</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView.IceCreamSandwich</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard.IceCreamSandwich</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.IceCreamSandwich</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle.IceCreamSandwich</item>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index 532a2985e1..cf2cb91002 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard.Stone.Bold</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone.Bold</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView.Stone.Bold</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard.Stone</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Stone</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index cb3edc58f4..be0755f9ab 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -19,6 +19,7 @@
         <item name="keyboardStyle">@style/Keyboard.Stone</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone</item>
+        <item name="latinKeyboardViewStyle">@style/LatinKeyboardView.Stone</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard.Stone</item>
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Stone</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 16f27b499a..35734fb875 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -157,6 +157,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
         mKeyboardView.setKeyPreviewPopupEnabled(
                 SettingsValues.isKeyPreviewPopupEnabled(mPrefs, mResources),
                 SettingsValues.getKeyPreviewPopupDismissDelay(mPrefs, mResources));
+        mKeyboardView.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
         final boolean localeChanged = (oldKeyboard == null)
                 || !keyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale);
         if (keyboard instanceof LatinKeyboard) {
@@ -168,7 +169,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
             mKeyboardView.updateSpacebar();
             latinKeyboard.updateSpacebarLanguage(0.0f,
                     mSubtypeSwitcher.needsToDisplayLanguage(latinKeyboard.mId.mLocale));
-            latinKeyboard.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
         }
         updateShiftState();
         mInputMethodService.mHandler.startDisplayLanguageOnSpacebar(localeChanged);
@@ -411,12 +411,8 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
     }
 
     public void onNetworkStateChanged() {
-        final LatinKeyboard keyboard = getLatinKeyboard();
-        if (keyboard == null) return;
-        final Key updatedKey = keyboard.updateShortcutKey(
-                SubtypeSwitcher.getInstance().isShortcutImeReady());
-        if (updatedKey != null && mKeyboardView != null) {
-            mKeyboardView.invalidateKey(updatedKey);
+        if (mKeyboardView != null) {
+            mKeyboardView.updateShortcutKey(SubtypeSwitcher.getInstance().isShortcutImeReady());
         }
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index 29791108da..50a8d64cea 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -60,11 +60,6 @@ public class LatinKeyboard extends Keyboard {
     private boolean mNeedsToDisplayLanguage;
     private float mSpacebarTextFadeFactor = 0.0f;
 
-    /* Shortcut key and its icons if available */
-    private final Key mShortcutKey;
-    private final Drawable mEnabledShortcutIcon;
-    private final Drawable mDisabledShortcutIcon;
-
     // Height in space key the language name will be drawn. (proportional to space key height)
     public static final float SPACEBAR_LANGUAGE_BASELINE = 0.6f;
     // If the full language name needs to be smaller than this value to be drawn on space key,
@@ -79,16 +74,13 @@ public class LatinKeyboard extends Keyboard {
         mSpaceKey = getKey(CODE_SPACE);
         mSpaceIcon = (mSpaceKey != null) ? mSpaceKey.getIcon() : null;
 
-        mShortcutKey = getKey(CODE_SHORTCUT);
-        mEnabledShortcutIcon = (mShortcutKey != null) ? mShortcutKey.getIcon() : null;
-
+        // TODO: Move these to LatinKeyboardView attributes.
         final TypedArray a = context.obtainStyledAttributes(
                 null, R.styleable.LatinKeyboard, R.attr.latinKeyboardStyle, R.style.LatinKeyboard);
         mAutoCorrectionSpacebarLedEnabled = a.getBoolean(
                 R.styleable.LatinKeyboard_autoCorrectionSpacebarLedEnabled, false);
         mAutoCorrectionSpacebarLedIcon = a.getDrawable(
                 R.styleable.LatinKeyboard_autoCorrectionSpacebarLedIcon);
-        mDisabledShortcutIcon = a.getDrawable(R.styleable.LatinKeyboard_disabledShortcutIcon);
         final float spacebarTextRatio = a.getFraction(R.styleable.LatinKeyboard_spacebarTextRatio,
                 1000, 1000, 1) / 1000.0f;
         final int keyHeight = mMostCommonKeyHeight - mVerticalGap;
@@ -131,15 +123,6 @@ public class LatinKeyboard extends Keyboard {
         return newColor;
     }
 
-    // TODO: Move this drawing method to LatinKeyboardView.
-    public Key updateShortcutKey(boolean available) {
-        if (mShortcutKey == null)
-            return null;
-        mShortcutKey.setEnabled(available);
-        mShortcutKey.setIcon(available ? mEnabledShortcutIcon : mDisabledShortcutIcon);
-        return mShortcutKey;
-    }
-
     // TODO: Get rid of this method
     public boolean needsAutoCorrectionSpacebarLed() {
         return mAutoCorrectionSpacebarLedEnabled;
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 55fc5f92a2..81f8640e98 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -19,8 +19,10 @@ package com.android.inputmethod.keyboard;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Paint;
+import android.graphics.drawable.Drawable;
 import android.os.Message;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -65,6 +67,14 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
     private final boolean mIsSpacebarTriggeringPopupByLongPress;
     private boolean mMultipleEnabledIMEsOrSubtypes;
 
+    /* Shortcut key and its icons if available */
+    private Key mShortcutKey;
+    // TODO: Remove this variable, use KeyboardIconsSet instead.
+    private Drawable mEnabledShortcutIcon;
+    // TODO: Remove this variable and LatinKeyboardView.disabledShortcutIcon attribute.
+    // This should be moved to KeyboardIconsSet.
+    private final Drawable mDisabledShortcutIcon;
+
     private final SuddenJumpingTouchEventHandler mTouchScreenRegulator;
 
     // Timing constants
@@ -228,7 +238,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
     }
 
     public LatinKeyboardView(Context context, AttributeSet attrs) {
-        this(context, attrs, R.attr.keyboardViewStyle);
+        this(context, attrs, R.attr.latinKeyboardViewStyle);
     }
 
     public LatinKeyboardView(Context context, AttributeSet attrs, int defStyle) {
@@ -256,6 +266,11 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         final int longPressSpaceKeyTimeout =
                 res.getInteger(R.integer.config_long_press_space_key_timeout);
         mIsSpacebarTriggeringPopupByLongPress = (longPressSpaceKeyTimeout > 0);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.LatinKeyboardView, defStyle, R.style.LatinKeyboardView);
+        mDisabledShortcutIcon = a.getDrawable(R.styleable.LatinKeyboardView_disabledShortcutIcon);
+        a.recycle();
     }
 
     public void startIgnoringDoubleTap() {
@@ -310,6 +325,9 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         PointerTracker.setKeyDetector(mKeyDetector);
         mTouchScreenRegulator.setKeyboard(keyboard);
         mMoreKeysPanelCache.clear();
+
+        mShortcutKey = keyboard.getKey(Keyboard.CODE_SHORTCUT);
+        mEnabledShortcutIcon = (mShortcutKey != null) ? mShortcutKey.getIcon() : null;
     }
 
     /**
@@ -695,6 +713,13 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
         return false;
     }
 
+    public void updateShortcutKey(boolean available) {
+        if (mShortcutKey == null) return;
+        mShortcutKey.setEnabled(available);
+        mShortcutKey.setIcon(available ? mEnabledShortcutIcon : mDisabledShortcutIcon);
+        invalidateKey(mShortcutKey);
+    }
+
     public void updateSpacebar() {
         mMultipleEnabledIMEsOrSubtypes = Utils.hasMultipleEnabledIMEsOrSubtypes(
                 true /* include aux subtypes */);
-- 
GitLab