Fix setSystemBarsAppearances

We should compare the existing appearance with the new appearance which
is about to be applied to insetsFlags.appearance, not the raw appearance
from the argument, before deciding if we can skip it.

Bug: 224613946
Fix: 226227461
Test: atest WindowInsetsControllerTests#testSetSystemBarsAppearance
Change-Id: I1283089a3dadf4ca2c3136f80d1472a34351306a
This commit is contained in:
Tiger Huang
2022-03-23 16:08:40 +08:00
parent 23d65f1d38
commit 43047efed7

View File

@@ -171,8 +171,9 @@ public class ViewRootInsetsControllerHost implements InsetsController.Host {
public void setSystemBarsAppearance(int appearance, int mask) {
mViewRoot.mWindowAttributes.privateFlags |= PRIVATE_FLAG_APPEARANCE_CONTROLLED;
final InsetsFlags insetsFlags = mViewRoot.mWindowAttributes.insetsFlags;
if (insetsFlags.appearance != appearance) {
insetsFlags.appearance = (insetsFlags.appearance & ~mask) | (appearance & mask);
final int newAppearance = (insetsFlags.appearance & ~mask) | (appearance & mask);
if (insetsFlags.appearance != newAppearance) {
insetsFlags.appearance = newAppearance;
mViewRoot.mWindowAttributesChanged = true;
mViewRoot.scheduleTraversals();
}