Bug 1438682 - 1. Cache initial selection offsets; r=esawin

Getting the selection offsets in onCreateInputConnection can fail
because of us being on a wrong thread. The solution is to cache the last
selection offsets and use those in onCreateInputConnection.

MozReview-Commit-ID: AOlZsuOvzHm

--HG--
extra : rebase_source : 42f35bc60219707fc29db7cc2803f64313806244
This commit is contained in:
Jim Chen 2018-02-15 18:06:06 -05:00
parent d6729b8d28
commit a1a66f9c59

View File

@ -67,6 +67,8 @@ import android.view.inputmethod.InputMethodManager;
private String mIMEActionHint = ""; private String mIMEActionHint = "";
private int mIMEFlags; private int mIMEFlags;
private boolean mFocused; private boolean mFocused;
private int mLastSelectionStart;
private int mLastSelectionEnd;
private String mCurrentInputMethod = ""; private String mCurrentInputMethod = "";
@ -339,8 +341,9 @@ import android.view.inputmethod.InputMethodManager;
final Editable editable = getEditable(); final Editable editable = getEditable();
if (editable != null) { if (editable != null) {
notifySelectionChange(Selection.getSelectionStart(editable), mLastSelectionStart = Selection.getSelectionStart(editable);
Selection.getSelectionEnd(editable)); mLastSelectionEnd = Selection.getSelectionEnd(editable);
notifySelectionChange(mLastSelectionStart, mLastSelectionEnd);
} }
} }
@ -640,9 +643,8 @@ import android.view.inputmethod.InputMethodManager;
Log.d(LOGTAG, "IME: CurrentInputMethod=" + mCurrentInputMethod); Log.d(LOGTAG, "IME: CurrentInputMethod=" + mCurrentInputMethod);
} }
Editable editable = getEditable(); outAttrs.initialSelStart = mLastSelectionStart;
outAttrs.initialSelStart = Selection.getSelectionStart(editable); outAttrs.initialSelEnd = mLastSelectionEnd;
outAttrs.initialSelEnd = Selection.getSelectionEnd(editable);
if ((mIMEFlags & IME_FLAG_USER_ACTION) != 0) { if ((mIMEFlags & IME_FLAG_USER_ACTION) != 0) {
if ((context instanceof Activity) && if ((context instanceof Activity) &&