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:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user