# Viewfinder

## Functions summary

|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/Viewfinder.composable#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)( surfaceRequest: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ViewfinderSurfaceRequest, modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier, transformationInfo: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/TransformationInfo, coordinateTransformer: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/MutableCoordinateTransformer?, alignment: https://developer.android.com/reference/kotlin/androidx/compose/ui/Alignment, contentScale: https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/ContentScale, onInit: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/ViewfinderInitScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Displays a media stream with the given transformations for crop and rotation while maintaining proper scaling. |

## Functions

### Viewfinder

Artifact: [androidx.camera.viewfinder:viewfinder-compose](https://developer.android.com/jetpack/androidx/releases/camera-viewfinder) [View Source](https://cs.android.com/search?q=file:androidx/camera/viewfinder/compose/Viewfinder.kt+function:Viewfinder) Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/camera-viewfinder#1.5.0)

```
@Composable
fun Viewfinder(
    surfaceRequest: ViewfinderSurfaceRequest,
    modifier: Modifier = Modifier,
    transformationInfo: TransformationInfo = DEFAULT,
    coordinateTransformer: MutableCoordinateTransformer? = null,
    alignment: Alignment = Alignment.Center,
    contentScale: ContentScale = ContentScale.Crop,
    onInit: ViewfinderInitScope.() -> Unit
): Unit
```

Displays a media stream with the given transformations for crop and rotation while maintaining proper scaling.

A `https://developer.android.com/reference/android/view/Surface.html` for the given `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ViewfinderSurfaceRequest` can be retrieved from the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ViewfinderSurfaceSessionScope` of the callback registered via `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/ViewfinderInitScope#onSurfaceSession(kotlin.coroutines.SuspendFunction1)` in `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)`.

This has two underlying implementations based on `https://developer.android.com/reference/kotlin/androidx/compose/foundation/AndroidEmbeddedExternalSurface.composable#AndroidEmbeddedExternalSurface(androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.unit.IntSize,androidx.compose.ui.graphics.Matrix,kotlin.Function1)` for `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode#EMBEDDED` or on `https://developer.android.com/reference/kotlin/androidx/compose/foundation/AndroidExternalSurface.composable#AndroidExternalSurface(androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.unit.IntSize,androidx.compose.foundation.AndroidExternalSurfaceZOrder,kotlin.Boolean,kotlin.Function1)` for `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode#EXTERNAL`. These can be set by the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode` argument in the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` constructor. If `implementationMode` is `null`, a default is chosen based on device compatibility. This default value, which can be retrieved from `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ViewfinderDefaults#implementationMode()`, will be `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode#EXTERNAL` by default, switching to `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode#EMBEDDED` on API levels 24 and below, or on devices with known compatibility issues with the `EXTERNAL` mode.

The `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` lambda, and the callback registered with `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/ViewfinderInitScope#onSurfaceSession(kotlin.coroutines.SuspendFunction1)`, are always called from the main thread. `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` will be called every time a new `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` is provided, or if the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ImplementationMode` changes.

| Parameters |
|---|---|
| `surfaceRequest: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/ViewfinderSurfaceRequest` | Details about the surface being requested |
| `modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier = Modifier` | Modifier to be applied to the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/Viewfinder.composable#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` |
| `transformationInfo: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/core/TransformationInfo = DEFAULT` | Specifies the required transformations for the media being displayed. |
| `coordinateTransformer: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/MutableCoordinateTransformer? = null` | Coordinate transformer that can be used to convert Compose space coordinates such as touch coordinates to surface space coordinates. When the Viewfinder is displaying content from the camera, this transformer can be used to translate touch events into camera sensor coordinates for focus and metering actions. |
| `alignment: https://developer.android.com/reference/kotlin/androidx/compose/ui/Alignment = Alignment.Center` | Optional alignment parameter used to place the `https://developer.android.com/reference/android/view/Surface.html` in the given bounds of the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/Viewfinder.composable#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)`. Defaults to `https://developer.android.com/reference/kotlin/androidx/compose/ui/Alignment#Center()`. |
| `contentScale: https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/ContentScale = ContentScale.Crop` | Optional scale parameter used to determine the aspect ratio scaling to be used to fit the `https://developer.android.com/reference/android/view/Surface.html` in the bounds of the `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/Viewfinder.composable#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)`. Defaults to `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/ContentScale#Crop()`. |
| `onInit: https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/ViewfinderInitScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | Lambda invoked on first composition and any time a new `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/package-summary#Viewfinder(androidx.camera.viewfinder.core.ViewfinderSurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.TransformationInfo,androidx.camera.viewfinder.compose.MutableCoordinateTransformer,androidx.compose.ui.Alignment,androidx.compose.ui.layout.ContentScale,kotlin.Function1)` is provided. This lambda can be used to declare a `https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/ViewfinderInitScope#onSurfaceSession(kotlin.coroutines.SuspendFunction1)` callback that will be called each time a new `https://developer.android.com/reference/android/view/Surface.html` is provided by the viewfinder. TODO(b/322420487): Add a sample with `@sample` |