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

Commit aff9eb31 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Skip finishing activities while performing behind fullscreen check"...

Merge "Skip finishing activities while performing behind fullscreen check" into rvc-dev am: 9a5681d8 am: 01a2071e

Change-Id: Ifc5631efbfa13bc96e90f2f3537c53e681eaf3cb
parents 80fa2e73 01a2071e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2085,7 +2085,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A

    /** Returns true if this activity is opaque and fills the entire space of this task. */
    boolean occludesParent() {
        return mOccludesParent;
        return !finishing && mOccludesParent;
    }

    boolean setOccludesParent(boolean occludesParent) {
+3 −4
Original line number Diff line number Diff line
@@ -2343,7 +2343,7 @@ class ActivityStack extends Task {
            // Starting activity cannot be occluding activity, otherwise starting window could be
            // remove immediately without transferring to starting activity.
            final ActivityRecord occludingActivity = getActivity(
                    (ar) -> !ar.finishing && ar.occludesParent(), true, r);
                    (ar) -> ar.occludesParent(), true, r);
            if (occludingActivity != null) {
                // Here it is!  Now, if this is not yet visible (occluded by another task) to the
                // user, then just add it without starting; it will get started when the user
@@ -3076,9 +3076,8 @@ class ActivityStack extends Task {
        }

        // See if there is an occluding activity on-top of this one.
        final ActivityRecord occludingActivity = getActivity((ar) ->
                ar.occludesParent() && !ar.finishing,
                r, false /*includeBoundary*/, true /*traverseTopToBottom*/);
        final ActivityRecord occludingActivity = getActivity((ar) -> ar.occludesParent(), r,
                false /*includeBoundary*/, true /*traverseTopToBottom*/);
        if (occludingActivity != null) return false;

        if (r.finishing) Slog.e(TAG, "willActivityBeVisible: Returning false,"
+29 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECOND
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
@@ -56,7 +57,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;

import android.app.ActivityManager;
import android.app.IApplicationThread;
@@ -1156,6 +1156,34 @@ public class ActivityStackTests extends ActivityTestsBase {
        assertThat(result).isEqualTo(taskTop);
    }

    @Test
    public void testCheckBehindFullscreenActivity() {
        final ActivityRecord bottomActivity =
                new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build();
        final ActivityRecord topActivity =
                new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build();
        doReturn(true).when(mStack).shouldBeVisible(any());
        assertTrue(mStack.checkBehindFullscreenActivity(bottomActivity,
                null /* handleBehindFullscreenActivity */));
        assertFalse(mStack.checkBehindFullscreenActivity(topActivity,
                null /* handleBehindFullscreenActivity */));

        doReturn(false).when(topActivity).occludesParent();
        assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity,
                null /* handleBehindFullscreenActivity */));
        assertFalse(mStack.checkBehindFullscreenActivity(topActivity,
                null /* handleBehindFullscreenActivity */));

        final ActivityRecord finishingActivity =
                new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build();
        finishingActivity.finishing = true;
        doCallRealMethod().when(finishingActivity).occludesParent();
        assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity,
                null /* handleBehindFullscreenActivity */));
        assertFalse(mStack.checkBehindFullscreenActivity(topActivity,
                null /* handleBehindFullscreenActivity */));
    }

    @Test
    public void testClearUnknownAppVisibilityBehindFullscreenActivity() {
        final UnknownAppVisibilityController unknownAppVisibilityController =