Extract method to reloadTextCache()
Change-Id: Ibdaa9553cafeded15f800077606378b06af755cbmain
parent
463674f950
commit
4e1f8be3e5
|
@ -160,21 +160,12 @@ public final class RichInputConnection {
|
||||||
final boolean shouldFinishComposition) {
|
final boolean shouldFinishComposition) {
|
||||||
mExpectedCursorPosition = newCursorPosition;
|
mExpectedCursorPosition = newCursorPosition;
|
||||||
mComposingText.setLength(0);
|
mComposingText.setLength(0);
|
||||||
mCommittedTextBeforeComposingText.setLength(0);
|
final boolean didReloadTextSuccessfully = reloadTextCache();
|
||||||
mIC = mParent.getCurrentInputConnection();
|
if (!didReloadTextSuccessfully) {
|
||||||
// Call upon the inputconnection directly since our own method is using the cache, and
|
Log.d(TAG, "Will try to retrieve text later.");
|
||||||
// we want to refresh it.
|
|
||||||
final CharSequence textBeforeCursor = null == mIC ? null :
|
|
||||||
mIC.getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, 0);
|
|
||||||
if (null == textBeforeCursor) {
|
|
||||||
// For some reason the app thinks we are not connected to it. This looks like a
|
|
||||||
// framework bug... Fall back to ground state and return false.
|
|
||||||
mExpectedCursorPosition = INVALID_CURSOR_POSITION;
|
|
||||||
Log.e(TAG, "Unable to connect to the editor to retrieve text... will retry later");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mCommittedTextBeforeComposingText.append(textBeforeCursor);
|
final int lengthOfTextBeforeCursor = mCommittedTextBeforeComposingText.length();
|
||||||
final int lengthOfTextBeforeCursor = textBeforeCursor.length();
|
|
||||||
if (lengthOfTextBeforeCursor > newCursorPosition
|
if (lengthOfTextBeforeCursor > newCursorPosition
|
||||||
|| (lengthOfTextBeforeCursor < Constants.EDITOR_CONTENTS_CACHE_SIZE
|
|| (lengthOfTextBeforeCursor < Constants.EDITOR_CONTENTS_CACHE_SIZE
|
||||||
&& newCursorPosition < Constants.EDITOR_CONTENTS_CACHE_SIZE)) {
|
&& newCursorPosition < Constants.EDITOR_CONTENTS_CACHE_SIZE)) {
|
||||||
|
@ -193,6 +184,29 @@ public final class RichInputConnection {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reload the cached text from the InputConnection.
|
||||||
|
*
|
||||||
|
* @return true if successful
|
||||||
|
*/
|
||||||
|
private boolean reloadTextCache() {
|
||||||
|
mCommittedTextBeforeComposingText.setLength(0);
|
||||||
|
mIC = mParent.getCurrentInputConnection();
|
||||||
|
// Call upon the inputconnection directly since our own method is using the cache, and
|
||||||
|
// we want to refresh it.
|
||||||
|
final CharSequence textBeforeCursor = null == mIC ? null :
|
||||||
|
mIC.getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, 0);
|
||||||
|
if (null == textBeforeCursor) {
|
||||||
|
// For some reason the app thinks we are not connected to it. This looks like a
|
||||||
|
// framework bug... Fall back to ground state and return false.
|
||||||
|
mExpectedCursorPosition = INVALID_CURSOR_POSITION;
|
||||||
|
Log.e(TAG, "Unable to connect to the editor to retrieve text.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
mCommittedTextBeforeComposingText.append(textBeforeCursor);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void checkBatchEdit() {
|
private void checkBatchEdit() {
|
||||||
if (mNestLevel != 1) {
|
if (mNestLevel != 1) {
|
||||||
// TODO: exception instead
|
// TODO: exception instead
|
||||||
|
@ -269,10 +283,9 @@ public final class RichInputConnection {
|
||||||
// getCapsMode should be updated to be able to return a "not enough info" result so that
|
// getCapsMode should be updated to be able to return a "not enough info" result so that
|
||||||
// we can get more context only when needed.
|
// we can get more context only when needed.
|
||||||
if (TextUtils.isEmpty(mCommittedTextBeforeComposingText) && 0 != mExpectedCursorPosition) {
|
if (TextUtils.isEmpty(mCommittedTextBeforeComposingText) && 0 != mExpectedCursorPosition) {
|
||||||
final CharSequence textBeforeCursor = getTextBeforeCursor(
|
if (!reloadTextCache()) {
|
||||||
Constants.EDITOR_CONTENTS_CACHE_SIZE, 0);
|
Log.w(TAG, "Unable to connect to the editor. "
|
||||||
if (!TextUtils.isEmpty(textBeforeCursor)) {
|
+ "Setting caps mode without knowing text.");
|
||||||
mCommittedTextBeforeComposingText.append(textBeforeCursor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// This never calls InputConnection#getCapsMode - in fact, it's a static method that
|
// This never calls InputConnection#getCapsMode - in fact, it's a static method that
|
||||||
|
@ -439,19 +452,30 @@ public final class RichInputConnection {
|
||||||
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
|
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelection(final int start, final int end) {
|
/**
|
||||||
|
* Set the selection of the text editor.
|
||||||
|
*
|
||||||
|
* Calls through to {@link InputConnection#setSelection(int, int)}.
|
||||||
|
*
|
||||||
|
* @param start the character index where the selection should start.
|
||||||
|
* @param end the character index where the selection should end.
|
||||||
|
* @return Returns true on success, false if the input connection is no longer valid either when
|
||||||
|
* setting the selection or when retrieving the text cache at that point.
|
||||||
|
*/
|
||||||
|
public boolean setSelection(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();
|
||||||
|
mExpectedCursorPosition = start;
|
||||||
if (null != mIC) {
|
if (null != mIC) {
|
||||||
mIC.setSelection(start, end);
|
final boolean isIcValid = mIC.setSelection(start, end);
|
||||||
|
if (!isIcValid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||||
ResearchLogger.richInputConnection_setSelection(start, end);
|
ResearchLogger.richInputConnection_setSelection(start, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mExpectedCursorPosition = start;
|
return reloadTextCache();
|
||||||
mCommittedTextBeforeComposingText.setLength(0);
|
|
||||||
mCommittedTextBeforeComposingText.append(
|
|
||||||
getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commitCorrection(final CorrectionInfo correctionInfo) {
|
public void commitCorrection(final CorrectionInfo correctionInfo) {
|
||||||
|
|
Loading…
Reference in New Issue