diff options
author | Gilles Debunne <debunne@google.com> | 2011-09-08 18:34:22 -0700 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2011-09-08 18:35:54 -0700 |
commit | fa4e2d994bb398b89d08304bb233671ef1a5d5f8 (patch) | |
tree | 4b200f0c60beb65385c5a29af040bbb7e6131217 | |
parent | 11e2e5dece7a92f50b73240dc0300343a7b495bf (diff) | |
download | frameworks_base-fa4e2d994bb398b89d08304bb233671ef1a5d5f8.zip frameworks_base-fa4e2d994bb398b89d08304bb233671ef1a5d5f8.tar.gz frameworks_base-fa4e2d994bb398b89d08304bb233671ef1a5d5f8.tar.bz2 |
Bug 5278456: text highlight color depends on the type of suggestion spans.
Change-Id: I76ac02b7688a297c0e83d593f446a4cf2ee36015
-rw-r--r-- | core/java/android/text/style/SuggestionRangeSpan.java | 21 | ||||
-rw-r--r-- | core/java/android/text/style/SuggestionSpan.java | 10 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 24 |
3 files changed, 41 insertions, 14 deletions
diff --git a/core/java/android/text/style/SuggestionRangeSpan.java b/core/java/android/text/style/SuggestionRangeSpan.java index a637b1c..2dbfc72 100644 --- a/core/java/android/text/style/SuggestionRangeSpan.java +++ b/core/java/android/text/style/SuggestionRangeSpan.java @@ -28,15 +28,11 @@ import android.text.TextUtils; * @hide */ public class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpan { - private final int mBackgroundColor; + private int mBackgroundColor; - @Override - public void updateDrawState(TextPaint tp) { - tp.bgColor = mBackgroundColor; - } - - public SuggestionRangeSpan(int color) { - mBackgroundColor = color; + public SuggestionRangeSpan() { + // 0 is a fully transparent black. Has to be set using #setBackgroundColor + mBackgroundColor = 0; } public SuggestionRangeSpan(Parcel src) { @@ -57,4 +53,13 @@ public class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpa public int getSpanTypeId() { return TextUtils.SUGGESTION_RANGE_SPAN; } + + public void setBackgroundColor(int backgroundColor) { + mBackgroundColor = backgroundColor; + } + + @Override + public void updateDrawState(TextPaint tp) { + tp.bgColor = mBackgroundColor; + } } diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java index 693a7a9..fecf0f7 100644 --- a/core/java/android/text/style/SuggestionSpan.java +++ b/core/java/android/text/style/SuggestionSpan.java @@ -264,4 +264,14 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { tp.setUnderlineText(mEasyCorrectUnderlineColor, mEasyCorrectUnderlineThickness); } } + + /** + * @return The color of the underline for that span, or 0 if there is no underline + */ + public int getUnderlineColor() { + // The order here should match what is used in updateDrawState + if ((mFlags & FLAG_MISSPELLED) != 0) return mMisspelledUnderlineColor; + if ((mFlags & FLAG_EASY_CORRECT) != 0) return mEasyCorrectUnderlineColor; + return 0; + } } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index c61aad1..d81293d 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -9564,8 +9564,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener TextView.this.getPositionListener().removeSubscriber(SuggestionsPopupWindow.this); - if ((mText instanceof Editable) && mSuggestionRangeSpan != null) { - ((Editable) mText).removeSpan(mSuggestionRangeSpan); + if ((mText instanceof Spannable)) { + ((Spannable) mText).removeSpan(mSuggestionRangeSpan); } setCursorVisible(mCursorWasVisibleBeforeSuggestions); @@ -9749,7 +9749,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } private boolean updateSuggestions() { - Spannable spannable = (Spannable)TextView.this.mText; + Spannable spannable = (Spannable) TextView.this.mText; SuggestionSpan[] suggestionSpans = getSuggestionSpans(); final int nbSpans = suggestionSpans.length; @@ -9759,6 +9759,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener int spanUnionEnd = 0; SuggestionSpan misspelledSpan = null; + int underlineColor = 0; for (int spanIndex = 0; spanIndex < nbSpans; spanIndex++) { SuggestionSpan suggestionSpan = suggestionSpans[spanIndex]; @@ -9771,6 +9772,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener misspelledSpan = suggestionSpan; } + // The first span dictates the background color of the highlighted text + if (spanIndex == 0) underlineColor = suggestionSpan.getUnderlineColor(); + String[] suggestions = suggestionSpan.getSuggestions(); int nbSuggestions = suggestions.length; for (int suggestionIndex = 0; suggestionIndex < nbSuggestions; suggestionIndex++) { @@ -9813,9 +9817,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mNumberOfSuggestions == 0) return false; - if (mSuggestionRangeSpan == null) mSuggestionRangeSpan = - new SuggestionRangeSpan(mHighlightColor); - ((Editable) mText).setSpan(mSuggestionRangeSpan, spanUnionStart, spanUnionEnd, + if (mSuggestionRangeSpan == null) mSuggestionRangeSpan = new SuggestionRangeSpan(); + if (underlineColor == 0) { + // Fallback on the default highlight color when the first span does not provide one + mSuggestionRangeSpan.setBackgroundColor(mHighlightColor); + } else { + final float BACKGROUND_TRANSPARENCY = 0.3f; + final int newAlpha = (int) (Color.alpha(underlineColor) * BACKGROUND_TRANSPARENCY); + mSuggestionRangeSpan.setBackgroundColor( + (underlineColor & 0x00FFFFFF) + (newAlpha << 24)); + } + spannable.setSpan(mSuggestionRangeSpan, spanUnionStart, spanUnionEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mSuggestionsAdapter.notifyDataSetChanged(); |