Loading core/java/android/view/inputmethod/InputConnection.java +1 −1 Original line number Diff line number Diff line Loading @@ -858,7 +858,7 @@ public interface InputConnection { boolean reportFullscreenMode(boolean enabled); /** * Have the editor perform spell checking around the current selection. * Have the editor perform spell checking for the full content. * * <p>The editor can ignore this method call if it does not support spell checking. * Loading core/java/android/widget/SpellChecker.java +35 −23 Original line number Diff line number Diff line Loading @@ -220,29 +220,26 @@ public class SpellChecker implements SpellCheckerSessionListener { } void onPerformSpellCheck() { final int selectionStart = mTextView.getSelectionStart(); final int selectionEnd = mTextView.getSelectionEnd(); final int selectionRangeStart; final int selectionRangeEnd; if (selectionStart < selectionEnd) { selectionRangeStart = selectionStart; selectionRangeEnd = selectionEnd; } else { selectionRangeStart = selectionEnd; selectionRangeEnd = selectionStart; } // Expand the range so that it (hopefully) includes the current sentence. final int start = Math.max(0, selectionRangeStart - MIN_SENTENCE_LENGTH); final int end = Math.min(mTextView.length(), selectionRangeEnd + MIN_SENTENCE_LENGTH); // Triggers full content spell check. final int start = 0; final int end = mTextView.length(); if (DBG) { Log.d(TAG, "performSpellCheckAroundSelection: " + start + ", " + end); } spellCheck(start, end); spellCheck(start, end, /* forceCheckWhenEditingWord= */ true); } public void spellCheck(int start, int end) { spellCheck(start, end, /* forceCheckWhenEditingWord= */ false); } /** * Requests to do spell check for text in the range (start, end). */ public void spellCheck(int start, int end, boolean forceCheckWhenEditingWord) { if (DBG) { Log.d(TAG, "Start spell-checking: " + start + ", " + end); Log.d(TAG, "Start spell-checking: " + start + ", " + end + ", " + forceCheckWhenEditingWord); } final Locale locale = mTextView.getSpellCheckerLocale(); final boolean isSessionActive = isSessionActive(); Loading @@ -267,7 +264,7 @@ public class SpellChecker implements SpellCheckerSessionListener { for (int i = 0; i < length; i++) { final SpellParser spellParser = mSpellParsers[i]; if (spellParser.isFinished()) { spellParser.parse(start, end); spellParser.parse(start, end, forceCheckWhenEditingWord); return; } } Loading @@ -282,10 +279,14 @@ public class SpellChecker implements SpellCheckerSessionListener { SpellParser spellParser = new SpellParser(); mSpellParsers[length] = spellParser; spellParser.parse(start, end); spellParser.parse(start, end, forceCheckWhenEditingWord); } private void spellCheck() { spellCheck(/* forceCheckWhenEditingWord= */ false); } private void spellCheck(boolean forceCheckWhenEditingWord) { if (mSpellCheckerSession == null) return; Editable editable = (Editable) mTextView.getText(); Loading @@ -295,6 +296,12 @@ public class SpellChecker implements SpellCheckerSessionListener { TextInfo[] textInfos = new TextInfo[mLength]; int textInfosCount = 0; if (DBG) { Log.d(TAG, "forceCheckWhenEditingWord=" + forceCheckWhenEditingWord + ", mLength=" + mLength + ", cookie = " + mCookie + ", sel start = " + selectionStart + ", sel end = " + selectionEnd); } for (int i = 0; i < mLength; i++) { final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i]; if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) continue; Loading @@ -319,7 +326,7 @@ public class SpellChecker implements SpellCheckerSessionListener { } else { isEditing = selectionEnd < start || selectionStart > end; } if (start >= 0 && end > start && isEditing) { if (start >= 0 && end > start && (forceCheckWhenEditingWord || isEditing)) { spellCheckSpan.setSpellCheckInProgress(true); final TextInfo textInfo = new TextInfo(editable, start, end, mCookie, mIds[i]); textInfos[textInfosCount++] = textInfo; Loading Loading @@ -546,7 +553,11 @@ public class SpellChecker implements SpellCheckerSessionListener { private class SpellParser { private Object mRange = new Object(); public void parse(int start, int end) { // Forces to do spell checker even user is editing the word. private boolean mForceCheckWhenEditingWord; public void parse(int start, int end, boolean forceCheckWhenEditingWord) { mForceCheckWhenEditingWord = forceCheckWhenEditingWord; final int max = mTextView.length(); final int parseEnd; if (end > max) { Loading @@ -567,6 +578,7 @@ public class SpellChecker implements SpellCheckerSessionListener { public void stop() { removeRangeSpan((Editable) mTextView.getText()); mForceCheckWhenEditingWord = false; } private void setRangeSpan(Editable editable, int start, int end) { Loading Loading @@ -617,7 +629,7 @@ public class SpellChecker implements SpellCheckerSessionListener { if (DBG) { Log.i(TAG, "No more spell check."); } removeRangeSpan(editable); stop(); return; } Loading Loading @@ -649,7 +661,7 @@ public class SpellChecker implements SpellCheckerSessionListener { if (DBG) { Log.i(TAG, "Incorrect range span."); } removeRangeSpan(editable); stop(); return; } do { Loading Loading @@ -778,7 +790,7 @@ public class SpellChecker implements SpellCheckerSessionListener { removeRangeSpan(editable); } spellCheck(); spellCheck(mForceCheckWhenEditingWord); } private <T> void removeSpansAt(Editable editable, int offset, T[] spans) { Loading Loading
core/java/android/view/inputmethod/InputConnection.java +1 −1 Original line number Diff line number Diff line Loading @@ -858,7 +858,7 @@ public interface InputConnection { boolean reportFullscreenMode(boolean enabled); /** * Have the editor perform spell checking around the current selection. * Have the editor perform spell checking for the full content. * * <p>The editor can ignore this method call if it does not support spell checking. * Loading
core/java/android/widget/SpellChecker.java +35 −23 Original line number Diff line number Diff line Loading @@ -220,29 +220,26 @@ public class SpellChecker implements SpellCheckerSessionListener { } void onPerformSpellCheck() { final int selectionStart = mTextView.getSelectionStart(); final int selectionEnd = mTextView.getSelectionEnd(); final int selectionRangeStart; final int selectionRangeEnd; if (selectionStart < selectionEnd) { selectionRangeStart = selectionStart; selectionRangeEnd = selectionEnd; } else { selectionRangeStart = selectionEnd; selectionRangeEnd = selectionStart; } // Expand the range so that it (hopefully) includes the current sentence. final int start = Math.max(0, selectionRangeStart - MIN_SENTENCE_LENGTH); final int end = Math.min(mTextView.length(), selectionRangeEnd + MIN_SENTENCE_LENGTH); // Triggers full content spell check. final int start = 0; final int end = mTextView.length(); if (DBG) { Log.d(TAG, "performSpellCheckAroundSelection: " + start + ", " + end); } spellCheck(start, end); spellCheck(start, end, /* forceCheckWhenEditingWord= */ true); } public void spellCheck(int start, int end) { spellCheck(start, end, /* forceCheckWhenEditingWord= */ false); } /** * Requests to do spell check for text in the range (start, end). */ public void spellCheck(int start, int end, boolean forceCheckWhenEditingWord) { if (DBG) { Log.d(TAG, "Start spell-checking: " + start + ", " + end); Log.d(TAG, "Start spell-checking: " + start + ", " + end + ", " + forceCheckWhenEditingWord); } final Locale locale = mTextView.getSpellCheckerLocale(); final boolean isSessionActive = isSessionActive(); Loading @@ -267,7 +264,7 @@ public class SpellChecker implements SpellCheckerSessionListener { for (int i = 0; i < length; i++) { final SpellParser spellParser = mSpellParsers[i]; if (spellParser.isFinished()) { spellParser.parse(start, end); spellParser.parse(start, end, forceCheckWhenEditingWord); return; } } Loading @@ -282,10 +279,14 @@ public class SpellChecker implements SpellCheckerSessionListener { SpellParser spellParser = new SpellParser(); mSpellParsers[length] = spellParser; spellParser.parse(start, end); spellParser.parse(start, end, forceCheckWhenEditingWord); } private void spellCheck() { spellCheck(/* forceCheckWhenEditingWord= */ false); } private void spellCheck(boolean forceCheckWhenEditingWord) { if (mSpellCheckerSession == null) return; Editable editable = (Editable) mTextView.getText(); Loading @@ -295,6 +296,12 @@ public class SpellChecker implements SpellCheckerSessionListener { TextInfo[] textInfos = new TextInfo[mLength]; int textInfosCount = 0; if (DBG) { Log.d(TAG, "forceCheckWhenEditingWord=" + forceCheckWhenEditingWord + ", mLength=" + mLength + ", cookie = " + mCookie + ", sel start = " + selectionStart + ", sel end = " + selectionEnd); } for (int i = 0; i < mLength; i++) { final SpellCheckSpan spellCheckSpan = mSpellCheckSpans[i]; if (mIds[i] < 0 || spellCheckSpan.isSpellCheckInProgress()) continue; Loading @@ -319,7 +326,7 @@ public class SpellChecker implements SpellCheckerSessionListener { } else { isEditing = selectionEnd < start || selectionStart > end; } if (start >= 0 && end > start && isEditing) { if (start >= 0 && end > start && (forceCheckWhenEditingWord || isEditing)) { spellCheckSpan.setSpellCheckInProgress(true); final TextInfo textInfo = new TextInfo(editable, start, end, mCookie, mIds[i]); textInfos[textInfosCount++] = textInfo; Loading Loading @@ -546,7 +553,11 @@ public class SpellChecker implements SpellCheckerSessionListener { private class SpellParser { private Object mRange = new Object(); public void parse(int start, int end) { // Forces to do spell checker even user is editing the word. private boolean mForceCheckWhenEditingWord; public void parse(int start, int end, boolean forceCheckWhenEditingWord) { mForceCheckWhenEditingWord = forceCheckWhenEditingWord; final int max = mTextView.length(); final int parseEnd; if (end > max) { Loading @@ -567,6 +578,7 @@ public class SpellChecker implements SpellCheckerSessionListener { public void stop() { removeRangeSpan((Editable) mTextView.getText()); mForceCheckWhenEditingWord = false; } private void setRangeSpan(Editable editable, int start, int end) { Loading Loading @@ -617,7 +629,7 @@ public class SpellChecker implements SpellCheckerSessionListener { if (DBG) { Log.i(TAG, "No more spell check."); } removeRangeSpan(editable); stop(); return; } Loading Loading @@ -649,7 +661,7 @@ public class SpellChecker implements SpellCheckerSessionListener { if (DBG) { Log.i(TAG, "Incorrect range span."); } removeRangeSpan(editable); stop(); return; } do { Loading Loading @@ -778,7 +790,7 @@ public class SpellChecker implements SpellCheckerSessionListener { removeRangeSpan(editable); } spellCheck(); spellCheck(mForceCheckWhenEditingWord); } private <T> void removeSpansAt(Editable editable, int offset, T[] spans) { Loading