diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index f9cc33453e152..0f4bb4c5b081e 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2606,7 +2606,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A finishActivityResults(resultCode, resultData, resultGrants); - final boolean endTask = task.getActivityBelow(this) == null + final boolean endTask = task.getTopNonFinishingActivity() == null && !task.isClearingToReuseTask(); final int transit = endTask ? TRANSIT_OLD_TASK_CLOSE : TRANSIT_OLD_ACTIVITY_CLOSE; if (isState(RESUMED)) { diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 6f584ee9a18ca..ef96a2d5960ad 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -1063,6 +1063,21 @@ public class ActivityRecordTests extends WindowTestsBase { assertEquals(STOPPED, nextTop.getState()); } + /** + * Verify that finish bottom activity from a task won't boost it to top. + */ + @Test + public void testFinishBottomActivityIfPossible_noZBoost() { + final ActivityRecord bottomActivity = createActivityWithTask(); + final ActivityRecord topActivity = new ActivityBuilder(mAtm) + .setTask(bottomActivity.getTask()).build(); + topActivity.mVisibleRequested = true; + // simulating bottomActivity as a trampoline activity. + bottomActivity.setState(RESUMED, "test"); + bottomActivity.finishIfPossible("test", false); + assertFalse(bottomActivity.mNeedsZBoost); + } + /** * Verify that complete finish request for visible activity must be delayed before the next one * becomes visible.