package com.biopassid.fingerprintsdkreactnative import android.graphics.Bitmap import android.graphics.Rect import android.util.Log import br.com.biopassid.fingerprintsdk.Fingerprint import br.com.biopassid.fingerprintsdk.engine.FingerprintCaptureListener import br.com.biopassid.fingerprintsdk.engine.FingerprintCaptureState import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.bridge.ReactMethod import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableMap import com.facebook.react.modules.core.DeviceEventManagerModule class FingerprintSdkReactNativeModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { private var listenerCount = 0 override fun getName(): String { return NAME } @ReactMethod fun addListener(eventName: String) { if (listenerCount == 0) { // Set up any upstream listeners or background tasks as necessary } listenerCount += 1 } @ReactMethod fun removeListeners(count: Int) { listenerCount -= count if (listenerCount == 0) { // Remove upstream listeners, stop unnecessary background tasks } } @ReactMethod fun takeFingerprint(fingerprintConfig: ReadableMap, promise: Promise) { try { val config = Utils.mapToBioPassIDFingerprintConfig(reactApplicationContext, fingerprintConfig) val listener = object : FingerprintCaptureListener { override fun onFingerCapture(images: List, error: String?) { val nativeMap = Utils.onFingerCaptureEventToNativeMap(images, error) sendEvent( reactApplicationContext, "fingerprint-sdk-react-native/onFingerCapture", nativeMap ) } override fun onStatusChanged(state: FingerprintCaptureState) { val nativeMap = Utils.onStatusChangedEventToNativeMap(state) sendEvent( reactApplicationContext, "fingerprint-sdk-react-native/onStatusChanged", nativeMap ) } override fun onFingerDetected(fingerRects: List) { val nativeMap = Utils.onFingerDetectedEventToNativeMap(fingerRects) sendEvent( reactApplicationContext, "fingerprint-sdk-react-native/onFingerDetected", nativeMap ) } } Fingerprint.takeFingerprint(reactApplicationContext.currentActivity, config, listener) promise.resolve(true) } catch (e: Exception) { Log.e(TAG, e.message.toString()) promise.reject("Error calling Fingerprint SDK", e) } } private fun sendEvent(reactContext: ReactContext, eventName: String, params: WritableMap) { reactContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) .emit(eventName, params) } companion object { const val NAME = "FingerprintSdkReactNative" private val TAG = FingerprintSdkReactNativeModule::class.java.simpleName } }