diff --git a/core/api/current.txt b/core/api/current.txt index 1e1b94d662393..af0a739bffaaf 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -48100,6 +48100,7 @@ package android.view { } public static final class SurfaceControlViewHost.SurfacePackage implements android.os.Parcelable { + ctor public SurfaceControlViewHost.SurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage); method public int describeContents(); method public void release(); method public void writeToParcel(@NonNull android.os.Parcel, int); diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java index 870fd8cc4f5d8..11b161ad3cb26 100644 --- a/core/java/android/view/SurfaceControlViewHost.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -79,6 +79,26 @@ public class SurfaceControlViewHost { mInputToken = inputToken; } + /** + * Constructs a copy of {@code SurfacePackage} with an independent lifetime. + * + * The caller can use this to create an independent copy in situations where ownership of + * the {@code SurfacePackage} would be transferred elsewhere, such as attaching to a + * {@code SurfaceView}, returning as {@code Binder} result value, etc. The caller is + * responsible for releasing this copy when its done. + * + * @param other {@code SurfacePackage} to create a copy of. + */ + public SurfacePackage(@NonNull SurfacePackage other) { + SurfaceControl otherSurfaceControl = other.mSurfaceControl; + if (otherSurfaceControl != null && otherSurfaceControl.isValid()) { + mSurfaceControl = new SurfaceControl(); + mSurfaceControl.copyFrom(otherSurfaceControl, "SurfacePackage"); + } + mAccessibilityEmbeddedConnection = other.mAccessibilityEmbeddedConnection; + mInputToken = other.mInputToken; + } + private SurfacePackage(Parcel in) { mSurfaceControl = new SurfaceControl(); mSurfaceControl.readFromParcel(in);