Make sure to call back View#onCheckIsTextEditor() on the UI thread
Calling back View#onCheckIsTextEditor() from a non-UI thread is
a well known type of bugs that we have met in the past [1].
This time it turns out that it can still happen when
InputMethodManager#isActive() gets called on a background thread.
This CL should address such a remaining case.
[1]: I098df41f935438bf1889fb030c7a3e7a0645a168
3f733cc7ef
Bug: 286016109
Test: atest CtsInputMethodTestCases:FocusHandlingTest#testOnCheckIsTextEditorRunOnUIThreadWithInputMethodManagerIsActive
Change-Id: I015603c1b33ecdf4a4f5d5be5d85756a3b2b1615
(cherry picked from commit b9eecc6bc8)
This commit is contained in:
@@ -2657,17 +2657,6 @@ public final class InputMethodManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (windowGainingFocus == null) {
|
||||
windowGainingFocus = view.getWindowToken();
|
||||
if (windowGainingFocus == null) {
|
||||
Log.e(TAG, "ABORT input: ServedView must be attached to a Window");
|
||||
return false;
|
||||
}
|
||||
startInputFlags = getStartInputFlags(view, startInputFlags);
|
||||
softInputMode = view.getViewRootImpl().mWindowAttributes.softInputMode;
|
||||
windowFlags = view.getViewRootImpl().mWindowAttributes.flags;
|
||||
}
|
||||
|
||||
// Now we need to get an input connection from the served view.
|
||||
// This is complicated in a couple ways: we can't be holding our lock
|
||||
// when calling out to the view, and we need to make sure we call into
|
||||
@@ -2690,6 +2679,17 @@ public final class InputMethodManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (windowGainingFocus == null) {
|
||||
windowGainingFocus = view.getWindowToken();
|
||||
if (windowGainingFocus == null) {
|
||||
Log.e(TAG, "ABORT input: ServedView must be attached to a Window");
|
||||
return false;
|
||||
}
|
||||
startInputFlags = getStartInputFlags(view, startInputFlags);
|
||||
softInputMode = view.getViewRootImpl().mWindowAttributes.softInputMode;
|
||||
windowFlags = view.getViewRootImpl().mWindowAttributes.flags;
|
||||
}
|
||||
|
||||
// Okay we are now ready to call into the served view and have it
|
||||
// do its stuff.
|
||||
// Life is good: let's hook everything up!
|
||||
|
||||
Reference in New Issue
Block a user