# 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)

*** ** * ** ***


```
public final class ProjectedDisplayController implements AutoCloseable
```

<br />

*** ** * ** ***

Controller for the Projected device display.

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

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi public final class https://developer.android.com/reference/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/androidx/xr/projected/experimental/ExperimentalProjectedApi public final class https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags` The PresentationModeFlags represents a collection of PresentationMode values that are currently active. |

| ### Public methods |
|---|---|
| `final void` | `@https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#addLayoutParamsFlags(kotlin.Int)(int flags)` Convenience function to set the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags. |
| `final void` | `@https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi @https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 24) https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#addPresentationModeChangedListener(java.util.concurrent.Executor,java.util.function.Consumer)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/function/Consumer.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags> listener )` Adds a callback to listen for updates to the PresentationModeFlags. |
| `void` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#close()()` Disconnects from the service providing features for Projected devices. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 34) @https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#create(android.app.Activity)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Activity.html activity)` Connects to the service providing features for Projected devices and returns the `https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController` when the connection is established. |
| `final void` | `@https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#removeLayoutParamsFlags(kotlin.Int)(int flags)` Convenience function to remove the flag bits as as per the `https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html` flags. |
| `final void` | `@https://developer.android.com/reference/androidx/xr/projected/experimental/ExperimentalProjectedApi https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController#removePresentationModeChangedListener(java.util.function.Consumer)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/function/Consumer.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags> listener )` Remove a listener to stop consuming `https://developer.android.com/reference/androidx/xr/projected/ProjectedDisplayController.PresentationModeFlags` values. |

## Public methods

### addLayoutParamsFlags

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

```
@ExperimentalProjectedApi
public final void addLayoutParamsFlags(int flags)
```

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)
public final void addPresentationModeChangedListener(
    @NonNull Executor executor,
    @NonNull Consumer<@NonNull ProjectedDisplayController.PresentationModeFlags> listener
)
```

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)

```
public void close()
```

Disconnects from the service providing features for Projected devices. Methods from the `https://developer.android.com/reference/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()`.

### create

```
@RequiresApi(value = 34)
@ExperimentalProjectedApi
public static final @NonNull ProjectedDisplayController create(@NonNull Activity activity)
```

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

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/app/Activity.html activity` | 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. |

### removeLayoutParamsFlags

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

```
@ExperimentalProjectedApi
public final void removeLayoutParamsFlags(int flags)
```

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
public final void removePresentationModeChangedListener(
    @NonNull Consumer<@NonNull ProjectedDisplayController.PresentationModeFlags> listener
)
```

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