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

Commit 0cdf53c8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Do not collapse shade auto when SysUI start activities" into sc-dev am: 5cab2b0c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13806834

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Icebafa3e670aa4b6baa21bfd48dde91602a84d2d
parents 39057167 5cab2b0c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1573,7 +1573,7 @@ class ActivityStarter {
                }
            } else {
                if (!mAvoidMoveToFront && mDoResume
                        && mRootWindowContainer.hasVisibleWindowAboveNotificationShade(
                        && mRootWindowContainer.hasVisibleWindowAboveButDoesNotOwnNotificationShade(
                            r.launchedFromUid)) {
                    // If the UID launching the activity has a visible window on top of the
                    // notification shade and it's launching an activity that's going to be at the
+3 −1
Original line number Diff line number Diff line
@@ -2962,7 +2962,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        // startActivity() for these apps.
        if (!CompatChanges.isChangeEnabled(LOCK_DOWN_CLOSE_SYSTEM_DIALOGS, uid)) {
            synchronized (mGlobalLock) {
                if (mRootWindowContainer.hasVisibleWindowAboveNotificationShade(uid)) {
                // It's ok that the owner of the shade is not allowed *per this rule* because it has
                // BROADCAST_CLOSE_SYSTEM_DIALOGS (SystemUI), so it would fall into that rule.
                if (mRootWindowContainer.hasVisibleWindowAboveButDoesNotOwnNotificationShade(uid)) {
                    return true;
                }
            }
+8 −5
Original line number Diff line number Diff line
@@ -3127,11 +3127,14 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
    }

    /**
     * Returns {@code true} if {@code uid} has a visible window that's above a window of type {@link
     * WindowManager.LayoutParams#TYPE_NOTIFICATION_SHADE}. If there is no window with type {@link
     * WindowManager.LayoutParams#TYPE_NOTIFICATION_SHADE}, it returns {@code false}.
     * Returns {@code true} if {@code uid} has a visible window that's above the window of type
     * {@link WindowManager.LayoutParams#TYPE_NOTIFICATION_SHADE} and {@code uid} is not owner of
     * the window of type {@link WindowManager.LayoutParams#TYPE_NOTIFICATION_SHADE}.
     *
     * If there is no window with type {@link WindowManager.LayoutParams#TYPE_NOTIFICATION_SHADE},
     * it returns {@code false}.
     */
    boolean hasVisibleWindowAboveNotificationShade(int uid) {
    boolean hasVisibleWindowAboveButDoesNotOwnNotificationShade(int uid) {
        boolean[] visibleWindowFound = {false};
        // We only return true if we found the notification shade (ie. window of type
        // TYPE_NOTIFICATION_SHADE). Usually, it should always be there, but if for some reason
@@ -3141,7 +3144,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                visibleWindowFound[0] = true;
            }
            if (w.mAttrs.type == TYPE_NOTIFICATION_SHADE) {
                return visibleWindowFound[0];
                return visibleWindowFound[0] && w.mOwnerUid != uid;
            }
            return false;
        }, true /* traverseTopToBottom */);