diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index c21aa2dd73530..03187602b407f 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -3427,6 +3427,12 @@ "group": "WM_DEBUG_FOCUS_LIGHT", "at": "com\/android\/server\/wm\/WindowState.java" }, + "1288920916": { + "message": "Error sending initial insets change to WindowContainer overlay", + "level": "ERROR", + "group": "WM_DEBUG_ANIM", + "at": "com\/android\/server\/wm\/WindowContainer.java" + }, "1305412562": { "message": "Report configuration: %s %s", "level": "VERBOSE", diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 5969e856a56b0..5b87463d889e2 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -3860,7 +3860,8 @@ class WindowContainer extends ConfigurationContainer< @AnimationType int type, @Nullable AnimationAdapter snapshotAnim); } - void addTrustedOverlay(SurfaceControlViewHost.SurfacePackage overlay) { + void addTrustedOverlay(SurfaceControlViewHost.SurfacePackage overlay, + @Nullable WindowState initialWindowState) { if (mOverlayHost == null) { mOverlayHost = new TrustedOverlayHost(mWmService); } @@ -3876,6 +3877,20 @@ class WindowContainer extends ConfigurationContainer< "Error sending initial configuration change to WindowContainer overlay"); removeTrustedOverlay(overlay); } + + // Emit an initial WindowState so that proper insets are available to overlay views + // shortly after the overlay is added. + if (initialWindowState != null) { + final InsetsState insetsState = initialWindowState.getInsetsState(); + final Rect dispBounds = getBounds(); + try { + overlay.getRemoteInterface().onInsetsChanged(insetsState, dispBounds); + } catch (Exception e) { + ProtoLog.e(WM_DEBUG_ANIM, + "Error sending initial insets change to WindowContainer overlay"); + removeTrustedOverlay(overlay); + } + } } void removeTrustedOverlay(SurfaceControlViewHost.SurfacePackage overlay) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 77d31df0bee7b..4d262efd03d06 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8135,7 +8135,7 @@ public class WindowManagerService extends IWindowManager.Stub if (task == null) { throw new IllegalArgumentException("no task with taskId" + taskId); } - task.addTrustedOverlay(overlay); + task.addTrustedOverlay(overlay, task.getTopVisibleAppMainWindow()); } }