Let notification shade control system bar visibility

When immersive mode confirmation dialog is shown, we choose notfication
shade as the system bar controlling window as long as it can receive key
events.

Fix: 241872473
Test: 1. Show immersive mode confirmation dialog in landscape mode.
      2. Enter AOD mode without entering lockscreen mode.
Change-Id: I2b9fb12f051bef47cbd21786c6d22e86c1351879
This commit is contained in:
Tiger Huang
2022-08-15 17:28:34 +08:00
parent aaec84898c
commit fa2a7e4095

View File

@@ -2384,18 +2384,19 @@ public class DisplayPolicy {
return;
}
// The immersive mode confirmation should never affect the system bar visibility, otherwise
// Immersive mode confirmation should never affect the system bar visibility, otherwise
// it will unhide the navigation bar and hide itself.
if (winCandidate.getAttrs().token == mImmersiveModeConfirmation.getWindowToken()) {
// The immersive mode confirmation took the focus from mLastFocusedWindow which was
// controlling the system ui visibility. So if mLastFocusedWindow can still receive
// keys, we let it keep controlling the visibility.
final boolean lastFocusCanReceiveKeys =
(mLastFocusedWindow != null && mLastFocusedWindow.canReceiveKeys());
winCandidate = isKeyguardShowing() && !isKeyguardOccluded() ? mNotificationShade
: lastFocusCanReceiveKeys ? mLastFocusedWindow
: mTopFullscreenOpaqueWindowState;
if (mNotificationShade != null && mNotificationShade.canReceiveKeys()) {
// Let notification shade control the system bar visibility.
winCandidate = mNotificationShade;
} else if (mLastFocusedWindow != null && mLastFocusedWindow.canReceiveKeys()) {
// Immersive mode confirmation took the focus from mLastFocusedWindow which was
// controlling the system bar visibility. Let it keep controlling the visibility.
winCandidate = mLastFocusedWindow;
} else {
winCandidate = mTopFullscreenOpaqueWindowState;
}
if (winCandidate == null) {
return;
}