Use the real behavior to decide the animation

If the appearance or the behavior are not controlled by APIs,
InsetsController will still return the default values, but the
internal logic will access the real value.

Fix: 192635471
Test: Open an app which hides system bars with
      SYSTEM_UI_FLAG_IMMERSIVE_STICKY, but not
      BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE.
Change-Id: I1c2f947e3707fcb4c151c1ad19c9cd16527e11d9
This commit is contained in:
Tiger Huang
2021-07-08 17:32:28 +08:00
parent 2b14f17e99
commit b4eac9b5d6
2 changed files with 26 additions and 8 deletions

View File

@@ -128,6 +128,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
*/
@Appearance int getSystemBarsAppearance();
default boolean isSystemBarsAppearanceControlled() {
return false;
}
/**
* @see WindowInsetsController#setSystemBarsBehavior
*/
@@ -138,6 +142,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
*/
@Behavior int getSystemBarsBehavior();
default boolean isSystemBarsBehaviorControlled() {
return false;
}
/**
* Releases a surface and ensure that this is done after {@link #applySurfaceParams} has
* finished applying params.
@@ -1520,6 +1528,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
@Override
public @Appearance int getSystemBarsAppearance() {
if (!mHost.isSystemBarsAppearanceControlled()) {
// We only return the requested appearance, not the implied one.
return 0;
}
return mHost.getSystemBarsAppearance();
}
@@ -1544,6 +1556,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
@Override
public @Behavior int getSystemBarsBehavior() {
if (!mHost.isSystemBarsBehaviorControlled()) {
// We only return the requested behavior, not the implied one.
return 0;
}
return mHost.getSystemBarsBehavior();
}

View File

@@ -180,13 +180,14 @@ public class ViewRootInsetsControllerHost implements InsetsController.Host {
@Override
public int getSystemBarsAppearance() {
if ((mViewRoot.mWindowAttributes.privateFlags & PRIVATE_FLAG_APPEARANCE_CONTROLLED) == 0) {
// We only return the requested appearance, not the implied one.
return 0;
}
return mViewRoot.mWindowAttributes.insetsFlags.appearance;
}
@Override
public boolean isSystemBarsAppearanceControlled() {
return (mViewRoot.mWindowAttributes.privateFlags & PRIVATE_FLAG_APPEARANCE_CONTROLLED) != 0;
}
@Override
public void setSystemBarsBehavior(int behavior) {
mViewRoot.mWindowAttributes.privateFlags |= PRIVATE_FLAG_BEHAVIOR_CONTROLLED;
@@ -199,13 +200,14 @@ public class ViewRootInsetsControllerHost implements InsetsController.Host {
@Override
public int getSystemBarsBehavior() {
if ((mViewRoot.mWindowAttributes.privateFlags & PRIVATE_FLAG_BEHAVIOR_CONTROLLED) == 0) {
// We only return the requested behavior, not the implied one.
return 0;
}
return mViewRoot.mWindowAttributes.insetsFlags.behavior;
}
@Override
public boolean isSystemBarsBehaviorControlled() {
return (mViewRoot.mWindowAttributes.privateFlags & PRIVATE_FLAG_BEHAVIOR_CONTROLLED) != 0;
}
@Override
public void releaseSurfaceControlFromRt(SurfaceControl surfaceControl) {