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

Commit beac1471 authored by Tiger Huang's avatar Tiger Huang Committed by Android (Google) Code Review
Browse files

Merge "Don't flash system bars while showing an immersive app on lockscreen"

parents 9a8e27a9 3404601e
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -1691,6 +1691,15 @@ public interface WindowManager extends ViewManager {
        @RequiresPermission(permission.STATUS_BAR_SERVICE)
        public static final int PRIVATE_FLAG_IS_SCREEN_DECOR = 0x00400000;

        /**
         * Flag to indicate that the status bar window is now in an explicit expanded state, meaning
         * that status bar will not be hidden by any window with flag {@link #FLAG_FULLSCREEN} or
         * {@link View#SYSTEM_UI_FLAG_FULLSCREEN} set.
         * This can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
         * @hide
         */
        public static final int PRIVATE_FLAG_STATUS_BAR_EXPANDED = 0x00800000;

        /**
         * Control flags that are private to the platform.
         * @hide
@@ -1779,7 +1788,11 @@ public interface WindowManager extends ViewManager {
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_IS_SCREEN_DECOR,
                        equals = PRIVATE_FLAG_IS_SCREEN_DECOR,
                        name = "IS_SCREEN_DECOR")
                        name = "IS_SCREEN_DECOR"),
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_STATUS_BAR_EXPANDED,
                        equals = PRIVATE_FLAG_STATUS_BAR_EXPANDED,
                        name = "STATUS_BAR_EXPANDED")
        })
        @TestApi
        public int privateFlags;
+10 −0
Original line number Diff line number Diff line
@@ -180,6 +180,15 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
        mLpChanged.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
    }

    private void applyExpandedFlag(State state) {
        if (state.panelExpanded || state.isKeyguardShowingAndNotOccluded() || state.bouncerShowing
                || ENABLE_REMOTE_INPUT && state.remoteInputActive) {
            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
        } else {
            mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
        }
    }

    private void applyHeight(State state) {
        boolean expanded = isExpanded(state);
        if (state.forcePluginOpen) {
@@ -234,6 +243,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
        applyKeyguardFlags(state);
        applyForceStatusBarVisibleFlag(state);
        applyFocusableFlag(state);
        applyExpandedFlag(state);
        adjustScreenOrientation(state);
        applyHeight(state);
        applyUserActivityTimeout(state);
+1 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ public class BarController {
    }

    protected boolean skipAnimation() {
        return false;
        return !mWin.isDrawnLw();
    }

    private int computeStateLw(boolean wasVis, boolean wasAnim, WindowState win, boolean change) {
+5 −6
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CO
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
@@ -4686,8 +4687,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                navTranslucent &= areTranslucentBarsAllowed();
            }
            boolean statusBarExpandedNotKeyguard = !isKeyguardShowing && mStatusBar != null
                    && mStatusBar.getAttrs().height == MATCH_PARENT
                    && mStatusBar.getAttrs().width == MATCH_PARENT;
                    && (mStatusBar.getAttrs().privateFlags & PRIVATE_FLAG_STATUS_BAR_EXPANDED) != 0;

            // When the navigation bar isn't visible, we put up a fake input window to catch all
            // touch events. This way we can detect when the user presses anywhere to bring back the
@@ -5690,7 +5690,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }

        // Take note if a window wants to acquire a sleep token.
        if (win.isVisibleLw() && (attrs.privateFlags & PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN) != 0
        if ((attrs.privateFlags & PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN) != 0
                && win.canAcquireSleepToken()) {
            mWindowSleepTokenNeeded = true;
        }
@@ -5746,9 +5746,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                mStatusBarController.setShowTransparent(true /* transparent */);
            }

            WindowManager.LayoutParams statusBarAttrs = mStatusBar.getAttrs();
            boolean statusBarExpanded = statusBarAttrs.height == MATCH_PARENT
                    && statusBarAttrs.width == MATCH_PARENT;
            boolean statusBarExpanded =
                    (mStatusBar.getAttrs().privateFlags & PRIVATE_FLAG_STATUS_BAR_EXPANDED) != 0;
            boolean topAppHidesStatusBar = topAppHidesStatusBar();
            if (mForceStatusBar || mForceStatusBarFromKeyguard || mForceStatusBarTransparent
                    || statusBarExpanded) {