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

Commit 6a6c4f18 authored by Andrii Kulian's avatar Andrii Kulian
Browse files

Update tests for new focus tracking

Switch existing unit tests to use getters instead of directly setting
a field in ActivityStackSupervisor.

Bug: 111541062
Test: atest com.android.server.am
Change-Id: Iacc837e2b5b6ac44e051a1adc30dfb271d253c40
parent 5f750bc6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -258,7 +258,7 @@ public class ActivityManagerServiceTest {
        uidRec.hasInternetPermission = true;
        mAms.mActiveUids.put(uid, uidRec);

        final ProcessRecord appRec = new ProcessRecord(null, mBatteryStatsImpl,
        final ProcessRecord appRec = new ProcessRecord(mAms, mBatteryStatsImpl,
                new ApplicationInfo(), TAG, uid);
        appRec.thread = Mockito.mock(IApplicationThread.class);
        mAms.mLruProcesses.add(appRec);
+3 −1
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -136,7 +137,8 @@ public class ActivityRecordTests extends ActivityTestsBase {
        assertFalse(pauseFound.value);

        // Clear focused stack
        mActivity.mStackSupervisor.mFocusedStack = null;
        final ActivityDisplay display = mActivity.mStackSupervisor.getDefaultDisplay();
        when(display.getFocusedStack()).thenReturn(null);

        // In the unfocused stack, the activity should move to paused.
        mActivity.makeVisibleIfNeeded(null /* starting */, true /* reportToClient */);
+19 −18
Original line number Diff line number Diff line
@@ -84,12 +84,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
    }

    /**
     * This test ensures that we do not try to restore a task based off an invalid task id. The
     * stack supervisor is a test version so there will be no tasks present. We should expect
     * {@code null} to be returned in this case.
     * This test ensures that we do not try to restore a task based off an invalid task id. We
     * should expect {@code null} to be returned in this case.
     */
    @Test
    public void testRestoringInvalidTask() throws Exception {
        ((TestActivityDisplay) mSupervisor.getDefaultDisplay()).removeAllTasks();
        TaskRecord task = mSupervisor.anyTaskForIdLocked(0 /*taskId*/,
                MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE, null, false /* onTop */);
        assertNull(task);
@@ -109,7 +109,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
                .setStack(mFullscreenStack).build();
        final TaskRecord secondTask = secondActivity.getTask();

        mSupervisor.setFocusStackUnchecked("testReplacingTaskInPinnedStack", mFullscreenStack);
        mFullscreenStack.moveToFront("testReplacingTaskInPinnedStack");

        // Ensure full screen stack has both tasks.
        ensureStackPlacement(mFullscreenStack, firstTask, secondTask);
@@ -239,7 +239,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
        doReturn(displaySleeping).when(display).isSleeping();
        doReturn(keyguardShowing).when(keyguard).isKeyguardOrAodShowing(anyInt());

        mSupervisor.mFocusedStack = isFocusedStack ? stack : null;
        doReturn(isFocusedStack ? stack : null).when(display).getFocusedStack();
        mSupervisor.applySleepTokensLocked(true);
        verify(stack, times(expectWakeFromSleep ? 1 : 0)).awakeFromSleepingLocked();
        verify(stack, times(expectResumeTopActivity ? 1 : 0)).resumeTopActivityUncheckedLocked(
@@ -253,12 +253,11 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {

        doAnswer((InvocationOnMock invocationOnMock) -> {
            final SparseIntArray displayIds = invocationOnMock.<SparseIntArray>getArgument(0);
            displayIds.put(0, unknownDisplayId);
            displayIds.put(0, 0);
            displayIds.put(1, unknownDisplayId);
            return null;
        }).when(mSupervisor.mWindowManager).getDisplaysInFocusOrder(any());

        mSupervisor.mFocusedStack = mock(ActivityStack.class);

        // Supervisor should skip over the non-existent display.
        assertEquals(null, mSupervisor.topRunningActivityLocked());
    }
@@ -330,8 +329,9 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
    @Test
    public void testTopRunningActivity() throws Exception {
        // Create stack to hold focus
        final ActivityStack emptyStack = mService.mStackSupervisor.getDefaultDisplay()
                .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
        final ActivityDisplay display = mService.mStackSupervisor.getDefaultDisplay();
        final ActivityStack emptyStack = display.createStack(WINDOWING_MODE_FULLSCREEN,
                ACTIVITY_TYPE_STANDARD, true /* onTop */);

        final KeyguardController keyguard = mSupervisor.getKeyguardController();
        final ActivityStack stack = mService.mStackSupervisor.getDefaultDisplay().createStack(
@@ -339,11 +339,9 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
        final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true)
                .setStack(stack).build();

        mSupervisor.mFocusedStack = emptyStack;

        doAnswer((InvocationOnMock invocationOnMock) -> {
            final SparseIntArray displayIds = invocationOnMock.<SparseIntArray>getArgument(0);
            displayIds.put(0, mSupervisor.getDefaultDisplay().mDisplayId);
            displayIds.put(0, display.mDisplayId);
            return null;
        }).when(mSupervisor.mWindowManager).getDisplaysInFocusOrder(any());

@@ -359,7 +357,8 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
                true /* considerKeyguardState */));

        // Change focus to stack with activity.
        mSupervisor.mFocusedStack = stack;
        stack.moveToFront("focusChangeToTestStack");
        assertEquals(stack, display.getFocusedStack());
        assertEquals(activity, mService.mStackSupervisor.topRunningActivityLocked());
        assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked(
                true /* considerKeyguardState */));
@@ -377,10 +376,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
                true /* considerKeyguardState */));

        // Change focus back to empty stack
        mSupervisor.mFocusedStack = emptyStack;
        // Ensure the show when locked activity is returned when not the focused stack
        assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked());
        assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked(
        emptyStack.moveToFront("focusChangeToEmptyStack");
        assertEquals(emptyStack, display.getFocusedStack());
        // Looking for running activity only in top and focused stack, so nothing should be returned
        // from empty stack.
        assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked());
        assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked(
                true /* considerKeyguardState */));
    }

