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

Commit cdb03b30 authored by Kazuki Takise's avatar Kazuki Takise Committed by Charles Chen
Browse files

Run transition when app dies in freeform

In a freeform environment, currently a shell transition times out when
an app is killed via adb force-stop.

In this timeout case, setReady() isn't called where it's supposed to
because handleAppDied doesn't directly trigger any z-order or focus
update in freeform mode.

This CL adjusts the if condition in question so that this kind of
lingering transition will be executed even without any focus change.

This CL also fixes the timeout issue when dismissing placeholder activity and a PIP task is there.

Bug: 244123821
Bug: 268239637
fixes: 274536834
Test: adb shell am force-stop com.android.settings
Test: manual - Open settings + pip and fold the foldables

Merged-In: I07bdadd81f6992445b11e21dc08a68c231e8d5b8
Change-Id: I07bdadd81f6992445b11e21dc08a68c231e8d5b8
parent 09c1e200
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -2282,11 +2282,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                    resumedOnDisplay[0] |= curResult;
                    return;
                }
                if (rootTask.getDisplayArea().isTopRootTask(rootTask)
                        && topRunningActivity.isState(RESUMED)) {
                    // Kick off any lingering app transitions form the MoveTaskToFront
                    // operation, but only consider the top task and root-task on that
                    // display.
                if (topRunningActivity.isState(RESUMED)
                        && topRunningActivity == rootTask.getDisplayArea().topRunningActivity()) {
                    // Kick off any lingering app transitions form the MoveTaskToFront operation,
                    // but only consider the top activity on that display.
                    rootTask.executeAppTransition(targetOptions);
                } else {
                    resumedOnDisplay[0] |= topRunningActivity.makeActiveIfNeeded(target);
+1 −1
Original line number Diff line number Diff line
@@ -761,7 +761,7 @@ public class RootWindowContainerTests extends WindowTestsBase {

        // Assume the task is at the topmost position
        assertFalse(rootTask.isTopRootTaskInDisplayArea());
        doReturn(rootTask).when(mRootWindowContainer).getTopDisplayFocusedRootTask();
        doReturn(taskDisplayArea.getHomeActivity()).when(taskDisplayArea).topRunningActivity();

        // Use the task as target to resume.
        mRootWindowContainer.resumeFocusedTasksTopActivities();