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

Commit f7ad8557 authored by Craig Mautner's avatar Craig Mautner
Browse files

Apply FLAG_SHOW_WHEN_LOCKED within tasks.

If the bottommost fullscreen window of a task has FLAG_SHOW_WHEN_LOCKED
set then show all windows of the task that are above that window.

Fixes bug 13558398.

Change-Id: Ied8ada54efbb079eaf375470b2eae749e5551c24
parent 386fff99
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ public interface WindowManagerPolicy {
     * to prepareAddWindow() until removeWindow().
     */
    public interface WindowState {
        public final static int UNKNOWN_TASK_ID = -1;

        /**
         * Return the uid of the app that owns this window.
         */
@@ -281,6 +283,11 @@ public interface WindowManagerPolicy {
         */
        public IApplicationToken getAppToken();

        /**
         * Return the taskId of the task that owns this window.
         */
        public int getTaskId();

        /**
         * Return true if, at any point, the application token associated with 
         * this window has actually displayed any windows.  This is most useful 
+10 −5
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;

import static android.view.WindowManager.LayoutParams.*;
import static android.view.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT;
@@ -374,7 +375,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final Rect mTmpNavigationFrame = new Rect();

    WindowState mTopFullscreenOpaqueWindowState;
    boolean mHideWindowBehindKeyguard;
    HashSet<Integer> mTasksToBeHidden = new HashSet<Integer>();
    boolean mTopIsFullscreen;
    boolean mForceStatusBar;
    boolean mForceStatusBarFromKeyguard;
@@ -3366,7 +3367,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    @Override
    public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) {
        mTopFullscreenOpaqueWindowState = null;
        mHideWindowBehindKeyguard = false;
        mTasksToBeHidden.clear();
        mForceStatusBar = false;
        mForceStatusBarFromKeyguard = false;
        mForcingShowNavBar = false;
@@ -3417,12 +3418,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {

            final boolean showWhenLocked = (fl & FLAG_SHOW_WHEN_LOCKED) != 0;
            if (appWindow) {
                final int taskId = win.getTaskId();
                if (taskId != WindowState.UNKNOWN_TASK_ID && showWhenLocked) {
                    mTasksToBeHidden.remove(taskId);
                } else {
                    mTasksToBeHidden.add(taskId);
                }
                if (attrs.x == 0 && attrs.y == 0
                        && attrs.width == WindowManager.LayoutParams.MATCH_PARENT
                        && attrs.height == WindowManager.LayoutParams.MATCH_PARENT) {
                    if (DEBUG_LAYOUT) Slog.v(TAG, "Fullscreen window: " + win);
                    mTopFullscreenOpaqueWindowState = win;
                    if (!mHideWindowBehindKeyguard) {
                    if (mTasksToBeHidden.isEmpty()) {
                        if (showWhenLocked) {
                            if (DEBUG_LAYOUT) Slog.v(TAG,
                                    "Setting mHideLockScreen to true by win " + win);
@@ -3442,8 +3449,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    if ((fl & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
                        mAllowLockscreenWhenOn = true;
                    }
                } else if (!showWhenLocked) {
                    mHideWindowBehindKeyguard = true;
                }
            }
        }
+5 −0
Original line number Diff line number Diff line
@@ -709,6 +709,11 @@ final class WindowState implements WindowManagerPolicy.WindowState {
        return mAppToken != null ? mAppToken.appToken : null;
    }

    @Override
    public int getTaskId() {
        return mAppToken != null ? mAppToken.groupId : UNKNOWN_TASK_ID;
    }

    boolean setInsetsChanged() {
        mOverscanInsetsChanged |= !mLastOverscanInsets.equals(mOverscanInsets);
        mContentInsetsChanged |= !mLastContentInsets.equals(mContentInsets);