Refine excludeInvisibleImeFrames

When adding a window to WMS, its z-order may be higher than IME
initially. And then, WMS will move IME to the top of the new window.
Although IME is invisible during launching an app, that causes a change
in WindowState#mAboveInsetsState. And it would trigger a redundant
onApplyWindowInsets at the client side.

This CL treats null IME source as invisible IME source in
InsetsState#equals when excludeInvisibleImeFrames is true.

Bug: 237749017
Test: Add logs in dispatchApplyWindowInsets, and see if it gets printed
      twice while launching an app.
Change-Id: I5eba7732619f7ceebe3152e81037a43e9ab3d91f
This commit is contained in:
Tiger Huang
2022-07-01 19:41:24 +08:00
parent 03fe0878d5
commit f9705dd8b1

View File

@@ -909,6 +909,11 @@ public class InsetsState implements Parcelable {
if (source == null && otherSource == null) {
continue;
}
if (excludeInvisibleImeFrames && i == ITYPE_IME
&& ((source == null && !otherSource.isVisible())
|| (otherSource == null && !source.isVisible()))) {
continue;
}
if (source == null || otherSource == null) {
return false;
}