+16 −6
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ public class ActivityStackTests extends ActivityTestsBase {
    public void testStopActivityWhenActivityDestroyed() throws Exception {
        final ActivityRecord r = new ActivityBuilder(mService).setTask(mTask).build();
        r.info.flags |= ActivityInfo.FLAG_NO_HISTORY;
        mSupervisor.setFocusStackUnchecked("testStopActivityWithDestroy", mStack);
        mStack.moveToFront("testStopActivityWithDestroy");
        mStack.stopActivityLocked(r);
        // Mostly testing to make sure there is a crash in the call part, so if we get here we are
        // good-to-go!
@@ -546,9 +546,20 @@ public class ActivityStackTests extends ActivityTestsBase {

    private <T extends ActivityStack> T createStackForShouldBeVisibleTest(
            ActivityDisplay display, int windowingMode, int activityType, boolean onTop) {
        final T stack = display.createStack(windowingMode, activityType, onTop);
        final T stack;
        if (activityType == ACTIVITY_TYPE_HOME) {
            // Home stack and activity are created in ActivityTestsBase#setupActivityManagerService
            stack = mDefaultDisplay.getStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME);
            if (onTop) {
                mDefaultDisplay.positionChildAtTop(stack);
            } else {
                mDefaultDisplay.positionChildAtBottom(stack);
            }
        } else {
            stack = display.createStack(windowingMode, activityType, onTop);
            final ActivityRecord r = new ActivityBuilder(mService).setUid(0).setStack(stack)
                    .setCreateTask(true).build();
        }
        return stack;
    }

@@ -654,14 +665,13 @@ public class ActivityStackTests extends ActivityTestsBase {

    private void verifyShouldSleepActivities(boolean focusedStack,
            boolean keyguardGoingAway, boolean displaySleeping, boolean expected) {
        mSupervisor.mFocusedStack = focusedStack ? mStack : null;

        final ActivityDisplay display = mock(ActivityDisplay.class);
        final KeyguardController keyguardController = mSupervisor.getKeyguardController();

        doReturn(display).when(mSupervisor).getActivityDisplay(anyInt());
        doReturn(keyguardGoingAway).when(keyguardController).isKeyguardGoingAway();
        doReturn(displaySleeping).when(display).isSleeping();
        doReturn(focusedStack ? mStack : null).when(mSupervisor).getTopDisplayFocusedStack();

        assertEquals(expected, mStack.shouldSleepActivities());
    }
+5 −5
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import org.junit.Test;

import static android.content.Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;
import static com.android.server.am.ActivityManagerService.ANIMATE;
import static com.android.server.am.ActivityStack.REMOVE_TASK_MODE_DESTROYING;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -77,6 +78,7 @@ import com.android.server.am.LaunchParamsController.LaunchParamsModifier;
import com.android.server.am.TaskRecord.TaskRecordFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * Tests for the {@link ActivityStarter} class.
@@ -312,9 +314,6 @@ public class ActivityStarterTests extends ActivityTestsBase {
                .setCreateStack(false)
                .build();

        // supervisor needs a focused stack.
        mService.mStackSupervisor.mFocusedStack = stack;

        // use factory that only returns spy task.
        final TaskRecordFactory factory = mock(TaskRecordFactory.class);
        TaskRecord.setTaskRecordFactory(factory);
@@ -404,8 +403,8 @@ public class ActivityStarterTests extends ActivityTestsBase {
        reusableActivity.getStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);

        // Set focus back to primary.
        mService.mStackSupervisor.setFocusStackUnchecked("testSplitScreenDeliverToTop",
                focusActivity.getStack());
        final ActivityStack focusStack = focusActivity.getStack();
        focusStack.moveToFront("testSplitScreenDeliverToTop");

        doReturn(reusableActivity).when(mService.mStackSupervisor).findTaskLocked(any(), anyInt());

@@ -453,6 +452,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
    @Test
    public void testTaskModeViolation() {
        final ActivityDisplay display = mService.mStackSupervisor.getDefaultDisplay();
        ((TestActivityDisplay) display).removeAllTasks();
        assertNoTasks(display);

        final ActivityStarter starter = prepareStarter(0);
Loading