diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index d8bff1c4cb10f..f570c6d156727 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -658,6 +658,9 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** Set of inset types which cannot be controlled by the user animation */ private @InsetsType int mDisabledUserAnimationInsetsTypes; + /** Set of inset types which are existing */ + private @InsetsType int mExistingTypes = 0; + /** Set of inset types which are visible */ private @InsetsType int mVisibleTypes = WindowInsets.Type.defaultVisible(); @@ -906,6 +909,12 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } mVisibleTypes = visibleTypes; } + if (mExistingTypes != existingTypes) { + if (WindowInsets.Type.hasCompatSystemBars(mExistingTypes ^ existingTypes)) { + mCompatSysUiVisibilityStaled = true; + } + mExistingTypes = existingTypes; + } InsetsState.traverse(mState, newState, mRemoveGoneSources); updateDisabledUserAnimationTypes(disabledUserAnimationTypes); @@ -1662,7 +1671,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (mCompatSysUiVisibilityStaled) { mCompatSysUiVisibilityStaled = false; mHost.updateCompatSysUiVisibility( - mVisibleTypes, mRequestedVisibleTypes, mControllableTypes); + // Treat non-existing types as controllable types for compatibility. + mVisibleTypes, mRequestedVisibleTypes, mControllableTypes | ~mExistingTypes); } }