# SurfaceControlViewHost.SurfacePackage

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# SurfacePackage

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/android/view/SurfaceControlViewHost.SurfacePackage "View this page in Java")  

```
class SurfacePackage : Parcelable
```

|---|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| [kotlin.Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)                                                                           ||
| ↳ | [android.view.SurfaceControlViewHost.SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#) |

Package encapsulating a Surface hierarchy which contains interactive view elements. It's expected to get this object from[SurfaceControlViewHost.getSurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost#getSurfacePackage())afterwards it can be embedded within a SurfaceView by calling[SurfaceView.setChildSurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceView#setChildSurfacePackage(android.view.SurfaceControlViewHost.SurfacePackage)). Note that each[SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#)must be released by calling[SurfacePackage.release](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#release()). However, if you use the recommended flow, the framework will automatically handle the lifetime for you. 1. When sending the package to the remote process, return it from an AIDL method or manually use FLAG_WRITE_RETURN_VALUE in writeToParcel. This will automatically release the package in the local process. 2. In the remote process, consume the package using SurfaceView. This way the SurfaceView will take over the lifetime and call[SurfacePackage.release](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#release())for the user. One final note: The[SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#)lifetime is totally de-coupled from the lifetime of the underlying[SurfaceControlViewHost](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost). Regardless of the lifetime of the package the user should still call[SurfaceControlViewHost.release](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost#release())when finished.

## Summary

| Inherited constants ||
|---|---|
| From class[Parcelable](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#) |----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) | [CONTENTS_FILE_DESCRIPTOR](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#CONTENTS_FILE_DESCRIPTOR:kotlin.Int) <br /> Descriptor bit used with[describeContents()](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#describeContents()): indicates that the Parcelable object's flattened representation includes a file descriptor. <br />                                                                                                                                                                                                        | | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) | [PARCELABLE_WRITE_RETURN_VALUE](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#PARCELABLE_WRITE_RETURN_VALUE:kotlin.Int) <br /> Flag for use with[writeToParcel](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#writeToParcel(android.os.Parcel,%20kotlin.Int)): the object being written is a return value, that is the result of a function such as "`Parcelable someFunction()`", "`void someFunction(out Parcelable)`", or "`void someFunction(inout Parcelable)`". Some implementations may want to release resources at this point. <br /> | ||

|                                                                                                                                                                                                  Public constructors                                                                                                                                                                                                  ||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| [SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#SurfacePackage(android.view.SurfaceControlViewHost.SurfacePackage))`(`other:` `[SurfaceControlViewHost.SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#)`)` Constructs a copy of`SurfacePackage`with an independent lifetime. |

|                                                                                                                                                                                                                                              Public methods                                                                                                                                                                                                                                               ||
|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)                                    | [describeContents](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#describeContents())`()` <br />                                                                                                                                                                                                                                        |
| [InputTransferToken](https://developer.android.com/reference/kotlin/android/window/InputTransferToken.html#)? | [getInputTransferToken](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#getInputTransferToken())`()` Gets an[InputTransferToken](https://developer.android.com/reference/kotlin/android/window/InputTransferToken.html#)which can be used to request focus on the embedded surface or to transfer touch gesture to the embedded surface. |
| [SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl)                  | [getSurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#getSurfaceControl())`()` Returns the[android.view.SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl)associated with this SurfacePackage for cases where more control is required.                                           |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                  | [notifyConfigurationChanged](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#notifyConfigurationChanged(android.content.res.Configuration))`(`c:` `[Configuration](https://developer.android.com/reference/kotlin/android/content/res/Configuration.html#)`)` Forward a configuration to the remote SurfaceControlViewHost.              |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                  | [notifyDetachedFromWindow](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#notifyDetachedFromWindow())`()` Tear down the remote SurfaceControlViewHost and cause View#onDetachedFromWindow to be invoked on the other side.                                                                                                              |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                  | [release](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#release())`()` Release the[SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl)associated with this package.                                                                                                                            |
| [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)                              | [toString](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#toString())`()` <br />                                                                                                                                                                                                                                                        |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                  | [writeToParcel](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#writeToParcel(android.os.Parcel,%20kotlin.Int))`(`out:` `[Parcel](https://developer.android.com/reference/kotlin/android/os/Parcel.html#)`, `flags:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` Flatten this object in to a Parcel.  |

|                                                                                                                                                                                                        Properties                                                                                                                                                                                                         ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| static[Parcelable.Creator](https://developer.android.com/reference/kotlin/android/os/Parcelable.Creator.html#)\<[SurfaceControlViewHost.SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#)!\> | [CREATOR](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#CREATOR:android.os.Parcelable.Creator) <br /> |

## Public constructors

### SurfacePackage

Added in[API level 31](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
SurfacePackage(other: SurfaceControlViewHost.SurfacePackage)
```

Constructs a copy of`SurfacePackage`with an independent lifetime. The caller can use this to create an independent copy in situations where ownership of the`SurfacePackage`would be transferred elsewhere, such as attaching to a`SurfaceView`, returning as`Binder`result value, etc. The caller is responsible for releasing this copy when its done.

|                                                                                                      Parameters                                                                                                       ||
|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `other` | [SurfaceControlViewHost.SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#):`SurfacePackage`to create a copy of. This value cannot be`null`. |

## Public methods

### describeContents

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun describeContents(): Int
```

|                                                                                                                                                                               Return                                                                                                                                                                               ||
|----------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html) | a bitmask indicating the set of special object types marshaled by this Parcelable object instance. Value is either`0`or[android.os.Parcelable#CONTENTS_FILE_DESCRIPTOR](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#CONTENTS_FILE_DESCRIPTOR:kotlin.Int) |

### getInputTransferToken

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun getInputTransferToken(): InputTransferToken?
```

Gets an[InputTransferToken](https://developer.android.com/reference/kotlin/android/window/InputTransferToken.html#)which can be used to request focus on the embedded surface or to transfer touch gesture to the embedded surface.

|                                                                                                                                                                     Return                                                                                                                                                                     ||
|---------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InputTransferToken](https://developer.android.com/reference/kotlin/android/window/InputTransferToken.html#)? | the InputTransferToken associated with[SurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceControlViewHost.SurfacePackage#)or`null`if the embedded hasn't set up its view or doesn't have input. |

**See Also**

- [android.view.WindowManager#transferTouchGesture(InputTransferToken, InputTransferToken)](https://developer.android.com/reference/kotlin/android/view/WindowManager#transferTouchGesture(android.window.InputTransferToken,%20android.window.InputTransferToken))  

### getSurfaceControl

Added in[API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun getSurfaceControl(): SurfaceControl
```

Returns the[android.view.SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl)associated with this SurfacePackage for cases where more control is required.

|                                                                                                           Return                                                                                                           ||
|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| [SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl) | the SurfaceControl associated with this SurfacePackage and its containing SurfaceControlViewHost This value cannot be`null`. |

### notifyConfigurationChanged

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun notifyConfigurationChanged(c: Configuration): Unit
```

Forward a configuration to the remote SurfaceControlViewHost. This will cause View#onConfigurationChanged to be invoked on the remote end. This does not automatically cause the SurfaceControlViewHost to be resized. The root View of a SurfaceControlViewHost is more akin to a PopupWindow in that the size is user specified independent of configuration width and height. In order to receive the configuration change via[View.onConfigurationChanged](https://developer.android.com/reference/kotlin/android/view/View#onConfigurationChanged(android.content.res.Configuration)), the context used with the SurfaceControlViewHost and it's embedded view hierarchy must be a WindowContext obtained from android.content.Context#createWindowContext. If a regular service context is used, then your embedded view hierarchy will always perceive the global configuration.

|                                                                              Parameters                                                                               ||
|-----|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `c` | [Configuration](https://developer.android.com/reference/kotlin/android/content/res/Configuration.html#):The configuration to forward This value cannot be`null`. |

### notifyDetachedFromWindow

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun notifyDetachedFromWindow(): Unit
```

Tear down the remote SurfaceControlViewHost and cause View#onDetachedFromWindow to be invoked on the other side.  

### release

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun release(): Unit
```

Release the[SurfaceControl](https://developer.android.com/reference/kotlin/android/view/SurfaceControl)associated with this package. It's not necessary to call this if you pass the package to[SurfaceView.setChildSurfacePackage](https://developer.android.com/reference/kotlin/android/view/SurfaceView#setChildSurfacePackage(android.view.SurfaceControlViewHost.SurfacePackage))as[SurfaceView](https://developer.android.com/reference/kotlin/android/view/SurfaceView)will take ownership in that case.  

### toString

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun toString(): String
```

|                                                          Return                                                          ||
|----------------------------------------------------------------------------------|----------------------------------------|
| [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) | a string representation of the object. |

### writeToParcel

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun writeToParcel(
    out: Parcel, 
    flags: Int
): Unit
```

Flatten this object in to a Parcel.

|                                                                                                                                                                                                                                                                                     Parameters                                                                                                                                                                                                                                                                                     ||
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `dest`  | The Parcel in which the object should be written. This value cannot be`null`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `flags` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html):Additional flags about how the object should be written. May be 0 or[PARCELABLE_WRITE_RETURN_VALUE](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#PARCELABLE_WRITE_RETURN_VALUE:kotlin.Int). Value is either`0`or a combination of[android.os.Parcelable#PARCELABLE_WRITE_RETURN_VALUE](https://developer.android.com/reference/kotlin/android/os/Parcelable.html#PARCELABLE_WRITE_RETURN_VALUE:kotlin.Int), and android.os.Parcelable.PARCELABLE_ELIDE_DUPLICATES |
| `out`   | [Parcel](https://developer.android.com/reference/kotlin/android/os/Parcel.html#):This value cannot be`null`.                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

## Properties

### CREATOR

Added in[API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
static val CREATOR: Parcelable.Creator<SurfaceControlViewHost.SurfacePackage!>
```