# ProjectedDisplayController

Artifact: [androidx.xr.projected:projected](https://developer.android.com/jetpack/androidx/releases/xr-projected) [View Source](https://cs.android.com/search?q=file:androidx/xr/projected/ProjectedDisplayController.kt+class:androidx.xr.projected.ProjectedDisplayController) Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

*** ** * ** ***


```
class ProjectedDisplayController : AutoCloseable
```

<br />

*** ** * ** ***

Controller for the Projected device display.

Use `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#create(android.app.Activity)` to create an instance of this class. Use `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#close()` to clear the instance.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi class https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationMode` The PresentationMode represents how an app is currently able to present content to the user on a projected device. |
| `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi class https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags` The PresentationModeFlags represents a collection of PresentationMode values that are currently active. |

| ### Public companion functions |
|---|---|
| `suspend https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController` | `@https://developer.android.com/reference/kotlin/androidx/annotation/RequiresApi(value = 34) @https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#create(android.app.Activity)(activity: https://developer.android.com/reference/android/app/Activity.html)` Connects to the service providing features for Projected devices and returns the `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController` when the connection is established. |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#addLayoutParamsFlags(kotlin.Int)(flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Convenience function to set the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi @https://developer.android.com/reference/kotlin/androidx/annotation/RequiresApi(value = 24) https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#addPresentationModeChangedListener(java.util.concurrent.Executor,java.util.function.Consumer)( executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, listener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags> )` Adds a callback to listen for updates to the PresentationModeFlags. |
| `open https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#close()()` Disconnects from the service providing features for Projected devices. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#removeLayoutParamsFlags(kotlin.Int)(flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Convenience function to remove the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController#removePresentationModeChangedListener(java.util.function.Consumer)( listener: https://developer.android.com/reference/java/util/function/Consumer.html<https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags> )` Remove a listener to stop consuming `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags` values. |

## Public companion functions

### create

```
@RequiresApi(value = 34)
@ExperimentalProjectedApi
suspend fun create(activity: Activity): ProjectedDisplayController
```

Connects to the service providing features for Projected devices and returns the `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController` when the connection is established.

| Parameters |
|---|---|
| `activity: https://developer.android.com/reference/android/app/Activity.html` | The `https://developer.android.com/reference/android/app/Activity.html` running on a Projected device. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if the projected service is not found or binding is not permitted |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if provided Activity is not running on a Projected device. |

## Public functions

### addLayoutParamsFlags

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
@ExperimentalProjectedApi
fun addLayoutParamsFlags(flags: Int): Unit
```

Convenience function to set the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags. Flags will be cleared automatically after the app stops.

Supported flags:

- `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON`

  - Note: Keeping the device's screen on can drain the battery quickly. Ordinarily, you should let the device turn the screen off if the user is not interacting with it. If you do need to keep the screen on, do so for as short a time as possible.

If an unsupported flag is passed, this method does nothing.

### addPresentationModeChangedListener

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
@ExperimentalProjectedApi
@RequiresApi(value = 24)
fun addPresentationModeChangedListener(
    executor: Executor = Dispatchers.Main.asExecutor(),
    listener: Consumer<ProjectedDisplayController.PresentationModeFlags>
): Unit
```

Adds a callback to listen for updates to the PresentationModeFlags.

The PresentationMode represents how a content is being presented to a projected application (e.g. are visuals on). The callback will be called with the current state as soon as it is available. A listener cannot be added a second time without first being removed.

### close

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
open fun close(): Unit
```

Disconnects from the service providing features for Projected devices. Methods from the `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController` shouldn't be called after this.

This method should be called in `https://developer.android.com/reference/android/app/Activity.html#onDestroy()`.

### removeLayoutParamsFlags

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
@ExperimentalProjectedApi
fun removeLayoutParamsFlags(flags: Int): Unit
```

Convenience function to remove the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags.

Supported flags:

- `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON`

If an unsupported flag is passed, this method does nothing.

### removePresentationModeChangedListener

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
@ExperimentalProjectedApi
fun removePresentationModeChangedListener(
    listener: Consumer<ProjectedDisplayController.PresentationModeFlags>
): Unit
```

Remove a listener to stop consuming `https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags` values. If the listener has already been removed then this is a no-op.