Check for null parent when migrating SurfaceControl
When migrating the SurfaceControl, the WC parent can be null. In this case, we create a new SurfaceControl, but set it's parent to null so the layer is still available, but will be offscreen. This way if the parent becomes non null, the SC can get re-parented to the new parent. Test: Split screen with removing secondary app Bug: 153579514 Change-Id: Id0e2f2d5e5b7448c3cafd5b90120777f5175153c
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user