am 1e50c681: [IL52] Remove a useless method.

* commit '1e50c681af56dd77d97a1e6d463f1e3023c1a69b':
  [IL52] Remove a useless method.
main
Jean Chalard 2013-12-27 05:54:15 -08:00 committed by Android Git Automerger
commit 97966af6d7
5 changed files with 32 additions and 80 deletions

View File

@ -201,7 +201,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
break; break;
case MSG_RESUME_SUGGESTIONS: case MSG_RESUME_SUGGESTIONS:
latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor( latinIme.mInputLogic.restartSuggestionsOnWordTouchedByCursor(
latinIme.mSettings.getCurrent(), latinIme.mKeyboardSwitcher); latinIme.mSettings.getCurrent(), 0 /* offset */,
false /* includeResumedWordInSuggestions */, latinIme.mKeyboardSwitcher);
break; break;
case MSG_REOPEN_DICTIONARIES: case MSG_REOPEN_DICTIONARIES:
latinIme.initSuggest(); latinIme.initSuggest();

View File

@ -706,45 +706,6 @@ public final class RichInputConnection {
return TextUtils.equals(text, beforeText); return TextUtils.equals(text, beforeText);
} }
/* (non-javadoc)
* Returns the word before the cursor if the cursor is at the end of a word, null otherwise
*/
public CharSequence getWordBeforeCursorIfAtEndOfWord(final SettingsValues settings) {
// Bail out if the cursor is in the middle of a word (cursor must be followed by whitespace,
// separator or end of line/text)
// Example: "test|"<EOL> "te|st" get rejected here
final CharSequence textAfterCursor = getTextAfterCursor(1, 0);
if (!TextUtils.isEmpty(textAfterCursor)
&& !settings.isWordSeparator(textAfterCursor.charAt(0))) return null;
// Bail out if word before cursor is 0-length or a single non letter (like an apostrophe)
// Example: " -|" gets rejected here but "e-|" and "e|" are okay
CharSequence word = getWordAtCursor(settings.mWordSeparators);
// We don't suggest on leading single quotes, so we have to remove them from the word if
// it starts with single quotes.
while (!TextUtils.isEmpty(word) && Constants.CODE_SINGLE_QUOTE == word.charAt(0)) {
word = word.subSequence(1, word.length());
}
if (TextUtils.isEmpty(word)) return null;
// Find the last code point of the string
final int lastCodePoint = Character.codePointBefore(word, word.length());
// If for some reason the text field contains non-unicode binary data, or if the
// charsequence is exactly one char long and the contents is a low surrogate, return null.
if (!Character.isDefined(lastCodePoint)) return null;
// Bail out if the cursor is not at the end of a word (cursor must be preceded by
// non-whitespace, non-separator, non-start-of-text)
// Example ("|" is the cursor here) : <SOL>"|a" " |a" " | " all get rejected here.
if (settings.isWordSeparator(lastCodePoint)) return null;
final char firstChar = word.charAt(0); // we just tested that word is not empty
if (word.length() == 1 && !Character.isLetter(firstChar)) return null;
// We don't restart suggestion if the first character is not a letter, because we don't
// start composing when the first character is not a letter.
if (!Character.isLetter(firstChar)) return null;
return word;
}
public boolean revertDoubleSpacePeriod() { public boolean revertDoubleSpacePeriod() {
if (DEBUG_BATCH_NESTING) checkBatchEdit(); if (DEBUG_BATCH_NESTING) checkBatchEdit();
// Here we test whether we indeed have a period and a space before us. This should not // Here we test whether we indeed have a period and a space before us. This should not

View File

@ -680,6 +680,7 @@ public final class InputLogic {
// TODO: remove these arguments // TODO: remove these arguments
final LatinIME.UIHandler handler, final KeyboardSwitcher keyboardSwitcher) { final LatinIME.UIHandler handler, final KeyboardSwitcher keyboardSwitcher) {
mSpaceState = SpaceState.NONE; mSpaceState = SpaceState.NONE;
final int deleteCountAtStart = mDeleteCount;
mDeleteCount++; mDeleteCount++;
// In many cases, we may have to put the keyboard in auto-shift state again. However // In many cases, we may have to put the keyboard in auto-shift state again. However
@ -811,12 +812,13 @@ public final class InputLogic {
} }
} }
} }
if (settingsValues.isSuggestionsRequested() if (settingsValues.isSuggestionStripVisible()
&& settingsValues.mCurrentLanguageHasSpaces) { && settingsValues.mCurrentLanguageHasSpaces) {
restartSuggestionsOnWordBeforeCursorIfAtEndOfWord(settingsValues, keyboardSwitcher, restartSuggestionsOnWordTouchedByCursor(settingsValues,
handler); deleteCountAtStart - mDeleteCount /* offset */,
true /* includeResumedWordInSuggestions */, keyboardSwitcher);
} }
// We just removed a character. We need to update the auto-caps state. // We just removed at least one character. We need to update the auto-caps state.
keyboardSwitcher.updateShiftState(); keyboardSwitcher.updateShiftState();
} }
} }
@ -1041,44 +1043,18 @@ public final class InputLogic {
} }
} }
/**
* Check if the cursor is actually at the end of a word. If so, restart suggestions on this
* word, otherwise do nothing.
* @param settingsValues the current values of the settings.
*/
private void restartSuggestionsOnWordBeforeCursorIfAtEndOfWord(
final SettingsValues settingsValues,
// TODO: remove these two arguments
final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler) {
final CharSequence word = mConnection.getWordBeforeCursorIfAtEndOfWord(settingsValues);
if (null != word) {
final String wordString = word.toString();
mWordComposer.setComposingWord(word,
// Previous word is the 2nd word before cursor because we are restarting on the
// 1st word before cursor.
getNthPreviousWordForSuggestion(settingsValues, 2 /* nthPreviousWord */),
keyboardSwitcher.getKeyboard());
final int length = word.length();
mConnection.deleteSurroundingText(length, 0);
mConnection.setComposingText(word, 1);
handler.postUpdateSuggestionStrip();
// TODO: Handle the case where the user manually moves the cursor and then backs up over
// a separator. In that case, the current log unit should not be uncommitted.
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
ResearchLogger.getInstance().uncommitCurrentLogUnit(wordString,
true /* dumpCurrentLogUnit */);
}
}
}
/** /**
* Check if the cursor is touching a word. If so, restart suggestions on this word, else * Check if the cursor is touching a word. If so, restart suggestions on this word, else
* do nothing. * do nothing.
* *
* @param settingsValues the current values of the settings. * @param settingsValues the current values of the settings.
* @param offset how much the cursor is expected to have moved since the last updateSelection.
* @param includeResumedWordInSuggestions whether to include the word on which we resume
* suggestions in the suggestion list.
*/ */
// TODO: make this private. // TODO: make this private.
public void restartSuggestionsOnWordTouchedByCursor(final SettingsValues settingsValues, public void restartSuggestionsOnWordTouchedByCursor(final SettingsValues settingsValues,
final int offset, final boolean includeResumedWordInSuggestions,
// TODO: Remove this argument. // TODO: Remove this argument.
final KeyboardSwitcher keyboardSwitcher) { final KeyboardSwitcher keyboardSwitcher) {
// HACK: We may want to special-case some apps that exhibit bad behavior in case of // HACK: We may want to special-case some apps that exhibit bad behavior in case of
@ -1094,6 +1070,7 @@ public final class InputLogic {
if (mLastSelectionStart != mLastSelectionEnd) return; if (mLastSelectionStart != mLastSelectionEnd) return;
// If we don't know the cursor location, return. // If we don't know the cursor location, return.
if (mLastSelectionStart < 0) return; if (mLastSelectionStart < 0) return;
final int expectedCursorPosition = mLastSelectionStart + offset; // We know Start == End
if (!mConnection.isCursorTouchingWord(settingsValues)) return; if (!mConnection.isCursorTouchingWord(settingsValues)) return;
final TextRange range = mConnection.getWordRangeAtCursor( final TextRange range = mConnection.getWordRangeAtCursor(
settingsValues.mWordSeparators, 0 /* additionalPrecedingWordsCount */); settingsValues.mWordSeparators, 0 /* additionalPrecedingWordsCount */);
@ -1102,9 +1079,16 @@ public final class InputLogic {
// If for some strange reason (editor bug or so) we measure the text before the cursor as // If for some strange reason (editor bug or so) we measure the text before the cursor as
// longer than what the entire text is supposed to be, the safe thing to do is bail out. // longer than what the entire text is supposed to be, the safe thing to do is bail out.
final int numberOfCharsInWordBeforeCursor = range.getNumberOfCharsInWordBeforeCursor(); final int numberOfCharsInWordBeforeCursor = range.getNumberOfCharsInWordBeforeCursor();
if (numberOfCharsInWordBeforeCursor > mLastSelectionStart) return; if (numberOfCharsInWordBeforeCursor > expectedCursorPosition) return;
final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList(); final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
final String typedWord = range.mWord.toString(); final String typedWord = range.mWord.toString();
if (includeResumedWordInSuggestions) {
suggestions.add(new SuggestedWordInfo(typedWord,
SuggestionStripView.MAX_SUGGESTIONS + 1,
SuggestedWordInfo.KIND_TYPED, Dictionary.DICTIONARY_USER_TYPED,
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */));
}
if (!isResumableWord(settingsValues, typedWord)) return; if (!isResumableWord(settingsValues, typedWord)) return;
int i = 0; int i = 0;
for (final SuggestionSpan span : range.getSuggestionSpansAtWord()) { for (final SuggestionSpan span : range.getSuggestionSpansAtWord()) {
@ -1129,8 +1113,8 @@ public final class InputLogic {
keyboardSwitcher.getKeyboard()); keyboardSwitcher.getKeyboard());
mWordComposer.setCursorPositionWithinWord( mWordComposer.setCursorPositionWithinWord(
typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor)); typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor));
mConnection.setComposingRegion(mLastSelectionStart - numberOfCharsInWordBeforeCursor, mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor,
mLastSelectionEnd + range.getNumberOfCharsInWordAfterCursor()); expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor());
if (suggestions.isEmpty()) { if (suggestions.isEmpty()) {
// We come here if there weren't any suggestion spans on this word. We will try to // We come here if there weren't any suggestion spans on this word. We will try to
// compute suggestions for it instead. // compute suggestions for it instead.
@ -1140,7 +1124,8 @@ public final class InputLogic {
public void onGetSuggestedWords( public void onGetSuggestedWords(
final SuggestedWords suggestedWordsIncludingTypedWord) { final SuggestedWords suggestedWordsIncludingTypedWord) {
final SuggestedWords suggestedWords; final SuggestedWords suggestedWords;
if (suggestedWordsIncludingTypedWord.size() > 1) { if (suggestedWordsIncludingTypedWord.size() > 1
&& !includeResumedWordInSuggestions) {
// We were able to compute new suggestions for this word. // We were able to compute new suggestions for this word.
// Remove the typed word, since we don't want to display it in this // Remove the typed word, since we don't want to display it in this
// case. The #getSuggestedWordsExcludingTypedWord() method sets // case. The #getSuggestedWordsExcludingTypedWord() method sets

View File

@ -61,6 +61,7 @@ public class BlueUnderlineTests extends InputTestsBase {
public void testBlueUnderlineOnBackspace() { public void testBlueUnderlineOnBackspace() {
final String STRING_TO_TYPE = "tgis"; final String STRING_TO_TYPE = "tgis";
final int typedLength = STRING_TO_TYPE.length();
final int EXPECTED_SUGGESTION_SPAN_START = -1; final int EXPECTED_SUGGESTION_SPAN_START = -1;
final int EXPECTED_UNDERLINE_SPAN_START = 0; final int EXPECTED_UNDERLINE_SPAN_START = 0;
final int EXPECTED_UNDERLINE_SPAN_END = 4; final int EXPECTED_UNDERLINE_SPAN_END = 4;
@ -68,6 +69,8 @@ public class BlueUnderlineTests extends InputTestsBase {
sleep(DELAY_TO_WAIT_FOR_UNDERLINE); sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
runMessages(); runMessages();
type(Constants.CODE_SPACE); type(Constants.CODE_SPACE);
// typedLength + 1 because we also typed a space
mLatinIME.onUpdateSelection(0, 0, typedLength + 1, typedLength + 1, -1, -1);
sleep(DELAY_TO_WAIT_FOR_UNDERLINE); sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
runMessages(); runMessages();
type(Constants.CODE_DELETE); type(Constants.CODE_DELETE);

View File

@ -307,12 +307,14 @@ public class InputLogicTests extends InputTestsBase {
} }
public void testResumeSuggestionOnBackspace() { public void testResumeSuggestionOnBackspace() {
final String WORD_TO_TYPE = "and this "; final String STRING_TO_TYPE = "and this ";
type(WORD_TO_TYPE); final int typedLength = STRING_TO_TYPE.length();
type(STRING_TO_TYPE);
assertEquals("resume suggestion on backspace", -1, assertEquals("resume suggestion on backspace", -1,
BaseInputConnection.getComposingSpanStart(mEditText.getText())); BaseInputConnection.getComposingSpanStart(mEditText.getText()));
assertEquals("resume suggestion on backspace", -1, assertEquals("resume suggestion on backspace", -1,
BaseInputConnection.getComposingSpanEnd(mEditText.getText())); BaseInputConnection.getComposingSpanEnd(mEditText.getText()));
mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1);
type(Constants.CODE_DELETE); type(Constants.CODE_DELETE);
assertEquals("resume suggestion on backspace", 4, assertEquals("resume suggestion on backspace", 4,
BaseInputConnection.getComposingSpanStart(mEditText.getText())); BaseInputConnection.getComposingSpanStart(mEditText.getText()));