Add Android
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user