am 10585620: Merge "Fix a bug in the cached cursor pos, and simplify selection handling"

* commit '10585620bdfad418f6c093ab4bfd8efaa2d84abf':
  Fix a bug in the cached cursor pos, and simplify selection handling
main
Jean Chalard 2013-06-24 22:01:55 -07:00 committed by Android Git Automerger
commit cdb9fbfef7
2 changed files with 14 additions and 10 deletions

View File

@ -926,19 +926,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} }
} }
// TODO: refactor the following code to be less contrived. final boolean selectionChanged = mLastSelectionStart != newSelStart
// "newSelStart != composingSpanEnd" || "newSelEnd != composingSpanEnd" means || mLastSelectionEnd != newSelEnd;
// that the cursor is not at the end of the composing span, or there is a selection.
// "mLastSelectionStart != newSelStart" means that the cursor is not in the same place
// as last time we were called (if there is a selection, it means the start hasn't
// changed, so it's the end that did).
final boolean selectionChanged = (newSelStart != composingSpanEnd
|| newSelEnd != composingSpanEnd) && mLastSelectionStart != newSelStart;
// if composingSpanStart and composingSpanEnd are -1, it means there is no composing // if composingSpanStart and composingSpanEnd are -1, it means there is no composing
// span in the view - we can use that to narrow down whether the cursor was moved // span in the view - we can use that to narrow down whether the cursor was moved
// by us or not. If we are composing a word but there is no composing span, then // by us or not. If we are composing a word but there is no composing span, then
// we know for sure the cursor moved while we were composing and we should reset // we know for sure the cursor moved while we were composing and we should reset
// the state. // the state. TODO: rescind this policy: the framework never removes the composing
// span on its own accord while editing. This test is useless.
final boolean noComposingSpan = composingSpanStart == -1 && composingSpanEnd == -1; final boolean noComposingSpan = composingSpanStart == -1 && composingSpanEnd == -1;
// If the keyboard is not visible, we don't need to do all the housekeeping work, as it // If the keyboard is not visible, we don't need to do all the housekeeping work, as it
// will be reset when the keyboard shows up anyway. // will be reset when the keyboard shows up anyway.
@ -979,6 +975,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (isSuggestionsStripVisible()) { if (isSuggestionsStripVisible()) {
mHandler.postResumeSuggestions(); mHandler.postResumeSuggestions();
} }
mConnection.userMovedCursor(newSelEnd);
// Reset the last recapitalization. // Reset the last recapitalization.
mRecapitalizeStatus.deactivate(); mRecapitalizeStatus.deactivate();
mKeyboardSwitcher.updateShiftState(); mKeyboardSwitcher.updateShiftState();

View File

@ -340,7 +340,6 @@ public final class RichInputConnection {
public void setComposingRegion(final int start, final int end) { public void setComposingRegion(final int start, final int end) {
if (DEBUG_BATCH_NESTING) checkBatchEdit(); if (DEBUG_BATCH_NESTING) checkBatchEdit();
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
mCurrentCursorPosition = end;
final CharSequence textBeforeCursor = final CharSequence textBeforeCursor =
getTextBeforeCursor(DEFAULT_TEXT_CACHE_SIZE + (end - start), 0); getTextBeforeCursor(DEFAULT_TEXT_CACHE_SIZE + (end - start), 0);
mCommittedTextBeforeComposingText.setLength(0); mCommittedTextBeforeComposingText.setLength(0);
@ -730,6 +729,14 @@ public final class RichInputConnection {
return (newSelStart - oldSelStart) * (mCurrentCursorPosition - newSelStart) >= 0; return (newSelStart - oldSelStart) * (mCurrentCursorPosition - newSelStart) >= 0;
} }
/**
* The user moved the cursor by hand. Take a note of it.
* @param newCursorPosition The new cursor position.
*/
public void userMovedCursor(final int newCursorPosition) {
mCurrentCursorPosition = newCursorPosition;
}
/** /**
* Looks at the text just before the cursor to find out if it looks like a URL. * Looks at the text just before the cursor to find out if it looks like a URL.
* *