Add CameraPreviewManager and CameraPreviewView for camera functionality

This commit is contained in:
2025-12-22 23:47:58 +05:30
parent 37f1682ade
commit a8e95400cc
3 changed files with 121 additions and 62 deletions

View File

@@ -0,0 +1,39 @@
package com.lynkeduppro.camera
import com.facebook.react.uimanager.SimpleViewManager
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.annotations.ReactProp
import com.facebook.react.bridge.LifecycleEventListener
class CameraPreviewManager :
SimpleViewManager<CameraPreviewView>(),
LifecycleEventListener {
private var previewView: CameraPreviewView? = null
override fun getName(): String = "CameraPreviewView"
override fun createViewInstance(reactContext: ThemedReactContext): CameraPreviewView {
previewView = CameraPreviewView(reactContext)
reactContext.addLifecycleEventListener(this)
return previewView!!
}
@ReactProp(name = "active")
fun setActive(view: CameraPreviewView, active: Boolean) {
if (active && reactContext is androidx.lifecycle.LifecycleOwner) {
view.startCamera(reactContext as androidx.lifecycle.LifecycleOwner)
}
}
override fun onHostResume() {
previewView?.let {
if (reactContext is androidx.lifecycle.LifecycleOwner) {
it.startCamera(reactContext as androidx.lifecycle.LifecycleOwner)
}
}
}
override fun onHostPause() {}
override fun onHostDestroy() {}
}

View File

@@ -0,0 +1,33 @@
package com.lynkeduppro.camera
import android.content.Context
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwner
class CameraPreviewView(context: Context) : PreviewView(context) {
fun startCamera(lifecycleOwner: LifecycleOwner) {
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(surfaceProvider)
}
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview
)
}, ContextCompat.getMainExecutor(context))
}
}