From b7758d6f912093747d4b18fbc8d1dcd77c7d1f9b Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Wed, 15 Jun 2011 13:38:58 +0900 Subject: [PATCH] Make Keyboard aware of theme This change is needed to introduce new theme easily. As a starter this change introduces Keyboard.popupHintIcon attribute and Key.keyLabelOption.popupHint flag to show popup hint icon that is previously specified by Key.keyHintIcon attribute. Bug: 4436327 Change-Id: I6b1c5c1b88eece541141b2d2cedd164ee02e5c2a --- java/res/values/attrs.xml | 19 ++++++++++------- java/res/values/styles.xml | 12 ++++++++--- java/res/values/themes.xml | 10 +++++++-- java/res/xml-sw600dp/kbd_key_styles.xml | 11 +++++----- java/res/xml-sw768dp/kbd_key_styles.xml | 7 +++---- java/res/xml/kbd_key_styles.xml | 4 ++-- java/res/xml/kbd_qwerty_row4.xml | 8 +++---- java/res/xml/kbd_symbols_row4.xml | 2 +- .../inputmethod/keyboard/Keyboard.java | 21 +++++++++++++------ .../inputmethod/keyboard/KeyboardParser.java | 12 +++++------ .../keyboard/KeyboardSwitcher.java | 4 +++- .../inputmethod/keyboard/KeyboardView.java | 20 ++++++++++-------- 12 files changed, 79 insertions(+), 51 deletions(-) diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 5557dde1e..b159f08ce 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -16,6 +16,8 @@ + + @@ -113,6 +115,8 @@ + + @@ -146,10 +150,11 @@ - - - - + + + + + @@ -200,9 +205,9 @@ - - - + + + diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 7cb4593fa..60ed34a06 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -16,6 +16,9 @@ + + - - - diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml index a98ffe679..a38887910 100644 --- a/java/res/xml-sw600dp/kbd_key_styles.xml +++ b/java/res/xml-sw600dp/kbd_key_styles.xml @@ -75,7 +75,7 @@ latin:styleName="smileyKeyStyle" latin:keyLabel=":-)" latin:keyOutputText=":-) " - latin:keyHintIcon="@drawable/hint_popup_holo" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_smiley" latin:maxPopupKeyboardColumn="5" /> @@ -87,7 +87,7 @@ latin:code="@integer/key_shortcut" latin:keyIcon="@drawable/sym_keyboard_voice_holo" latin:iconPreview="@drawable/sym_keyboard_feedback_mic" - latin:keyHintIcon="@drawable/hint_popup_holo" + latin:keyLabelOption="popupHint" latin:popupCharacters="\@drawable/sym_keyboard_settings|\@integer/key_settings" latin:parentStyle="functionalKeyStyle" /> @@ -137,7 +137,7 @@ latin:styleName="smileyKeyStyle" latin:keyLabel=":-)" latin:keyOutputText=":-) " - latin:keyHintIcon="@drawable/hint_popup_holo" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_smiley" latin:maxPopupKeyboardColumn="5" /> @@ -149,7 +149,7 @@ latin:code="@integer/key_shortcut" latin:keyIcon="@drawable/sym_bkeyboard_mic" latin:iconPreview="@drawable/sym_keyboard_feedback_mic" - latin:keyHintIcon="@drawable/hint_popup_holo" + latin:keyLabelOption="popupHint" latin:popupCharacters="\@drawable/sym_keyboard_settings|\@integer/key_settings" latin:parentStyle="functionalKeyStyle" /> @@ -192,9 +192,8 @@ @@ -308,7 +308,7 @@ latin:styleName="smileyKeyStyle" latin:keyLabel=":-)" latin:keyOutputText=":-) " - latin:keyHintIcon="@drawable/hint_popup" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_smiley" latin:maxPopupKeyboardColumn="5" latin:parentStyle="functionalKeyStyle" /> diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml index 21d80eb0b..dfe5de359 100644 --- a/java/res/xml/kbd_qwerty_row4.xml +++ b/java/res/xml/kbd_qwerty_row4.xml @@ -59,15 +59,15 @@ latin:webInput="true" > + latin:maxPopupKeyboardColumn="8" /> diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml index 726f7c37a..704402aaf 100644 --- a/java/res/xml/kbd_symbols_row4.xml +++ b/java/res/xml/kbd_symbols_row4.xml @@ -56,7 +56,7 @@ diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index 267abccb3..77a4cde55 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -16,15 +16,16 @@ package com.android.inputmethod.keyboard; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.Log; + import com.android.inputmethod.latin.R; import org.xmlpull.v1.XmlPullParserException; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.drawable.Drawable; -import android.util.Log; - import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -146,6 +147,8 @@ public class Keyboard { private final ProximityInfo mProximityInfo; + public final Drawable mPopupHintIcon; + /** * Creates a keyboard from the given xml key layout file. * @param context the application or service context @@ -171,8 +174,14 @@ public class Keyboard { mDefaultVerticalGap = 0; mDefaultHeight = mDefaultWidth; mId = id; - loadKeyboard(context, xmlLayoutResId); mProximityInfo = new ProximityInfo(GRID_WIDTH, GRID_HEIGHT); + + final TypedArray attrs = context.obtainStyledAttributes( + null, R.styleable.Keyboard, R.attr.keyboardStyle, R.style.Keyboard); + mPopupHintIcon = attrs.getDrawable(R.styleable.Keyboard_popupHintIcon); + attrs.recycle(); + + loadKeyboard(context, xmlLayoutResId); } public int getProximityInfo() { diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java index c2db62a1c..07166b1db 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java @@ -16,12 +16,6 @@ package com.android.inputmethod.keyboard; -import com.android.inputmethod.compat.EditorInfoCompatUtils; -import com.android.inputmethod.latin.R; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; @@ -31,6 +25,12 @@ import android.util.TypedValue; import android.util.Xml; import android.view.InflateException; +import com.android.inputmethod.compat.EditorInfoCompatUtils; +import com.android.inputmethod.latin.R; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + import java.io.IOException; import java.util.Arrays; import java.util.List; diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index 8e9c7ef7e..50c61ffae 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -202,7 +202,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha final Locale savedLocale = Utils.setSystemLocale(res, mSubtypeSwitcher.getInputLocale()); - keyboard = new LatinKeyboard(mInputMethodService, id, id.mWidth); + final Context themeContext = new ContextThemeWrapper(mInputMethodService, + KEYBOARD_THEMES[mThemeIndex]); + keyboard = new LatinKeyboard(themeContext, id, id.mWidth); if (id.mEnableShiftLock) { keyboard.enableShiftLock(); diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index f8bce40b1..fa47bf7c1 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -16,9 +16,6 @@ package com.android.inputmethod.keyboard; -import com.android.inputmethod.latin.LatinImeLogger; -import com.android.inputmethod.latin.R; - import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -50,6 +47,9 @@ import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; +import com.android.inputmethod.latin.LatinImeLogger; +import com.android.inputmethod.latin.R; + import java.util.ArrayList; import java.util.HashMap; import java.util.WeakHashMap; @@ -176,10 +176,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR_CENTER = 0.45f; private final float KEY_LABEL_VERTICAL_PADDING_FACTOR = 1.60f; private final String KEY_LABEL_REFERENCE_CHAR = "H"; - private final int KEY_LABEL_OPTION_ALIGN_LEFT = 1; - private final int KEY_LABEL_OPTION_ALIGN_RIGHT = 2; - private final int KEY_LABEL_OPTION_ALIGN_BOTTOM = 8; - private final int KEY_LABEL_OPTION_FONT_NORMAL = 16; + private final int KEY_LABEL_OPTION_ALIGN_LEFT = 0x01; + private final int KEY_LABEL_OPTION_ALIGN_RIGHT = 0x02; + private final int KEY_LABEL_OPTION_ALIGN_BOTTOM = 0x08; + private final int KEY_LABEL_OPTION_FONT_NORMAL = 0x10; + private final int KEY_LABEL_OPTION_POPUP_HINT = 0x20; private final int mKeyLabelHorizontalPadding; private final UIHandler mHandler = new UIHandler(); @@ -762,14 +763,15 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { } // Draw hint icon. - if (key.mHintIcon != null) { + if (key.mHintIcon != null || (key.mLabelOption & KEY_LABEL_OPTION_POPUP_HINT) != 0) { final int drawableWidth = keyDrawWidth; final int drawableHeight = key.mHeight; final int drawableX = 0; final int drawableY = HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL; Drawable hintIcon = (isManualTemporaryUpperCase && key.mManualTemporaryUpperCaseHintIcon != null) - ? key.mManualTemporaryUpperCaseHintIcon : key.mHintIcon; + ? key.mManualTemporaryUpperCaseHintIcon + : (key.mHintIcon != null ? key.mHintIcon : mKeyboard.mPopupHintIcon); drawIcon(canvas, hintIcon, drawableX, drawableY, drawableWidth, drawableHeight); if (DEBUG_SHOW_ALIGN) drawRectangle(canvas, drawableX, drawableY, drawableWidth, drawableHeight,