Merge "Make IMM more robust to spurious window focus-in" into nyc-dev
This commit is contained in:
@@ -1277,6 +1277,28 @@ public final class InputMethodManager {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (startInputReason
|
||||||
|
== InputMethodClient.START_INPUT_REASON_WINDOW_FOCUS_GAIN) {
|
||||||
|
// We are here probably because of an obsolete window-focus-in message sent
|
||||||
|
// to windowGainingFocus. Since IMMS determines whether a Window can have
|
||||||
|
// IME focus or not by using the latest window focus state maintained in the
|
||||||
|
// WMS, this kind of race condition cannot be avoided. One obvious example
|
||||||
|
// would be that we have already received a window-focus-out message but the
|
||||||
|
// UI thread is still handling previous window-focus-in message here.
|
||||||
|
// TODO: InputBindResult should have the error code.
|
||||||
|
if (DEBUG) Log.w(TAG, "startInputOrWindowGainedFocus failed. "
|
||||||
|
+ "Window focus may have already been lost. "
|
||||||
|
+ "win=" + windowGainingFocus + " view=" + dumpViewInfo(view));
|
||||||
|
if (!mActive) {
|
||||||
|
// mHasBeenInactive is a latch switch to forcefully refresh IME focus
|
||||||
|
// state when an inactive (mActive == false) client is gaining window
|
||||||
|
// focus. In case we have unnecessary disable the latch due to this
|
||||||
|
// spurious wakeup, we re-enable the latch here.
|
||||||
|
// TODO: Come up with more robust solution.
|
||||||
|
mHasBeenInactive = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (mCurMethod != null && mCompletions != null) {
|
if (mCurMethod != null && mCompletions != null) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user