OSDN Git Service

If suggestion span is not enable, removes the suggestion span (so no underline is...
authorLuca Zanolin <zano@google.com>
Thu, 8 Sep 2011 11:03:37 +0000 (12:03 +0100)
committerLuca Zanolin <zano@google.com>
Mon, 12 Sep 2011 17:07:31 +0000 (18:07 +0100)
and do not try to display the suggestion pop-up.

Bug: 5267093

Change-Id: Ia6f2596d0c62885ef9affeb478e00d3b92d76aac

core/java/android/widget/TextView.java

index b948114..40d85d8 100644 (file)
@@ -3102,6 +3102,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
             text = "";
         }
 
+        // If suggestions are not enabled, remove the suggestion spans from the text
+        if (!isSuggestionsEnabled()) {
+            text = removeSuggestionSpans(text);
+        }
+
         if (!mUserSetTextScaleX) mTextPaint.setTextScaleX(1.0f);
 
         if (text instanceof Spanned &&
@@ -3503,6 +3508,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
             applySingleLine(singleLine, !isPassword, true);
         }
         
+        if (!isSuggestionsEnabled()) {
+            mText = removeSuggestionSpans(mText);
+        }
+
         InputMethodManager imm = InputMethodManager.peekInstance();
         if (imm != null) imm.restartInput(this);
     }
@@ -9923,9 +9932,28 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         }
     }
 
-    void showSuggestions() {
-        if (!isSuggestionsEnabled() || !isTextEditable()) return;
+    /**
+     * Removes the suggestion spans.
+     */
+    CharSequence removeSuggestionSpans(CharSequence text) {
+       if (text instanceof Spanned) {
+           Spannable spannable;
+           if (text instanceof Spannable) {
+               spannable = (Spannable) text;
+           } else {
+               spannable = new SpannableString(text);
+               text = spannable;
+           }
 
+           SuggestionSpan[] spans = spannable.getSpans(0, text.length(), SuggestionSpan.class);
+           for (int i = 0; i < spans.length; i++) {
+               spannable.removeSpan(spans[i]);
+           }
+       }
+       return text;
+    }
+
+    void showSuggestions() {
         if (mSuggestionsPopupWindow == null) {
             mSuggestionsPopupWindow = new SuggestionsPopupWindow();
         }