diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index aefd51feb6104..f92a67b433c58 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 610edc0a5e14c..fbb14e7c602da 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -1062,6 +1062,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.