Fix toggleSoftInput can't hide IME when the app in multi-window mode
CL[1] changed toggleSoftInput behavior with checking the last IME requested visibility by using ImeInsetsSourceConsumer#mRequestedVisible to toggle IME. However, ImeInsetsSourceConsumer#mRequestedVisible will be updated only when: 1) The IME insets is controllable for the app. 2) The caller uses WindowsInsetsController#{show, hide} Since by design when the app is in multi-window mode, SystemUI will take over the insets control for synchronizing task resizing / IME animation concern, so it ends up making the app unable to receive IME insets control then affects toggling IME visiblity. Even though toggleSoftInput has been deprecated since Android S, we still requires to support its functionality for old apps run in some platforms by default in multi-window mode (e.g. ARC++ in freeform windowing mode). To fix the issue, replace the check logic with getRootWindowInests().isVisible(ime()) to check the last IME visiblity from the root window the served view. [1]: I390dc029e7bcc30c200926a9bfbbbd0268a1f714 Bug: 240886131 Test: atest KeyboardVisibilityControlTest#testToggleSoftInput in ARC++ Change-Id: Iaf7ccc17a7c02711000983db0d65ad095fe9f8fa
Loading
Please register or sign in to comment