From 6e0860d9596314230bb9bcbe2e82467b0251ab9a Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Tue, 15 Mar 2016 15:40:43 +0900 Subject: [PATCH] Add a check for misspelled span change. Previously, misspelled span is directly used in AddToDicitonary's OnClickListener. It can crash because misspelled span can have been updated since SuggestiosPopup is shown. Also, AddToDictionary didn't work correctly in full screen extracted mode. Use findEquivalentSuggestionSpan to resolve it. Bug: 27557526 Change-Id: I51d713dbdd0c44ea2c553164b81b1123a2325aa1 --- core/java/android/widget/Editor.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index c5fb1cee54d65..749d6214a9c63 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -3284,10 +3284,18 @@ public class Editor { com.android.internal.R.id.addToDictionaryButton); mAddToDictionaryButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { + final SuggestionSpan misspelledSpan = + findEquivalentSuggestionSpan(mMisspelledSpanInfo); + if (misspelledSpan == null) { + // Span has been removed. + return; + } final Editable editable = (Editable) mTextView.getText(); - final int spanStart = editable.getSpanStart( - mMisspelledSpanInfo.mSuggestionSpan); - final int spanEnd = editable.getSpanEnd(mMisspelledSpanInfo.mSuggestionSpan); + final int spanStart = editable.getSpanStart(misspelledSpan); + final int spanEnd = editable.getSpanEnd(misspelledSpan); + if (spanStart < 0 || spanEnd <= spanStart) { + return; + } final String originalText = TextUtils.substring(editable, spanStart, spanEnd); final Intent intent = new Intent(Settings.ACTION_USER_DICTIONARY_INSERT);