diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/TrustedOverlayHost.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 9 |
2 files changed, 16 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/TrustedOverlayHost.java b/services/core/java/com/android/server/wm/TrustedOverlayHost.java index f8edc2b871be..debe7946dc95 100644 --- a/services/core/java/com/android/server/wm/TrustedOverlayHost.java +++ b/services/core/java/com/android/server/wm/TrustedOverlayHost.java @@ -88,7 +88,17 @@ class TrustedOverlayHost { void addOverlay(SurfaceControlViewHost.SurfacePackage p, SurfaceControl currentParent) { requireOverlaySurfaceControl(); - mOverlays.add(p); + + boolean hasExistingOverlay = false; + for (int i = mOverlays.size() - 1; i >= 0; i--) { + SurfaceControlViewHost.SurfacePackage l = mOverlays.get(i); + if (l.getSurfaceControl().isSameSurface(p.getSurfaceControl())) { + hasExistingOverlay = true; + } + } + if (!hasExistingOverlay) { + mOverlays.add(p); + } SurfaceControl.Transaction t = mWmService.mTransactionFactory.get(); t.reparent(p.getSurfaceControl(), mSurfaceControl) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 426694d178af..5db2a5304b3b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8468,12 +8468,13 @@ public class WindowManagerService extends IWindowManager.Stub SurfaceControlViewHost.SurfacePackage overlay) { if (overlay == null) { throw new IllegalArgumentException("Invalid overlay passed in for task=" + taskId); - } else if (overlay.getSurfaceControl() == null - || !overlay.getSurfaceControl().isValid()) { - throw new IllegalArgumentException( - "Invalid overlay surfacecontrol passed in for task=" + taskId); } synchronized (mGlobalLock) { + if (overlay.getSurfaceControl() == null + || !overlay.getSurfaceControl().isValid()) { + throw new IllegalArgumentException( + "Invalid overlay surfacecontrol passed in for task=" + taskId); + } final Task task = mRoot.getRootTask(taskId); if (task == null) { throw new IllegalArgumentException("no task with taskId" + taskId); |