summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorTiger Huang <tigerhuang@google.com>2021-01-06 16:44:03 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-01-06 16:44:03 +0000
commitdd0180a142887e8311bfd23f2639e831721ab850 (patch)
tree87ff85f462c2ec8839b16cd7eab104e3bff4ecd7 /core/java
parent873b5f178589e8d32514621d064723e518d26271 (diff)
parent7dbb0540c0ffed0dde7fab11d477188ffc25c32b (diff)
Merge "Preserve the controlling state of appearance and behavior"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/ViewRootImpl.java28
1 files changed, 18 insertions, 10 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 24989b60cf46..7d309eb36483 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1389,7 +1389,8 @@ public final class ViewRootImpl implements ViewParent,
return mLocation;
}
- void setLayoutParams(WindowManager.LayoutParams attrs, boolean newView) {
+ @VisibleForTesting
+ public void setLayoutParams(WindowManager.LayoutParams attrs, boolean newView) {
synchronized (this) {
final int oldInsetLeft = mWindowAttributes.surfaceInsets.left;
final int oldInsetTop = mWindowAttributes.surfaceInsets.top;
@@ -1411,13 +1412,15 @@ public final class ViewRootImpl implements ViewParent,
final int compatibleWindowFlag = mWindowAttributes.privateFlags
& WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
- // Transfer over system UI visibility values as they carry current state.
- attrs.systemUiVisibility = mWindowAttributes.systemUiVisibility;
- attrs.subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
+ // Preserve system UI visibility.
+ final int systemUiVisibility = mWindowAttributes.systemUiVisibility;
+ final int subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
- // Transfer over appearance and behavior values as they carry current state.
- attrs.insetsFlags.appearance = mWindowAttributes.insetsFlags.appearance;
- attrs.insetsFlags.behavior = mWindowAttributes.insetsFlags.behavior;
+ // Preserve appearance and behavior.
+ final int appearance = mWindowAttributes.insetsFlags.appearance;
+ final int behavior = mWindowAttributes.insetsFlags.behavior;
+ final int appearanceAndBehaviorPrivateFlags = mWindowAttributes.privateFlags
+ & (PRIVATE_FLAG_APPEARANCE_CONTROLLED | PRIVATE_FLAG_BEHAVIOR_CONTROLLED);
final int changes = mWindowAttributes.copyFrom(attrs);
if ((changes & WindowManager.LayoutParams.TRANSLUCENT_FLAGS_CHANGED) != 0) {
@@ -1431,10 +1434,15 @@ public final class ViewRootImpl implements ViewParent,
if (mWindowAttributes.packageName == null) {
mWindowAttributes.packageName = mBasePackageName;
}
- mWindowAttributes.privateFlags |= compatibleWindowFlag;
- mWindowAttributes.privateFlags |=
- WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
+ // Restore preserved flags.
+ mWindowAttributes.systemUiVisibility = systemUiVisibility;
+ mWindowAttributes.subtreeSystemUiVisibility = subtreeSystemUiVisibility;
+ mWindowAttributes.insetsFlags.appearance = appearance;
+ mWindowAttributes.insetsFlags.behavior = behavior;
+ mWindowAttributes.privateFlags |= compatibleWindowFlag
+ | appearanceAndBehaviorPrivateFlags
+ | WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST;
if (mWindowAttributes.preservePreviousSurfaceInsets) {
// Restore old surface insets.