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

Commit a5cb8fed authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Respect user leaving when pausing activity by sleeping

Use another startPausing that passes "mTaskSupervisor.mUserLeaving"
by default. So the user leave hint from starting activity can
propagate to the pausing activity.

This aligns the same behavior as general procedure to pause activity.
So the behavior can restore to as Android T (legacy transition).

Fix: 300390005
Test: atest TaskTests#testUserLeaving
Test: Launch a show-when-locked activity on lockscreen.
      Swipe nav bar to hide it. There should be
      wm_pause_activity with userLeaving=true
Change-Id: I1d73d1ae38c9fa6afc671de63d12025f11f7d07c
parent 96fd8a65
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -996,8 +996,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
            } else {
                // Still have something resumed; can't sleep until it is paused.
                ProtoLog.v(WM_DEBUG_STATES, "Sleep needs to pause %s", mResumedActivity);
                startPausing(false /* userLeaving */, true /* uiSleeping */, null /* resuming */,
                        "sleep");
                startPausing(true /* uiSleeping */, null /* resuming */, "sleep");
            }
            shouldSleep = false;
        } else if (mPausingActivity != null) {
+17 −0
Original line number Diff line number Diff line
@@ -314,6 +314,23 @@ public class TaskTests extends WindowTestsBase {
        });
    }

    @Test
    public void testUserLeaving() {
        final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
        final Task task = activity.getTask();
        mSupervisor.mUserLeaving = true;
        activity.setState(ActivityRecord.State.RESUMED, "test");
        task.sleepIfPossible(false /* shuttingDown */);
        verify(task).startPausing(eq(true) /* userLeaving */, anyBoolean(), any(), any());

        clearInvocations(task);
        activity.setState(ActivityRecord.State.RESUMED, "test");
        task.setPausingActivity(null);
        doReturn(false).when(task).canBeResumed(any());
        task.pauseActivityIfNeeded(null /* resuming */, "test");
        verify(task).startPausing(eq(true) /* userLeaving */, anyBoolean(), any(), any());
    }

    @Test
    public void testSwitchUser() {
        final Task rootTask = createTask(mDisplayContent);