Loading services/core/java/com/android/server/wm/BackNavigationController.java +4 −0 Original line number Diff line number Diff line Loading @@ -276,6 +276,10 @@ class BackNavigationController { // activity, we won't close the activity. backType = BackNavigationInfo.TYPE_DIALOG_CLOSE; removedWindowContainer = window; } else if (!currentActivity.occludesParent() || currentActivity.showWallpaper()) { // skip if current activity is translucent backType = BackNavigationInfo.TYPE_CALLBACK; removedWindowContainer = window; } else if (prevActivity != null) { if (!isOccluded || prevActivity.canShowWhenLocked()) { // We have another Activity in the same currentTask to go to Loading services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java +15 −7 Original line number Diff line number Diff line Loading @@ -130,12 +130,22 @@ public class BackNavigationControllerTests extends WindowTestsBase { // verify if back animation would start. assertTrue("Animation scheduled", backNavigationInfo.isPrepareRemoteAnimation()); // reset drawing status // reset drawing status to test translucent activity backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); topTask.forAllWindows(w -> { makeWindowVisibleAndDrawn(w); }, true); final ActivityRecord topActivity = topTask.getTopMostActivity(); makeWindowVisibleAndDrawn(topActivity.findMainWindow()); // simulate translucent topActivity.setOccludesParent(false); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) .isEqualTo(typeToString(BackNavigationInfo.TYPE_CALLBACK)); // reset drawing status to test keyguard occludes topActivity.setOccludesParent(true); backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); makeWindowVisibleAndDrawn(topActivity.findMainWindow()); setupKeyguardOccluded(); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) Loading Loading @@ -201,9 +211,7 @@ public class BackNavigationControllerTests extends WindowTestsBase { // reset drawing status backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); testCase.recordFront.forAllWindows(w -> { makeWindowVisibleAndDrawn(w); }, true); makeWindowVisibleAndDrawn(testCase.recordFront.findMainWindow()); setupKeyguardOccluded(); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) Loading Loading
services/core/java/com/android/server/wm/BackNavigationController.java +4 −0 Original line number Diff line number Diff line Loading @@ -276,6 +276,10 @@ class BackNavigationController { // activity, we won't close the activity. backType = BackNavigationInfo.TYPE_DIALOG_CLOSE; removedWindowContainer = window; } else if (!currentActivity.occludesParent() || currentActivity.showWallpaper()) { // skip if current activity is translucent backType = BackNavigationInfo.TYPE_CALLBACK; removedWindowContainer = window; } else if (prevActivity != null) { if (!isOccluded || prevActivity.canShowWhenLocked()) { // We have another Activity in the same currentTask to go to Loading
services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java +15 −7 Original line number Diff line number Diff line Loading @@ -130,12 +130,22 @@ public class BackNavigationControllerTests extends WindowTestsBase { // verify if back animation would start. assertTrue("Animation scheduled", backNavigationInfo.isPrepareRemoteAnimation()); // reset drawing status // reset drawing status to test translucent activity backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); topTask.forAllWindows(w -> { makeWindowVisibleAndDrawn(w); }, true); final ActivityRecord topActivity = topTask.getTopMostActivity(); makeWindowVisibleAndDrawn(topActivity.findMainWindow()); // simulate translucent topActivity.setOccludesParent(false); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) .isEqualTo(typeToString(BackNavigationInfo.TYPE_CALLBACK)); // reset drawing status to test keyguard occludes topActivity.setOccludesParent(true); backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); makeWindowVisibleAndDrawn(topActivity.findMainWindow()); setupKeyguardOccluded(); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) Loading Loading @@ -201,9 +211,7 @@ public class BackNavigationControllerTests extends WindowTestsBase { // reset drawing status backNavigationInfo.onBackNavigationFinished(false); mBackNavigationController.clearBackAnimations(); testCase.recordFront.forAllWindows(w -> { makeWindowVisibleAndDrawn(w); }, true); makeWindowVisibleAndDrawn(testCase.recordFront.findMainWindow()); setupKeyguardOccluded(); backNavigationInfo = startBackNavigation(); assertThat(typeToString(backNavigationInfo.getType())) Loading