summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/etc/services.core.protolog.json6
-rw-r--r--services/core/java/com/android/server/wm/BackNavigationController.java6
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java18
3 files changed, 30 insertions, 0 deletions
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index 4cc06e33ab62..33467404e38f 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -4171,6 +4171,12 @@
"group": "WM_DEBUG_REMOTE_ANIMATIONS",
"at": "com\/android\/server\/wm\/RemoteAnimationController.java"
},
+ "1945495497": {
+ "message": "Focused window didn't have a valid surface drawn.",
+ "level": "DEBUG",
+ "group": "WM_DEBUG_BACK_PREVIEW",
+ "at": "com\/android\/server\/wm\/BackNavigationController.java"
+ },
"1947239194": {
"message": "Deferring rotation, still finishing previous rotation",
"level": "VERBOSE",
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index 798e73906761..8680f1bd8b28 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -168,6 +168,12 @@ class BackNavigationController {
+ "recents. Overriding back callback to recents controller callback.");
return null;
}
+
+ if (!window.isDrawn()) {
+ ProtoLog.d(WM_DEBUG_BACK_PREVIEW,
+ "Focused window didn't have a valid surface drawn.");
+ return null;
+ }
}
if (window == null) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
index dc3515dec2f5..b1d4fdf13e1b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
@@ -150,6 +150,7 @@ public class BackNavigationControllerTests extends WindowTestsBase {
WindowState window = createWindow(null, WindowManager.LayoutParams.TYPE_WALLPAPER,
"Wallpaper");
addToWindowMap(window, true);
+ makeWindowVisibleAndDrawn(window);
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
window.setOnBackInvokedCallbackInfo(
@@ -236,6 +237,20 @@ public class BackNavigationControllerTests extends WindowTestsBase {
1, appLatch.getCount());
}
+ @Test
+ public void backInfoWindowWithoutDrawn() {
+ WindowState window = createWindow(null, WindowManager.LayoutParams.TYPE_APPLICATION,
+ "TestWindow");
+ addToWindowMap(window, true);
+
+ IOnBackInvokedCallback callback = createOnBackInvokedCallback();
+ window.setOnBackInvokedCallbackInfo(
+ new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT));
+
+ BackNavigationInfo backNavigationInfo = startBackNavigation();
+ assertThat(backNavigationInfo).isNull();
+ }
+
private IOnBackInvokedCallback withSystemCallback(Task task) {
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo(
@@ -309,6 +324,7 @@ public class BackNavigationControllerTests extends WindowTestsBase {
Mockito.doNothing().when(task).reparentSurfaceControl(any(), any());
mAtm.setFocusedTask(task.mTaskId, record);
addToWindowMap(window, true);
+ makeWindowVisibleAndDrawn(window);
return task;
}
@@ -333,6 +349,8 @@ public class BackNavigationControllerTests extends WindowTestsBase {
addToWindowMap(window1, true);
addToWindowMap(window2, true);
+ makeWindowVisibleAndDrawn(window2);
+
CrossActivityTestCase testCase = new CrossActivityTestCase();
testCase.task = task;
testCase.recordBack = record1;