Make sure IME focus is synced to View focus
This CL fixes an edge case that my previous CL [1] forgot to handle. The goal of my previous CL was to avoid InputMethodManager from getting confused by a false focus-in event from temporarily detached Views. However, my CL forgot to take care of the case where the temporarily detached View is still focused even after the temporary detach mode is done. The bad news is that such a situation is relatively easy to trigger by having a ListView that has EditText as follows, which seems to be known to be a common technique in Android developer community to put an EditText in a ListView. ListView#listView.addHeaderView(new EditText(context), null, true); If the ListView is initialized as above, and the EditText has input focus, View focus and IME focus start to disagree immediatelly after the ListView's layout is re-evaluated. This is really easy to trigger, for example just by dismissing the IME window. In summary, the root cause is that InputMethodManager#focusIn(View) is now always ignored as long as the View is temporarily detached, under an assumption that IMM#focusIn(View) will be called back again with a View that is not temporarily detached when everything is stable. Hence the fix is to do so by hooking up View#dispatchFinishTemporaryDetach() to call IMM#focusIn(View) again when the View is actually focused in the final state. [1]: Ia79bbd8468f768d546354382b47b39dd31ef7bb5 a4ed0cfc Bug: 30022872 Bug: 30578745 Bug: 30706985 Change-Id: Iecbdb00dcef8c72e4f7b31035c9bf0f4a40a578f
Loading
Please register or sign in to comment