diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/candidates_strip.xml index 296ea75854fb11c2d67503a71681f8c9e5c48674..88f4c38301e9e79ca07e08879b8d59503c92de6f 100644 --- a/java/res/layout/candidates_strip.xml +++ b/java/res/layout/candidates_strip.xml @@ -42,20 +42,18 @@ <include android:id="@+id/candidate_right" layout="@layout/candidate" /> - <!-- TODO: These images' drawable must be determined depending on theme. --> + <!-- Image drawables are set in CandidateView constructor --> <ImageButton android:id="@+id/expand_candidates_pane" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/btn_expand_candidates_pane" android:visibility="gone" - style="?attr/suggestionBackgroundStyle" /> + style="?attr/suggestionsStripBackgroundStyle" /> <ImageButton android:id="@+id/close_candidates_pane" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/btn_close_candidates_pane" android:visibility="gone" - style="?attr/suggestionBackgroundStyle" /> + style="?attr/suggestionsStripBackgroundStyle" /> </LinearLayout> </merge> diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml index 52b5eccc6ddea2d60a712db263f87e98b344b2aa..f0a8ef9567f8a43bc73e4532bac7212c48594142 100644 --- a/java/res/layout/input_view.xml +++ b/java/res/layout/input_view.xml @@ -44,8 +44,7 @@ android:layout_weight="1.0" android:layout_width="0dp" android:layout_height="@dimen/candidate_strip_height" - android:gravity="center_vertical" - style="?attr/suggestionsStripBackgroundStyle" /> + android:gravity="center_vertical" /> <View android:layout_width="@dimen/candidate_strip_padding" android:layout_height="@dimen/candidate_strip_height" diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml index c3d34456eb84e441f3252c299278036200a6d3cb..6125270a3e1d48f2ca14fa9148d1e66865910b38 100644 --- a/java/res/values-sw600dp/config.xml +++ b/java/res/values-sw600dp/config.xml @@ -26,7 +26,6 @@ <bool name="config_enable_show_recorrection_option">false</bool> <bool name="config_enable_quick_fixes_option">false</bool> <bool name="config_enable_bigram_suggestions_option">false</bool> - <bool name="config_candidate_highlight_font_color_enabled">false</bool> <bool name="config_swipe_down_dismiss_keyboard_enabled">false</bool> <bool name="config_sliding_key_input_enabled">false</bool> <bool name="config_digit_popup_characters_enabled">false</bool> diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml index 663332fe134391c85958b041365f998dc3eef8e2..95d5e7e63ea493ff1b7e2924fd1f18324cbf34fe 100644 --- a/java/res/values-sw768dp/config.xml +++ b/java/res/values-sw768dp/config.xml @@ -26,7 +26,6 @@ <bool name="config_enable_show_recorrection_option">false</bool> <bool name="config_enable_quick_fixes_option">false</bool> <bool name="config_enable_bigram_suggestions_option">false</bool> - <bool name="config_candidate_highlight_font_color_enabled">false</bool> <bool name="config_swipe_down_dismiss_keyboard_enabled">false</bool> <bool name="config_sliding_key_input_enabled">false</bool> <bool name="config_digit_popup_characters_enabled">false</bool> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index b159f08ced1bade301e6f78c48e683f1983c38cb..2aff88983081cff291542cd97b490fb357243392 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -28,6 +28,7 @@ <attr name="suggestionsStripBackgroundStyle" format="reference" /> <attr name="suggestionBackgroundStyle" format="reference" /> <attr name="suggestionPreviewBackgroundStyle" format="reference" /> + <attr name="candidateViewStyle" format="reference" /> </declare-styleable> <declare-styleable name="KeyboardView"> @@ -88,6 +89,20 @@ </declare-styleable> + <declare-styleable name="CandidateView"> + <attr name="autoCorrectHighlight" format="integer"> + <flag name="autoCorrectBold" value="0x01" /> + <flag name="autoCorrectUnderline" value="0x02" /> + <flag name="autoCorrectInvert" value="0x04" /> + <flag name="autoCorrectSpacebarLed" value="0x08" /> + </attr> + <attr name="colorTypedWord" format="color" /> + <attr name="colorAutoCorrect" format="color" /> + <attr name="colorSuggested" format="color" /> + <attr name="iconExpandPane" format="reference" /> + <attr name="iconClosePane" format="reference" /> + </declare-styleable> + <declare-styleable name="Keyboard"> <!-- Default keyboard height --> <attr name="keyboardHeight" format="dimension" /> diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml index 05d137e4b2cba87ec46558229a55d175f5f966b0..d78691864b0e1c3d9a75a6e937669a770bb4b946 100644 --- a/java/res/values/colors.xml +++ b/java/res/values/colors.xml @@ -18,9 +18,6 @@ */ --> <resources> - <color name="candidate_typed_word">#FFFFFFFF</color> - <color name="candidate_auto_correct">#FFFCAE00</color> - <color name="candidate_suggested">#FFFCAE00</color> <color name="latinkeyboard_bar_language_shadow_white">#80000000</color> <color name="latinkeyboard_bar_language_shadow_black">#80FFFFFF</color> <color name="latinkeyboard_bar_language_text">#FFC0C0C0</color> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index c61a6d52a817fe3a4e61393fc60f9c4d973ccc29..a08e2ae33ca5b1b98bf2716805b8c2dccd7877d7 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -27,7 +27,6 @@ <bool name="config_enable_quick_fixes_option">true</bool> <bool name="config_enable_bigram_suggestions_option">true</bool> <bool name="config_enable_usability_study_mode_option">false</bool> - <bool name="config_candidate_highlight_font_color_enabled">true</bool> <bool name="config_swipe_down_dismiss_keyboard_enabled">true</bool> <bool name="config_sliding_key_input_enabled">true</bool> <bool name="config_digit_popup_characters_enabled">true</bool> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 60ed34a0623dd2073234bc1b8bb1453a845050ca..06e02c7f447519b67f13acc805bafc3a88a21162 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -60,6 +60,15 @@ <style name="SuggestionPreviewBackgroundStyle"> <item name="android:background">@drawable/candidate_feedback_background</item> </style> + <style name="CandidateViewStyle" parent="SuggestionsStripBackgroundStyle"> + <!-- TODO: autoCorrectSpacebarLed should be in style for LatinKeyboard. --> + <item name="autoCorrectHighlight">autoCorrectBold|autoCorrectSpacebarLed</item> + <item name="colorTypedWord">#FFFFFFFF</item> + <item name="colorAutoCorrect">#FFFCAE00</item> + <item name="colorSuggested">#FFFCAE00</item> + <item name="iconExpandPane">@drawable/btn_expand_candidates_pane</item> + <item name="iconClosePane">@drawable/btn_close_candidates_pane</item>" + </style> <!-- Theme "Basic high contrast" --> <style name="KeyboardView.HighContrast" parent="KeyboardView"> <item name="android:background">@android:color/black</item> @@ -126,6 +135,14 @@ <style name="SuggestionPreviewBackgroundStyle.Honeycomb"> <item name="android:background">@drawable/keyboard_popup_panel_background_holo</item> </style> + <style name="CandidateViewStyle.Honeycomb" parent="SuggestionsStripBackgroundStyle.Honeycomb"> + <item name="autoCorrectHighlight">autoCorrectUnderline|autoCorrectInvert</item> + <item name="colorTypedWord">#FFFFFFFF</item> + <item name="colorAutoCorrect">#FFFFFFFF</item> + <item name="colorSuggested">#FFFFFFFF</item> + <item name="iconExpandPane">@drawable/btn_expand_candidates_pane</item> + <item name="iconClosePane">@drawable/btn_close_candidates_pane</item>" + </style> <style name="PopupMiniKeyboardAnimation"> <item name="android:windowEnterAnimation">@anim/mini_keyboard_fadein</item> <item name="android:windowExitAnimation">@anim/mini_keyboard_fadeout</item> diff --git a/java/res/values/themes.xml b/java/res/values/themes.xml index 1382dfe653a9fd2228d3973c217e587feb78d51d..dbea58036774c64c4c152b4ef4eac8390c0e1781 100644 --- a/java/res/values/themes.xml +++ b/java/res/values/themes.xml @@ -24,6 +24,7 @@ <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item> + <item name="candidateViewStyle">@style/CandidateViewStyle</item> </style> <style name="KeyboardTheme.HighContrast" parent="android:Theme"> <item name="keyboardStyle">@style/Keyboard</item> @@ -33,6 +34,7 @@ <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item> <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> + <item name="candidateViewStyle">@style/CandidateViewStyle</item> </style> <style name="KeyboardTheme.Stone" parent="android:Theme.Light"> <item name="keyboardStyle">@style/Keyboard</item> @@ -42,6 +44,7 @@ <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item> <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> + <item name="candidateViewStyle">@style/CandidateViewStyle</item> </style> <style name="KeyboardTheme.Stone.Bold" parent="android:Theme.Light"> <item name="keyboardStyle">@style/Keyboard</item> @@ -51,6 +54,7 @@ <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item> <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> + <item name="candidateViewStyle">@style/CandidateViewStyle</item> </style> <style name="KeyboardTheme.Gingerbread" parent="android:Theme.Black"> <item name="keyboardStyle">@style/Keyboard</item> @@ -60,6 +64,7 @@ <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item> <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item> + <item name="candidateViewStyle">@style/CandidateViewStyle</item> </style> <style name="KeyboardTheme.Honeycomb" parent="android:Theme.Holo"> <item name="keyboardStyle">@style/Keyboard.Honeycomb</item> @@ -69,5 +74,6 @@ <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle.Honeycomb</item> <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle.Honeycomb</item> <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.Honeycomb</item> + <item name="candidateViewStyle">@style/CandidateViewStyle.Honeycomb</item> </style> </resources> diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index fa47bf7c1d4eb6c4c5b2237e5982d3eaabb869d5..71826346b0d8eeb277e4893a2b1e6c043f21a53b 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -334,6 +334,7 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { mKeyLetterStyle = Typeface.defaultFromStyle( a.getInt(R.styleable.KeyboardView_keyLetterStyle, Typeface.NORMAL)); mColorScheme = a.getInt(R.styleable.KeyboardView_colorScheme, COLOR_SCHEME_WHITE); + a.recycle(); final Resources res = getResources(); diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java index 481092c928d720bc32a7b2117250a860c96b7513..e5ac22554724fbe4c67e20fb8ca58c3bbf770aa9 100644 --- a/java/src/com/android/inputmethod/latin/CandidateView.java +++ b/java/src/com/android/inputmethod/latin/CandidateView.java @@ -18,6 +18,7 @@ package com.android.inputmethod.latin; import android.content.Context; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.Typeface; import android.os.Handler; @@ -38,6 +39,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; @@ -64,8 +66,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final boolean DBG = LatinImeLogger.sDBG; private static final int NUM_CANDIDATES_IN_STRIP = 3; - private final View mExpandCandidatesPane; - private final View mCloseCandidatesPane; + private final ImageView mExpandCandidatesPane; + private final ImageView mCloseCandidatesPane; private ViewGroup mCandidatesPane; private ViewGroup mCandidatesPaneContainer; private View mKeyboardView; @@ -73,9 +75,13 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private final ArrayList<View> mDividers = new ArrayList<View>(); private final int mCandidatePadding; private final int mCandidateStripHeight; - private final boolean mConfigCandidateHighlightFontColorEnabled; private final CharacterStyle mInvertedForegroundColorSpan; private final CharacterStyle mInvertedBackgroundColorSpan; + private final int mAutoCorrectHighlight; + private static final int AUTO_CORRECT_BOLD = 0x01; + private static final int AUTO_CORRECT_UNDERLINE = 0x02; + private static final int AUTO_CORRECT_INVERT = 0x04; + private static final int AUTO_CORRECT_SPACEBAR_LED = 0x08; private final int mColorTypedWord; private final int mColorAutoCorrect; private final int mColorSuggestedCandidate; @@ -139,7 +145,11 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo * @param attrs */ public CandidateView(Context context, AttributeSet attrs) { - super(context, attrs); + this(context, attrs, R.attr.candidateViewStyle); + } + + public CandidateView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); Resources res = context.getResources(); LayoutInflater inflater = LayoutInflater.from(context); @@ -151,13 +161,6 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo ViewGroup.LayoutParams.WRAP_CONTENT); mPreviewPopup.setContentView(mPreviewText); mPreviewPopup.setBackgroundDrawable(null); - mConfigCandidateHighlightFontColorEnabled = - res.getBoolean(R.bool.config_candidate_highlight_font_color_enabled); - mColorTypedWord = res.getColor(R.color.candidate_typed_word); - mColorAutoCorrect = res.getColor(R.color.candidate_auto_correct); - mColorSuggestedCandidate = res.getColor(R.color.candidate_suggested); - mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff); - mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord); mCandidatePadding = res.getDimensionPixelOffset(R.dimen.candidate_padding); mCandidateStripHeight = res.getDimensionPixelOffset(R.dimen.candidate_strip_height); @@ -192,20 +195,35 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } } - mExpandCandidatesPane = findViewById(R.id.expand_candidates_pane); + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.CandidateView, defStyle, R.style.CandidateViewStyle); + mAutoCorrectHighlight = a.getInt(R.styleable.CandidateView_autoCorrectHighlight, 0); + mColorTypedWord = a.getColor(R.styleable.CandidateView_colorTypedWord, 0); + mColorAutoCorrect = a.getColor(R.styleable.CandidateView_colorAutoCorrect, 0); + mColorSuggestedCandidate = a.getColor(R.styleable.CandidateView_colorSuggested, 0); + mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff); + mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord); + + mExpandCandidatesPane = (ImageView)findViewById(R.id.expand_candidates_pane); + mExpandCandidatesPane.setImageDrawable( + a.getDrawable(R.styleable.CandidateView_iconExpandPane)); mExpandCandidatesPane.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { expandCandidatesPane(); } }); - mCloseCandidatesPane = findViewById(R.id.close_candidates_pane); + mCloseCandidatesPane = (ImageView)findViewById(R.id.close_candidates_pane); + mCloseCandidatesPane.setImageDrawable( + a.getDrawable(R.styleable.CandidateView_iconClosePane)); mCloseCandidatesPane.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { closeCandidatesPane(); } }); + + a.recycle(); } /** @@ -244,19 +262,20 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private CharSequence getStyledCandidateWord(CharSequence word, boolean isAutoCorrect) { if (!isAutoCorrect) return word; - final CharacterStyle style = mConfigCandidateHighlightFontColorEnabled ? BOLD_SPAN - : UNDERLINE_SPAN; final Spannable spannedWord = new SpannableString(word); - spannedWord.setSpan(style, 0, word.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + if ((mAutoCorrectHighlight & AUTO_CORRECT_BOLD) != 0) + spannedWord.setSpan(BOLD_SPAN, 0, word.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + if ((mAutoCorrectHighlight & AUTO_CORRECT_UNDERLINE) != 0) + spannedWord.setSpan(UNDERLINE_SPAN, 0, word.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); return spannedWord; } private int getCandidateTextColor(boolean isAutoCorrect, boolean isSuggestedCandidate, SuggestedWordInfo info) { final int color; - if (isAutoCorrect && mConfigCandidateHighlightFontColorEnabled) { + if (isAutoCorrect) { color = mColorAutoCorrect; - } else if (isSuggestedCandidate && mConfigCandidateHighlightFontColorEnabled) { + } else if (isSuggestedCandidate) { color = mColorSuggestedCandidate; } else { color = mColorTypedWord; @@ -388,9 +407,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } public void onAutoCorrectionInverted(CharSequence autoCorrectedWord) { - // Displaying auto corrected word as inverted is enabled only when highlighting candidate - // with color is disabled. - if (mConfigCandidateHighlightFontColorEnabled) + if ((mAutoCorrectHighlight & AUTO_CORRECT_INVERT) == 0) return; final TextView tv = mWords.get(1); final Spannable word = new SpannableString(autoCorrectedWord); @@ -403,8 +420,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo mShowingAutoCorrectionInverted = true; } - public boolean isConfigCandidateHighlightFontColorEnabled() { - return mConfigCandidateHighlightFontColorEnabled; + public boolean needsAutoCorrectionSpacebarLed() { + return (mAutoCorrectHighlight & AUTO_CORRECT_SPACEBAR_LED) != 0; } public boolean isShowingAddToDictionaryHint() { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 75bca9937d01c853a0ca3fbd84c2cf04239c74af..db8e52aa149c45d8e1cf75739d2cac41d509ba2a 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1464,7 +1464,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar if (mCandidateView != null) { mCandidateView.setSuggestions(words); - if (mCandidateView.isConfigCandidateHighlightFontColorEnabled()) { + if (mCandidateView.needsAutoCorrectionSpacebarLed()) { mKeyboardSwitcher.onAutoCorrectionStateChanged( words.hasWordAboveAutoCorrectionScoreThreshold()); }