package com.cuvent.experiences.friends.camera import androidx.camera.core.FocusMeteringAction import androidx.camera.core.SurfaceOrientedMeteringPointFactory import com.facebook.react.bridge.ReadableMap import kotlinx.coroutines.guava.await import java.util.concurrent.TimeUnit suspend fun CameraView.focus(pointMap: ReadableMap) { val cameraControl = camera?.cameraControl ?: throw CameraNotReadyError() if (!pointMap.hasKey("x") || !pointMap.hasKey("y")) { throw InvalidTypeScriptUnionError("point", pointMap.toString()) } val dpi = resources.displayMetrics.density val x = pointMap.getDouble("x") * dpi val y = pointMap.getDouble("y") * dpi val factory = SurfaceOrientedMeteringPointFactory(this.width.toFloat(), this.height.toFloat()) val point = factory.createPoint(x.toFloat(), y.toFloat()) val action = FocusMeteringAction.Builder(point, FocusMeteringAction.FLAG_AF or FocusMeteringAction.FLAG_AE) .setAutoCancelDuration(5, TimeUnit.SECONDS) // auto-reset after 5 seconds .build() cameraControl.startFocusAndMetering(action).await() }