Merge "Fix an occurrence of nested batch edits."
commit
bbd7434229
|
@ -1804,14 +1804,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pickSuggestionManually(final int index, final CharSequence suggestion,
|
public void pickSuggestionManually(final int index, final CharSequence suggestion,
|
||||||
int x, int y) {
|
final int x, final int y) {
|
||||||
mConnection.beginBatchEdit(getCurrentInputConnection());
|
|
||||||
pickSuggestionManuallyWhileInBatchEdit(index, suggestion, x, y);
|
|
||||||
mConnection.endBatchEdit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pickSuggestionManuallyWhileInBatchEdit(final int index,
|
|
||||||
final CharSequence suggestion, final int x, final int y) {
|
|
||||||
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
|
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
|
||||||
// If this is a punctuation picked from the suggestion strip, pass it to onCodeInput
|
// If this is a punctuation picked from the suggestion strip, pass it to onCodeInput
|
||||||
if (suggestion.length() == 1 && isShowingPunctuationList()) {
|
if (suggestion.length() == 1 && isShowingPunctuationList()) {
|
||||||
|
@ -1846,7 +1839,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
mKeyboardSwitcher.updateShiftState();
|
mKeyboardSwitcher.updateShiftState();
|
||||||
resetComposingState(true /* alsoResetLastComposedWord */);
|
resetComposingState(true /* alsoResetLastComposedWord */);
|
||||||
final CompletionInfo completionInfo = mApplicationSpecifiedCompletions[index];
|
final CompletionInfo completionInfo = mApplicationSpecifiedCompletions[index];
|
||||||
|
mConnection.beginBatchEdit(getCurrentInputConnection());
|
||||||
mConnection.commitCompletion(completionInfo);
|
mConnection.commitCompletion(completionInfo);
|
||||||
|
mConnection.endBatchEdit();
|
||||||
if (ProductionFlag.IS_EXPERIMENTAL) {
|
if (ProductionFlag.IS_EXPERIMENTAL) {
|
||||||
ResearchLogger.latinIME_pickApplicationSpecifiedCompletion(index,
|
ResearchLogger.latinIME_pickApplicationSpecifiedCompletion(index,
|
||||||
completionInfo.getText(), x, y);
|
completionInfo.getText(), x, y);
|
||||||
|
|
|
@ -65,66 +65,70 @@ public class RichInputConnection {
|
||||||
if (--mNestLevel == 0 && null != mIC) mIC.endBatchEdit();
|
if (--mNestLevel == 0 && null != mIC) mIC.endBatchEdit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkBatchEdit() {
|
||||||
|
if (mNestLevel != 1) {
|
||||||
|
// TODO: exception instead
|
||||||
|
Log.e(TAG, "Batch edit level incorrect : " + mNestLevel);
|
||||||
|
Log.e(TAG, Utils.getStackTrace(4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void finishComposingText() {
|
public void finishComposingText() {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.finishComposingText();
|
if (null != mIC) mIC.finishComposingText();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commitText(final CharSequence text, final int i) {
|
public void commitText(final CharSequence text, final int i) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.commitText(text, i);
|
if (null != mIC) mIC.commitText(text, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCursorCapsMode(final int inputType) {
|
public int getCursorCapsMode(final int inputType) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
|
||||||
if (null == mIC) return Constants.TextUtils.CAP_MODE_OFF;
|
if (null == mIC) return Constants.TextUtils.CAP_MODE_OFF;
|
||||||
return mIC.getCursorCapsMode(inputType);
|
return mIC.getCursorCapsMode(inputType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharSequence getTextBeforeCursor(final int i, final int j) {
|
public CharSequence getTextBeforeCursor(final int i, final int j) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
|
||||||
if (null != mIC) return mIC.getTextBeforeCursor(i, j);
|
if (null != mIC) return mIC.getTextBeforeCursor(i, j);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharSequence getTextAfterCursor(final int i, final int j) {
|
public CharSequence getTextAfterCursor(final int i, final int j) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
|
||||||
if (null != mIC) return mIC.getTextAfterCursor(i, j);
|
if (null != mIC) return mIC.getTextAfterCursor(i, j);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteSurroundingText(final int i, final int j) {
|
public void deleteSurroundingText(final int i, final int j) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.deleteSurroundingText(i, j);
|
if (null != mIC) mIC.deleteSurroundingText(i, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void performEditorAction(final int actionId) {
|
public void performEditorAction(final int actionId) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
|
||||||
if (null != mIC) mIC.performEditorAction(actionId);
|
if (null != mIC) mIC.performEditorAction(actionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendKeyEvent(final KeyEvent keyEvent) {
|
public void sendKeyEvent(final KeyEvent keyEvent) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.sendKeyEvent(keyEvent);
|
if (null != mIC) mIC.sendKeyEvent(keyEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setComposingText(final CharSequence text, final int i) {
|
public void setComposingText(final CharSequence text, final int i) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.setComposingText(text, i);
|
if (null != mIC) mIC.setComposingText(text, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelection(final int from, final int to) {
|
public void setSelection(final int from, final int to) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.setSelection(from, to);
|
if (null != mIC) mIC.setSelection(from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commitCorrection(final CorrectionInfo correctionInfo) {
|
public void commitCorrection(final CorrectionInfo correctionInfo) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.commitCorrection(correctionInfo);
|
if (null != mIC) mIC.commitCorrection(correctionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commitCompletion(final CompletionInfo completionInfo) {
|
public void commitCompletion(final CompletionInfo completionInfo) {
|
||||||
if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead
|
checkBatchEdit();
|
||||||
if (null != mIC) mIC.commitCompletion(completionInfo);
|
if (null != mIC) mIC.commitCompletion(completionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +320,7 @@ public class RichInputConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeTrailingSpace() {
|
public void removeTrailingSpace() {
|
||||||
|
checkBatchEdit();
|
||||||
final CharSequence lastOne = getTextBeforeCursor(1, 0);
|
final CharSequence lastOne = getTextBeforeCursor(1, 0);
|
||||||
if (lastOne != null && lastOne.length() == 1
|
if (lastOne != null && lastOne.length() == 1
|
||||||
&& lastOne.charAt(0) == Keyboard.CODE_SPACE) {
|
&& lastOne.charAt(0) == Keyboard.CODE_SPACE) {
|
||||||
|
@ -372,6 +377,7 @@ public class RichInputConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean revertDoubleSpace() {
|
public boolean revertDoubleSpace() {
|
||||||
|
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
|
||||||
// be needed, but it's there just in case something went wrong.
|
// be needed, but it's there just in case something went wrong.
|
||||||
final CharSequence textBeforeCursor = getTextBeforeCursor(2, 0);
|
final CharSequence textBeforeCursor = getTextBeforeCursor(2, 0);
|
||||||
|
@ -395,6 +401,7 @@ public class RichInputConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean revertSwapPunctuation() {
|
public boolean revertSwapPunctuation() {
|
||||||
|
checkBatchEdit();
|
||||||
// Here we test whether we indeed have a space and something else before us. This should not
|
// Here we test whether we indeed have a space and something else before us. This should not
|
||||||
// be needed, but it's there just in case something went wrong.
|
// be needed, but it's there just in case something went wrong.
|
||||||
final CharSequence textBeforeCursor = getTextBeforeCursor(2, 0);
|
final CharSequence textBeforeCursor = getTextBeforeCursor(2, 0);
|
||||||
|
|
|
@ -204,18 +204,24 @@ public class Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the current stack trace
|
// Get the current stack trace
|
||||||
public static String getStackTrace() {
|
public static String getStackTrace(final int limit) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
try {
|
try {
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
StackTraceElement[] frames = e.getStackTrace();
|
StackTraceElement[] frames = e.getStackTrace();
|
||||||
// Start at 1 because the first frame is here and we don't care about it
|
// Start at 1 because the first frame is here and we don't care about it
|
||||||
for (int j = 1; j < frames.length; ++j) sb.append(frames[j].toString() + "\n");
|
for (int j = 1; j < frames.length && j < limit + 1; ++j) {
|
||||||
|
sb.append(frames[j].toString() + "\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getStackTrace() {
|
||||||
|
return getStackTrace(Integer.MAX_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
public static class UsabilityStudyLogUtils {
|
public static class UsabilityStudyLogUtils {
|
||||||
// TODO: remove code duplication with ResearchLog class
|
// TODO: remove code duplication with ResearchLog class
|
||||||
private static final String USABILITY_TAG = UsabilityStudyLogUtils.class.getSimpleName();
|
private static final String USABILITY_TAG = UsabilityStudyLogUtils.class.getSimpleName();
|
||||||
|
|
Loading…
Reference in New Issue