From c4e6f31875ab8dc2bec416e3a37f7950746eaf72 Mon Sep 17 00:00:00 2001 From: Tiger Date: Thu, 9 Feb 2023 15:08:44 +0800 Subject: [PATCH] Don't let PIP window control system bars Fix: 267413713 Test: 1. Watch a YouTube video on Chrome. 2. Enter fullscreen mode. 3. Swipe to show navigation bar and go to home screen. 4. Open Calculator while PIP is playing the video. See if system bars are transiently hidden while opening Calculator. Change-Id: I918f35435d125c80d986d6f1c715f0129142edae --- .../core/java/com/android/server/wm/ActivityRecord.java | 5 +++++ services/core/java/com/android/server/wm/WindowState.java | 8 +++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2b9364c2f6923..f092172b24eaa 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -5115,6 +5115,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return mDeferHidingClient; } + boolean canAffectSystemUiFlags() { + return task != null && task.canAffectSystemUiFlags() && isVisible() + && !inPinnedWindowingMode(); + } + @Override boolean isVisible() { // If the activity isn't hidden then it is considered visible and there is no need to check diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index e429db924df58..69e84c76ac3b6 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2067,12 +2067,10 @@ class WindowState extends WindowContainer implements WindowManagerP final boolean exiting = mAnimatingExit || mDestroying; return shown && !exiting; } else { - final Task task = getTask(); - final boolean canFromTask = task != null && task.canAffectSystemUiFlags(); - return canFromTask && mActivityRecord.isVisible() - // Do not let snapshot window control the bar + return mActivityRecord.canAffectSystemUiFlags() + // Do not let snapshot window control the bar && (mAttrs.type != TYPE_APPLICATION_STARTING - || !(mStartingData instanceof SnapshotStartingData)); + || !(mStartingData instanceof SnapshotStartingData)); } }