From 43047efed7fe21c4b149362d9a259fe648d0045d Mon Sep 17 00:00:00 2001 From: Tiger Huang Date: Wed, 23 Mar 2022 16:08:40 +0800 Subject: [PATCH] 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 --- core/java/android/view/ViewRootInsetsControllerHost.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/ViewRootInsetsControllerHost.java b/core/java/android/view/ViewRootInsetsControllerHost.java index efffa2b05a1e8..aba79d5b87c37 100644 --- a/core/java/android/view/ViewRootInsetsControllerHost.java +++ b/core/java/android/view/ViewRootInsetsControllerHost.java @@ -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(); }