Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa2a7e40 authored by Tiger Huang's avatar Tiger Huang
Browse files

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
parent aaec8489
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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;
            }