diff options
author | 2012-12-03 11:46:25 -0800 | |
---|---|---|
committer | 2012-12-03 16:39:58 -0800 | |
commit | b10ec5319b1ce5d0e61af73840aabc00707a5e4c (patch) | |
tree | b1db8e25b0e6e457470f4cb0774cf4d94fb0f86b /java/src/com/android/inputmethod | |
parent | aa5a3e84ad330f55edda3087a9498c5ee16b9cba (diff) | |
download | latinime-b10ec5319b1ce5d0e61af73840aabc00707a5e4c.tar.gz latinime-b10ec5319b1ce5d0e61af73840aabc00707a5e4c.tar.xz latinime-b10ec5319b1ce5d0e61af73840aabc00707a5e4c.zip |
Fix crashes related to setSpan(-1 ... -1) errors
Fixes b/7652661
In some circumstnaces, when hiding the window, the logger tries to capture the TextView contents
and restore the cursor position based on the values stored in LatinIME. However, the IME may not
know the cursor position.
This fix does two things 1) doesn't try to reposition the cursor if the TextView contents are not
to be captured, and 2) if the cursor position is unknown (i.e., == -1), doesn't try to move it back.
Change-Id: I3976aaccf58c18f892c3a8530218ae52bcac9989
Diffstat (limited to 'java/src/com/android/inputmethod')
-rw-r--r-- | java/src/com/android/inputmethod/research/ResearchLogger.java | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java index fe31039e3..3443b7a7a 100644 --- a/java/src/com/android/inputmethod/research/ResearchLogger.java +++ b/java/src/com/android/inputmethod/research/ResearchLogger.java @@ -925,18 +925,20 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang public static void latinIME_onWindowHidden(final int savedSelectionStart, final int savedSelectionEnd, final InputConnection ic) { if (ic != null) { - // Capture the TextView contents. This will trigger onUpdateSelection(), so we - // set sLatinIMEExpectingUpdateSelection so that when onUpdateSelection() is called, - // it can tell that it was generated by the logging code, and not by the user, and - // therefore keep user-visible state as is. - ic.beginBatchEdit(); - ic.performContextMenuAction(android.R.id.selectAll); - CharSequence charSequence = ic.getSelectedText(0); - ic.setSelection(savedSelectionStart, savedSelectionEnd); - ic.endBatchEdit(); - sLatinIMEExpectingUpdateSelection = true; final Object[] values = new Object[2]; if (OUTPUT_ENTIRE_BUFFER) { + // Capture the TextView contents. This will trigger onUpdateSelection(), so we + // set sLatinIMEExpectingUpdateSelection so that when onUpdateSelection() is called, + // it can tell that it was generated by the logging code, and not by the user, and + // therefore keep user-visible state as is. + ic.beginBatchEdit(); + ic.performContextMenuAction(android.R.id.selectAll); + CharSequence charSequence = ic.getSelectedText(0); + if (savedSelectionStart != -1 && savedSelectionEnd != -1) { + ic.setSelection(savedSelectionStart, savedSelectionEnd); + } + ic.endBatchEdit(); + sLatinIMEExpectingUpdateSelection = true; if (TextUtils.isEmpty(charSequence)) { values[0] = false; values[1] = ""; |