diff options
-rw-r--r-- | services/core/java/com/android/server/wm/WindowContainer.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index a1fbb597533f..3fe8229e2ec2 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -399,7 +399,11 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } void createSurfaceControl(boolean force) { - setSurfaceControl(makeSurface().build()); + setInitialSurfaceControlProperties(makeSurface().build()); + } + + private void setInitialSurfaceControlProperties(SurfaceControl surfaceControl) { + setSurfaceControl(surfaceControl); getPendingTransaction().show(mSurfaceControl); onSurfaceShown(getPendingTransaction()); updateSurfacePosition(); @@ -423,7 +427,16 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< // Clear the last position so the new SurfaceControl will get correct position mLastSurfacePosition.set(0, 0); - createSurfaceControl(false /* force */); + final SurfaceControl.Builder b = mWmService.makeSurfaceBuilder(null) + .setContainerLayer() + .setName(getName()); + + setInitialSurfaceControlProperties(b.build()); + + // If parent is null, the layer should be placed offscreen so reparent to null. Otherwise, + // set to the available parent. + t.reparent(mSurfaceControl, mParent == null ? null : mParent.getSurfaceControl()); + if (mLastRelativeToLayer != null) { t.setRelativeLayer(mSurfaceControl, mLastRelativeToLayer, mLastLayer); } else { |