SurfaceControlViewHost: Clone control for SurfacePackage

Otherwise the results can be quite confusing, each time we call
getSurfacePackage it returns a new SurfacePackage but after releasing
the first one all the others become invalid. This normally isn't
noticed as SurfaceControlViewHost is frequently used only in
cross process scenarios so the additional step of parcelling
can prevent this issue from occuring.

Bug: 196926363
Test: SurfaceViewSurfacePackageValidatorTest#testSurfacePackageNoFlicker
Change-Id: Id77f6daab4bb80d4d23d40d24d74b39bd694f350
This commit is contained in:
Robert Carr
2022-02-07 16:06:29 -08:00
committed by Rob Carr
parent 963dabe7fe
commit f9b5a13cd1

View File

@@ -328,7 +328,8 @@ public class SurfaceControlViewHost {
*/
public @Nullable SurfacePackage getSurfacePackage() {
if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) {
return new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection,
return new SurfacePackage(new SurfaceControl(mSurfaceControl, "getSurfacePackage"),
mAccessibilityEmbeddedConnection,
mWm.getFocusGrantToken(), mRemoteInterface);
} else {
return null;