Detect broken IC#endBatchEdit() impl at runtime
This is a safeguard against cases like Bug 203086369, where the UI thread can be locked up if IC#endBatchEdit() never returns false no matter how many times it gets called. With this CL, the system will have a max retry count on how many times it attempts to call IC#endBatchEdit(), which is currently set to 16, then fall back to InputMethodManager#restartInput(View) if it hits such a limit. This CL also introduces a volatile type cache to early fall back to the fallback implementation if the same type of InputConnection implementation class appears again. As long as InputConnection#{begin,end}BatchEdit() is correctly implemented, there should be no developer observable behavior change in this CL. See the corresponding test CL [1] about when the fallback implementation is used. [1]: Ifb80015ab0f0c32c917a80c4e5f60e836648e7b4 Bug: 203086369 Bug: 208941904 Bug: 209008342 Test: atest CtsInputMethodTestCases:InputMethodStartInputLifecycleTest Change-Id: I109e0c26d8249fc2e01323e3e1cb36395fa7cc97
Loading
Please register or sign in to comment