Call startInput on return from sleep mode

One manifestation of the problem was that input string disappeared when
returning from sleep mode. When editing a TextView with an IME in
landscape orientation, the text would disappear when returning from
sleep mode. The InputMethodManager would be deactivated when the screen
was put into sleep mode as well as the input connection. However when
returning from sleep mode the InputMethodManager was activated, but the
input connection would not be activated again.

The solution is to check focus of the InputMethodManager
which will create a new active input connection to use.

The change is however not specific to this one problem but fundamentally
addresses the issue of lack of startInput on return from sleep mode.

Change-Id: I95d05110bc1cf310fad23ea1bcbc5890f642d1fc
This commit is contained in:
Mikael Gullstrand
2014-11-25 12:41:53 +01:00
committed by Zoran Jovanovic
parent fc54573373
commit 82ae3ff4cf

View File

@@ -494,19 +494,17 @@ public final class InputMethodManager {
mIInputContext.finishComposingText();
} catch (RemoteException e) {
}
// Check focus again in case that "onWindowFocus" is called before
// handling this message.
if (mServedView != null && mServedView.hasWindowFocus()) {
// "finishComposingText" has been already called above. So we
// should not call mServedInputConnection.finishComposingText here.
// Also, please note that this handler thread could be different
// from a thread that created mServedView. That could happen
// the current activity is running in the system process.
// In that case, we really should not call
// mServedInputConnection.finishComposingText.
if (checkFocusNoStartInput(mHasBeenInactive, false)) {
startInputInner(null, 0, 0, 0);
}
}
// Check focus again in case that "onWindowFocus" is called before
// handling this message.
if (mServedView != null && mServedView.hasWindowFocus()) {
// Please note that this handler thread could be different
// from a thread that created mServedView. That could happen
// the current activity is running in the system process.
// In that case, we really should not call
// mServedInputConnection.finishComposingText.
if (checkFocusNoStartInput(mHasBeenInactive, false)) {
startInputInner(null, 0, 0, 0);
}
}
}