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