diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 5557dde1eb0a17ad1b152f1ae0f44f3be1d0aa4b..b159f08ced1bade301e6f78c48e683f1983c38cb 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -16,6 +16,8 @@ <resources> <declare-styleable name="KeyboardTheme"> + <!-- Keyboard style --> + <attr name="keyboardStyle" format="reference" /> <!-- KeyboardView style --> <attr name="keyboardViewStyle" format="reference" /> <attr name="keyPreviewStyle" format="reference" /> @@ -113,6 +115,8 @@ <attr name="verticalGap" format="dimension|fraction" /> <!-- Popup keyboard layout template --> <attr name="popupKeyboardTemplate" format="reference" /> + <!-- Popup hint icon --> + <attr name="popupHintIcon" format="reference" /> <!-- Locale of the keyboard layout --> <attr name="keyboardLocale" format="string" /> </declare-styleable> @@ -146,10 +150,11 @@ <!-- The key label option --> <attr name="keyLabelOption" format="integer"> <!-- This should be aligned with KeyboardView.KEY_LABEL_OPTION_* --> - <flag name="alignLeft" value="1" /> - <flag name="alignRight" value="2" /> - <flag name="alignBottom" value="8" /> - <flag name="fontNormal" value="16" /> + <flag name="alignLeft" value="0x01" /> + <flag name="alignRight" value="0x02" /> + <flag name="alignBottom" value="0x08" /> + <flag name="fontNormal" value="0x10" /> + <flag name="popupHint" value="0x20" /> </attr> <!-- The unicode that this key generates in manual temporary upper case mode. --> <attr name="manualTemporaryUpperCaseCode" format="integer" /> @@ -200,9 +205,9 @@ </attr> <attr name="webInput" format="boolean" /> <attr name="passwordInput" format="boolean" /> - <attr name="hasSettingsKey" format="string" /> - <attr name="voiceKeyEnabled" format="string" /> - <attr name="hasVoiceKey" format="string" /> + <attr name="hasSettingsKey" format="boolean" /> + <attr name="voiceKeyEnabled" format="boolean" /> + <attr name="hasVoiceKey" format="boolean" /> <attr name="imeAction" format="enum"> <!-- This should be aligned with EditorInfo.IME_ACTION_* --> <enum name="actionUnspecified" value="0" /> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 7cb4593fa0809b8ecfc9287b4ca297545f7267a3..60ed34a0623dd2073234bc1b8bb1453a845050ca 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -16,6 +16,9 @@ <resources> <!-- Theme "Basic" --> + <style name="Keyboard" > + <item name="popupHintIcon">@drawable/hint_popup</item> + </style> <style name="KeyboardView"> <item name="android:background">@drawable/keyboard_background</item> <item name="keyBackground">@drawable/btn_keyboard_key</item> @@ -89,6 +92,9 @@ <item name="android:background">@null</item> </style> <!-- Theme "Honeycomb" --> + <style name="Keyboard.Honeycomb" parent="Keyboard" > + <item name="popupHintIcon">@drawable/hint_popup_holo</item> + </style> <style name="KeyboardView.Honeycomb" parent="KeyboardView"> <item name="android:background">@drawable/keyboard_background_holo</item> <item name="keyBackground">@drawable/btn_keyboard_key_honeycomb</item> @@ -111,13 +117,13 @@ <item name="android:paddingLeft">@dimen/mini_keyboard_horizontal_padding_holo</item> <item name="android:paddingRight">@dimen/mini_keyboard_horizontal_padding_holo</item> </style> - <style name="SuggestionsStripBackgroundStyle.Holo"> + <style name="SuggestionsStripBackgroundStyle.Honeycomb"> <item name="android:background">@drawable/keyboard_suggest_strip_holo</item> </style> - <style name="SuggestionBackgroundStyle.Holo"> + <style name="SuggestionBackgroundStyle.Honeycomb"> <item name="android:background">@drawable/btn_candidate_holo</item> </style> - <style name="SuggestionPreviewBackgroundStyle.Holo"> + <style name="SuggestionPreviewBackgroundStyle.Honeycomb"> <item name="android:background">@drawable/keyboard_popup_panel_background_holo</item> </style> <style name="PopupMiniKeyboardAnimation"> diff --git a/java/res/values/themes.xml b/java/res/values/themes.xml index 5315a9a90607e7eed71d1744b008a521848c37f2..1382dfe653a9fd2228d3973c217e587feb78d51d 100644 --- a/java/res/values/themes.xml +++ b/java/res/values/themes.xml @@ -16,6 +16,7 @@ <resources> <style name="KeyboardTheme" parent="android:Theme"> + <item name="keyboardStyle">@style/Keyboard</item> <item name="keyboardViewStyle">@style/KeyboardView</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView</item> @@ -25,6 +26,7 @@ <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item> </style> <style name="KeyboardTheme.HighContrast" parent="android:Theme"> + <item name="keyboardStyle">@style/Keyboard</item> <item name="keyboardViewStyle">@style/KeyboardView.HighContrast</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView</item> @@ -33,6 +35,7 @@ <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> </style> <style name="KeyboardTheme.Stone" parent="android:Theme.Light"> + <item name="keyboardStyle">@style/Keyboard</item> <item name="keyboardViewStyle">@style/KeyboardView.Stone</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Stone</item> @@ -41,6 +44,7 @@ <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> </style> <style name="KeyboardTheme.Stone.Bold" parent="android:Theme.Light"> + <item name="keyboardStyle">@style/Keyboard</item> <item name="keyboardViewStyle">@style/KeyboardView.Stone.Bold</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Stone</item> @@ -49,6 +53,7 @@ <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> </style> <style name="KeyboardTheme.Gingerbread" parent="android:Theme.Black"> + <item name="keyboardStyle">@style/Keyboard</item> <item name="keyboardViewStyle">@style/KeyboardView.Gingerbread</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Gingerbread</item> @@ -57,11 +62,12 @@ <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> </style> <style name="KeyboardTheme.Honeycomb" parent="android:Theme.Holo"> + <item name="keyboardStyle">@style/Keyboard.Honeycomb</item> <item name="keyboardViewStyle">@style/KeyboardView.Honeycomb</item> <item name="keyPreviewStyle">@style/KeyPreviewStyle.Honeycomb</item> <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Honeycomb</item> <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle.Honeycomb</item> - <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle.Holo</item> - <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.Holo</item> + <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle.Honeycomb</item> + <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.Honeycomb</item> </style> </resources> diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml index a98ffe6792942b7e1c9c6198458b328be2254b71..a3888791045e7dfaed3ff9750c5fab69e9d585b8 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" /> <switch> @@ -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" /> </case> @@ -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" /> <switch> @@ -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" /> </case> @@ -192,9 +192,8 @@ <key-style latin:styleName="comKeyStyle" latin:keyLabel="@string/keylabel_for_popular_domain" - latin:keyLabelOption="fontNormal" + latin:keyLabelOption="fontNormal|popupHint" latin:keyOutputText="@string/keylabel_for_popular_domain" - latin:keyHintIcon="@drawable/hint_popup_holo" latin:popupCharacters="@string/alternates_for_popular_domain" /> <switch> <case diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml index 57eaccbae3cb97a7145bf757d3dbf88639136a1c..4388e89599b48773a71541c0a7b56c77b6e40a8a 100644 --- a/java/res/xml-sw768dp/kbd_key_styles.xml +++ b/java/res/xml-sw768dp/kbd_key_styles.xml @@ -62,7 +62,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" /> <key-style @@ -116,7 +116,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" /> <key-style @@ -161,9 +161,8 @@ <key-style latin:styleName="comKeyStyle" latin:keyLabel="@string/keylabel_for_popular_domain" - latin:keyLabelOption="fontNormal" + latin:keyLabelOption="fontNormal|popupHint" latin:keyOutputText="@string/keylabel_for_popular_domain" - latin:keyHintIcon="@drawable/hint_popup_holo" latin:popupCharacters="@string/alternates_for_popular_domain" /> <switch> <case diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml index f888b231e5ff23552119b680640fc78ea4b90af7..63c019d2cec360a2e1273725cc2cc28ec7b1a1db 100644 --- a/java/res/xml/kbd_key_styles.xml +++ b/java/res/xml/kbd_key_styles.xml @@ -50,7 +50,7 @@ <default> <key-style latin:styleName="settingsPopupStyle" - latin:keyHintIcon="@drawable/hint_popup" + latin:keyLabelOption="popupHint" latin:popupCharacters="\@drawable/sym_keyboard_settings_holo|\@integer/key_settings" latin:parentStyle="functionalKeyStyle" /> </default> @@ -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 21d80eb0b31329e95ec5977480bd2934860ce2ae..dfe5de359ad310a5cc422906cdd240fd1641776d 100644 --- a/java/res/xml/kbd_qwerty_row4.xml +++ b/java/res/xml/kbd_qwerty_row4.xml @@ -59,15 +59,15 @@ latin:webInput="true" > <Key - latin:keyHintIcon="@drawable/hint_popup" + latin:keyStyle="tabKeyStyle" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_web_tab_punctuation" - latin:maxPopupKeyboardColumn="8" - latin:keyStyle="tabKeyStyle" /> + latin:maxPopupKeyboardColumn="8" /> </case> <default> <Key latin:keyLabel="." - latin:keyHintIcon="@drawable/hint_popup" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_punctuation" latin:maxPopupKeyboardColumn="7" latin:keyStyle="functionalKeyStyle" /> diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml index 726f7c37a4c4defffa2717bec7576b615b32e854..704402aaf03eef09349f9bad6dee5f65b18402c3 100644 --- a/java/res/xml/kbd_symbols_row4.xml +++ b/java/res/xml/kbd_symbols_row4.xml @@ -56,7 +56,7 @@ </switch> <Key latin:keyLabel="." - latin:keyHintIcon="@drawable/hint_popup" + latin:keyLabelOption="popupHint" latin:popupCharacters="@string/alternates_for_punctuation" latin:maxPopupKeyboardColumn="7" latin:keyStyle="functionalKeyStyle" /> diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index 267abccb3fa1e6875662d5381a11a28cc40c6f1e..77a4cde55a0a33fe61176fe4852a36bf66b7e062 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 com.android.inputmethod.latin.R; - -import org.xmlpull.v1.XmlPullParserException; - 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 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 c2db62a1c72f2fba49bba1030377c66de1926f45..07166b1dba02e5a2324e63797b42bf595205a0c6 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 8e9c7ef7ea511dc3ae57f85a091631e58190ed51..50c61ffaebaf6a54b470342b45d088131caf8f70 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 f8bce40b1ad60c861161241f83dbdeb7467e4928..fa47bf7c1d4eb6c4c5b2237e5982d3eaabb869d5 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,