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

Commit cefc4aa8 authored by Kazuki Takise's avatar Kazuki Takise
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.

Bug: 244123821
Bug: 268239637
Test: adb shell am force-stop com.android.settings
Change-Id: I07bdadd81f6992445b11e21dc08a68c231e8d5b8
parent e17d89ba
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -2288,11 +2288,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                    resumedOnDisplay[0] |= curResult;
                    return;
                }
                if (rootTask.getDisplayArea().isTopRootTask(rootTask)
                        && topRunningActivity.isState(RESUMED)) {
                    // Kick off any lingering app transitions from 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
@@ -775,7 +775,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();