expo-camera 13.8.0 → 13.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/android/build.gradle +18 -5
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/expo/modules/camera/CameraViewModule.kt +1 -1
- package/android/src/main/java/expo/modules/camera/Options.kt +2 -2
- package/android/src/main/java/expo/modules/camera/next/CameraExceptions.kt +9 -0
- package/android/src/main/java/expo/modules/camera/next/CameraViewHelper.kt +40 -0
- package/android/src/main/java/expo/modules/camera/next/CameraViewNextModule.kt +158 -0
- package/android/src/main/java/expo/modules/camera/next/ExpoCameraView.kt +479 -0
- package/android/src/main/java/expo/modules/camera/next/Options.kt +22 -0
- package/android/src/main/java/expo/modules/camera/next/analyzers/BarcodeAnalyzer.kt +77 -0
- package/android/src/main/java/expo/modules/camera/next/records/CameraRecords.kt +71 -0
- package/android/src/main/java/expo/modules/camera/next/tasks/PictureSavedDelegate.kt +7 -0
- package/android/src/main/java/expo/modules/camera/next/tasks/ResolveTakenPicture.kt +248 -0
- package/android/src/main/java/expo/modules/camera/next/utils/FileSystemUtils.kt +22 -0
- package/android/src/main/java/expo/modules/camera/next/utils/ImageDimensions.kt +16 -0
- package/android/src/main/java/expo/modules/camera/utils/FileSystemUtils.kt +8 -0
- package/build/Camera.js +2 -2
- package/build/Camera.js.map +1 -1
- package/build/{ExponentCamera.d.ts → ExpoCamera.d.ts} +1 -1
- package/build/ExpoCamera.d.ts.map +1 -0
- package/build/ExpoCamera.js +4 -0
- package/build/ExpoCamera.js.map +1 -0
- package/build/ExponentCamera.web.js +5 -3
- package/build/ExponentCamera.web.js.map +1 -1
- package/build/ExponentCameraManager.d.ts.map +1 -1
- package/build/ExponentCameraManager.js +1 -1
- package/build/ExponentCameraManager.js.map +1 -1
- package/build/next/Camera.d.ts +139 -0
- package/build/next/Camera.d.ts.map +1 -0
- package/build/next/Camera.js +256 -0
- package/build/next/Camera.js.map +1 -0
- package/build/next/Camera.types.d.ts +396 -0
- package/build/next/Camera.types.d.ts.map +1 -0
- package/build/next/Camera.types.js +15 -0
- package/build/next/Camera.types.js.map +1 -0
- package/build/next/ExpoCamera.d.ts +5 -0
- package/build/next/ExpoCamera.d.ts.map +1 -0
- package/build/next/ExpoCamera.js +4 -0
- package/build/next/ExpoCamera.js.map +1 -0
- package/build/next/ExpoCamera.web.d.ts +13 -0
- package/build/next/ExpoCamera.web.d.ts.map +1 -0
- package/build/next/ExpoCamera.web.js +106 -0
- package/build/next/ExpoCamera.web.js.map +1 -0
- package/build/next/ExpoCameraManager.d.ts +3 -0
- package/build/next/ExpoCameraManager.d.ts.map +1 -0
- package/build/next/ExpoCameraManager.js +3 -0
- package/build/next/ExpoCameraManager.js.map +1 -0
- package/build/next/ExpoCameraManager.web.d.ts +42 -0
- package/build/next/ExpoCameraManager.web.d.ts.map +1 -0
- package/build/next/ExpoCameraManager.web.js +216 -0
- package/build/next/ExpoCameraManager.web.js.map +1 -0
- package/build/next/index.d.ts +4 -0
- package/build/next/index.d.ts.map +1 -0
- package/build/next/index.js +4 -0
- package/build/next/index.js.map +1 -0
- package/build/next/utils/props.d.ts +8 -0
- package/build/next/utils/props.d.ts.map +1 -0
- package/build/next/utils/props.js +33 -0
- package/build/next/utils/props.js.map +1 -0
- package/expo-module.config.json +5 -2
- package/ios/CameraEnums.swift +98 -0
- package/ios/CameraExceptions.swift +55 -0
- package/ios/CameraPermissionsRequester.swift +125 -0
- package/ios/CameraRecordingOptions.swift +57 -0
- package/ios/CameraView.swift +982 -0
- package/ios/{EXCamera/CameraViewModule.swift → CameraViewModule.swift} +98 -90
- package/ios/CameraViewNextModule.swift +231 -0
- package/ios/{EXCamera.podspec → ExpoCamera.podspec} +7 -4
- package/ios/ExpoCameraUtils.swift +175 -0
- package/ios/Next/BarcodeRecord.swift +75 -0
- package/ios/Next/BarcodeScanner.swift +182 -0
- package/ios/Next/BarcodeScannerUtils.swift +117 -0
- package/ios/Next/CameraEnumsNext.swift +29 -0
- package/ios/Next/CameraRecordingOptionsNext.swift +54 -0
- package/ios/Next/CameraViewNext.swift +777 -0
- package/ios/Next/ExpoCameraUtilsNext.swift +175 -0
- package/ios/Next/PreviewView.swift +24 -0
- package/ios/Next/Scanner+Delegates.swift +52 -0
- package/ios/Next/TakePictureOptionsNext.swift +23 -0
- package/ios/Next/VisionScannerDelegate.swift +25 -0
- package/next.d.ts +1 -0
- package/next.js +1 -0
- package/package.json +2 -2
- package/src/Camera.tsx +2 -2
- package/src/{ExponentCamera.ts → ExpoCamera.ts} +1 -1
- package/src/ExponentCamera.web.tsx +4 -3
- package/src/ExponentCameraManager.ts +1 -1
- package/src/next/Camera.tsx +349 -0
- package/src/next/Camera.types.ts +447 -0
- package/src/next/ExpoCamera.ts +9 -0
- package/src/next/ExpoCamera.web.tsx +164 -0
- package/src/next/ExpoCameraManager.ts +3 -0
- package/src/next/ExpoCameraManager.web.ts +239 -0
- package/src/next/index.ts +9 -0
- package/src/next/utils/props.ts +45 -0
- package/build/ExponentCamera.d.ts.map +0 -1
- package/build/ExponentCamera.js +0 -4
- package/build/ExponentCamera.js.map +0 -1
- package/ios/EXCamera/EXCamera.h +0 -112
- package/ios/EXCamera/EXCamera.m +0 -1046
- package/ios/EXCamera/EXCameraCameraPermissionRequester.h +0 -7
- package/ios/EXCamera/EXCameraCameraPermissionRequester.m +0 -54
- package/ios/EXCamera/EXCameraMicrophonePermissionRequester.h +0 -7
- package/ios/EXCamera/EXCameraMicrophonePermissionRequester.m +0 -54
- package/ios/EXCamera/EXCameraPermissionRequester.h +0 -7
- package/ios/EXCamera/EXCameraPermissionRequester.m +0 -54
- package/ios/EXCamera/Utilities/EXCameraUtils.h +0 -35
- package/ios/EXCamera/Utilities/EXCameraUtils.m +0 -228
- /package/ios/{EXCamera/TakePictureOptions.swift → TakePictureOptions.swift} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,25 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 13.9.0 — 2023-11-14
|
|
14
|
+
|
|
15
|
+
### 🛠 Breaking changes
|
|
16
|
+
|
|
17
|
+
- Bumped iOS deployment target to 13.4. ([#25063](https://github.com/expo/expo/pull/25063) by [@gabrieldonadel](https://github.com/gabrieldonadel))
|
|
18
|
+
- On `Android` bump `compileSdkVersion` and `targetSdkVersion` to `34`. ([#24708](https://github.com/expo/expo/pull/24708) by [@alanjhughes](https://github.com/alanjhughes))
|
|
19
|
+
|
|
20
|
+
### 🎉 New features
|
|
21
|
+
|
|
22
|
+
- [iOS] Rewrote Objective-C classes to Swift. ([#22604](https://github.com/expo/expo/pull/22604) by [@alanjhughes](https://github.com/alanjhughes))
|
|
23
|
+
|
|
24
|
+
### 🐛 Bug fixes
|
|
25
|
+
|
|
26
|
+
- [iOS] Fix a regression from ([#22604](https://github.com/expo/expo/pull/22604) that prevented the barcode scanner from starting.([#25053](https://github.com/expo/expo/pull/25053) by [@alanjhughes](https://github.com/alanjhughes))
|
|
27
|
+
|
|
28
|
+
### 💡 Others
|
|
29
|
+
|
|
30
|
+
- Use `pointerEvent` style instead of prop. ([#24931](https://github.com/expo/expo/pull/24931) by [@EvanBacon](https://github.com/EvanBacon))
|
|
31
|
+
|
|
13
32
|
## 13.8.0 — 2023-10-17
|
|
14
33
|
|
|
15
34
|
### 🛠 Breaking changes
|
package/android/build.gradle
CHANGED
|
@@ -3,7 +3,7 @@ apply plugin: 'kotlin-android'
|
|
|
3
3
|
apply plugin: 'maven-publish'
|
|
4
4
|
|
|
5
5
|
group = 'host.exp.exponent'
|
|
6
|
-
version = '13.
|
|
6
|
+
version = '13.9.0'
|
|
7
7
|
|
|
8
8
|
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
|
9
9
|
if (expoModulesCorePlugin.exists()) {
|
|
@@ -61,11 +61,11 @@ if (!safeExtGet("expoProvidesDefaultConfig", false)) {
|
|
|
61
61
|
android {
|
|
62
62
|
// Remove this if and it's contents, when support for SDK49 is dropped
|
|
63
63
|
if (!safeExtGet("expoProvidesDefaultConfig", false)) {
|
|
64
|
-
compileSdkVersion safeExtGet("compileSdkVersion",
|
|
64
|
+
compileSdkVersion safeExtGet("compileSdkVersion", 34)
|
|
65
65
|
|
|
66
66
|
defaultConfig {
|
|
67
67
|
minSdkVersion safeExtGet("minSdkVersion", 23)
|
|
68
|
-
targetSdkVersion safeExtGet("targetSdkVersion",
|
|
68
|
+
targetSdkVersion safeExtGet("targetSdkVersion", 34)
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
publishing {
|
|
@@ -94,7 +94,7 @@ android {
|
|
|
94
94
|
namespace "expo.modules.camera"
|
|
95
95
|
defaultConfig {
|
|
96
96
|
versionCode 32
|
|
97
|
-
versionName "13.
|
|
97
|
+
versionName "13.9.0"
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -111,7 +111,20 @@ dependencies {
|
|
|
111
111
|
implementation project(':expo-modules-core')
|
|
112
112
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
|
|
113
113
|
}
|
|
114
|
+
def camerax_version = "1.3.0"
|
|
115
|
+
|
|
116
|
+
api "androidx.exifinterface:exifinterface:1.3.6"
|
|
117
|
+
api 'com.google.android:cameraview:1.0.0'
|
|
118
|
+
|
|
119
|
+
implementation "androidx.camera:camera-core:${camerax_version}"
|
|
120
|
+
implementation "androidx.camera:camera-camera2:${camerax_version}"
|
|
121
|
+
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
|
|
122
|
+
implementation "androidx.camera:camera-video:${camerax_version}"
|
|
123
|
+
|
|
124
|
+
implementation "androidx.camera:camera-view:${camerax_version}"
|
|
125
|
+
implementation "androidx.camera:camera-extensions:${camerax_version}"
|
|
126
|
+
implementation "com.google.mlkit:barcode-scanning:17.2.0"
|
|
127
|
+
implementation 'androidx.camera:camera-mlkit-vision:1.4.0-alpha02'
|
|
114
128
|
|
|
115
|
-
api "androidx.exifinterface:exifinterface:1.0.0"
|
|
116
129
|
api 'com.google.android:cameraview:1.0.0'
|
|
117
130
|
}
|
|
@@ -16,8 +16,8 @@ class PictureOptions : Record {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
class RecordingOptions : Record {
|
|
19
|
-
@Field val maxDuration: Int =
|
|
20
|
-
@Field val maxFileSize: Int =
|
|
19
|
+
@Field val maxDuration: Int = 0
|
|
20
|
+
@Field val maxFileSize: Int = 0
|
|
21
21
|
@Field val quality: Int = CamcorderProfile.QUALITY_HIGH
|
|
22
22
|
@Field val mute: Boolean = false
|
|
23
23
|
@Field val videoBitrate: Int? = null
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package expo.modules.camera.next
|
|
2
|
+
|
|
3
|
+
import expo.modules.kotlin.exception.CodedException
|
|
4
|
+
|
|
5
|
+
class CameraExceptions {
|
|
6
|
+
class ImageCaptureFailed : CodedException(message = "Failed to capture image")
|
|
7
|
+
|
|
8
|
+
class VideoRecordingFailed(cause: String?) : CodedException("Video recording failed: $cause")
|
|
9
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package expo.modules.camera.next
|
|
2
|
+
|
|
3
|
+
import android.graphics.Bitmap
|
|
4
|
+
import android.graphics.Canvas
|
|
5
|
+
import android.graphics.Color
|
|
6
|
+
import android.graphics.Paint
|
|
7
|
+
import expo.modules.camera.next.records.CameraType
|
|
8
|
+
import java.io.ByteArrayOutputStream
|
|
9
|
+
import java.text.SimpleDateFormat
|
|
10
|
+
import java.util.Calendar
|
|
11
|
+
import java.util.Locale
|
|
12
|
+
|
|
13
|
+
object CameraViewHelper {
|
|
14
|
+
// Utilities
|
|
15
|
+
@JvmStatic
|
|
16
|
+
fun getCorrectCameraRotation(rotation: Int, facing: CameraType) =
|
|
17
|
+
if (facing == CameraType.FRONT) (rotation - 90 + 360) % 360
|
|
18
|
+
else (-rotation + 90 + 360) % 360
|
|
19
|
+
|
|
20
|
+
fun generateSimulatorPhoto(width: Int, height: Int): ByteArray {
|
|
21
|
+
val fakePhotoBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
|
22
|
+
val canvas = Canvas(fakePhotoBitmap)
|
|
23
|
+
val background = Paint().apply {
|
|
24
|
+
color = Color.BLACK
|
|
25
|
+
}
|
|
26
|
+
canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), background)
|
|
27
|
+
val textPaint = Paint().apply {
|
|
28
|
+
color = Color.YELLOW
|
|
29
|
+
textSize = 35f
|
|
30
|
+
}
|
|
31
|
+
val calendar = Calendar.getInstance()
|
|
32
|
+
val simpleDateFormat = SimpleDateFormat("dd.MM.yy HH:mm:ss", Locale.US)
|
|
33
|
+
canvas.drawText(simpleDateFormat.format(calendar.time), width * 0.1f, height * 0.9f, textPaint)
|
|
34
|
+
|
|
35
|
+
val stream = ByteArrayOutputStream()
|
|
36
|
+
fakePhotoBitmap.compress(Bitmap.CompressFormat.PNG, 90, stream)
|
|
37
|
+
val fakePhotoByteArray = stream.toByteArray()
|
|
38
|
+
return fakePhotoByteArray
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
package expo.modules.camera.next
|
|
2
|
+
|
|
3
|
+
import android.Manifest
|
|
4
|
+
import android.util.Log
|
|
5
|
+
import expo.modules.camera.next.records.BarCodeSettings
|
|
6
|
+
import expo.modules.camera.next.records.CameraMode
|
|
7
|
+
import expo.modules.camera.next.records.CameraType
|
|
8
|
+
import expo.modules.camera.next.records.FlashMode
|
|
9
|
+
import expo.modules.camera.next.tasks.ResolveTakenPicture
|
|
10
|
+
import expo.modules.core.errors.ModuleDestroyedException
|
|
11
|
+
import expo.modules.core.utilities.EmulatorUtilities
|
|
12
|
+
import expo.modules.interfaces.permissions.Permissions
|
|
13
|
+
import expo.modules.kotlin.Promise
|
|
14
|
+
import expo.modules.kotlin.exception.Exceptions
|
|
15
|
+
import expo.modules.kotlin.functions.Queues
|
|
16
|
+
import expo.modules.kotlin.modules.Module
|
|
17
|
+
import expo.modules.kotlin.modules.ModuleDefinition
|
|
18
|
+
import kotlinx.coroutines.CoroutineScope
|
|
19
|
+
import kotlinx.coroutines.Dispatchers
|
|
20
|
+
import kotlinx.coroutines.cancel
|
|
21
|
+
import kotlinx.coroutines.launch
|
|
22
|
+
import java.io.File
|
|
23
|
+
|
|
24
|
+
val cameraEvents = arrayOf(
|
|
25
|
+
"onCameraReady",
|
|
26
|
+
"onMountError",
|
|
27
|
+
"onBarCodeScanned",
|
|
28
|
+
"onFacesDetected",
|
|
29
|
+
"onFaceDetectionError",
|
|
30
|
+
"onPictureSaved"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
class CameraViewNextModule : Module() {
|
|
34
|
+
private val moduleScope = CoroutineScope(Dispatchers.Main)
|
|
35
|
+
override fun definition() = ModuleDefinition {
|
|
36
|
+
Name("ExpoCameraNext")
|
|
37
|
+
|
|
38
|
+
Events("onModernBarcodeScanned")
|
|
39
|
+
|
|
40
|
+
AsyncFunction("requestCameraPermissionsAsync") { promise: Promise ->
|
|
41
|
+
Permissions.askForPermissionsWithPermissionsManager(
|
|
42
|
+
permissionsManager,
|
|
43
|
+
promise,
|
|
44
|
+
Manifest.permission.CAMERA
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
AsyncFunction("requestMicrophonePermissionsAsync") { promise: Promise ->
|
|
49
|
+
Permissions.askForPermissionsWithPermissionsManager(
|
|
50
|
+
permissionsManager,
|
|
51
|
+
promise,
|
|
52
|
+
Manifest.permission.RECORD_AUDIO
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
AsyncFunction("getCameraPermissionsAsync") { promise: Promise ->
|
|
57
|
+
Permissions.getPermissionsWithPermissionsManager(
|
|
58
|
+
permissionsManager,
|
|
59
|
+
promise,
|
|
60
|
+
Manifest.permission.CAMERA
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
AsyncFunction("getMicrophonePermissionsAsync") { promise: Promise ->
|
|
65
|
+
Permissions.getPermissionsWithPermissionsManager(
|
|
66
|
+
permissionsManager,
|
|
67
|
+
promise,
|
|
68
|
+
Manifest.permission.RECORD_AUDIO
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
OnDestroy {
|
|
73
|
+
try {
|
|
74
|
+
moduleScope.cancel(ModuleDestroyedException())
|
|
75
|
+
} catch (e: IllegalStateException) {
|
|
76
|
+
Log.e(TAG, "The scope does not have a job in it")
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
View(ExpoCameraView::class) {
|
|
81
|
+
Events(cameraEvents)
|
|
82
|
+
|
|
83
|
+
Prop("type") { view, type: CameraType ->
|
|
84
|
+
view.lenFacing = type
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Prop("flashMode") { view, flashMode: FlashMode ->
|
|
88
|
+
view.setCameraFlashMode(flashMode)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Prop("enableTorch") { view, enabled: Boolean ->
|
|
92
|
+
view.setTorchEnabled(enabled)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Prop("zoom") { view, zoom: Float ->
|
|
96
|
+
view.camera?.cameraControl?.setLinearZoom(zoom)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
Prop("mode") { view, mode: CameraMode ->
|
|
100
|
+
view.cameraMode = mode
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
Prop("mute") { view, muted: Boolean? ->
|
|
104
|
+
view.mute = muted ?: false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
Prop("barCodeScannerSettings") { view, settings: BarCodeSettings? ->
|
|
108
|
+
if (settings == null) {
|
|
109
|
+
return@Prop
|
|
110
|
+
}
|
|
111
|
+
view.setBarCodeScannerSettings(settings)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
Prop("barCodeScannerEnabled") { view, barCodeScannerEnabled: Boolean? ->
|
|
115
|
+
view.setShouldScanBarCodes(barCodeScannerEnabled ?: false)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
AsyncFunction("takePicture") { view: ExpoCameraView, options: PictureOptions, promise: Promise ->
|
|
119
|
+
if (!EmulatorUtilities.isRunningOnEmulator()) {
|
|
120
|
+
view.takePicture(options, promise, cacheDirectory)
|
|
121
|
+
} else {
|
|
122
|
+
val image = CameraViewHelper.generateSimulatorPhoto(view.width, view.height)
|
|
123
|
+
moduleScope.launch {
|
|
124
|
+
ResolveTakenPicture(image, promise, options, cacheDirectory) { response ->
|
|
125
|
+
view.onPictureSaved(response)
|
|
126
|
+
}.resolve()
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}.runOnQueue(Queues.MAIN)
|
|
130
|
+
|
|
131
|
+
AsyncFunction("record") { view: ExpoCameraView, options: RecordingOptions, promise: Promise ->
|
|
132
|
+
if (!view.mute && !permissionsManager.hasGrantedPermissions(Manifest.permission.RECORD_AUDIO)) {
|
|
133
|
+
throw Exceptions.MissingPermissions(Manifest.permission.RECORD_AUDIO)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
view.record(options, promise, cacheDirectory)
|
|
137
|
+
}.runOnQueue(Queues.MAIN)
|
|
138
|
+
|
|
139
|
+
AsyncFunction("stopRecording") { view: ExpoCameraView ->
|
|
140
|
+
view.activeRecording?.close()
|
|
141
|
+
}.runOnQueue(Queues.MAIN)
|
|
142
|
+
|
|
143
|
+
OnViewDestroys { view ->
|
|
144
|
+
view.cancelCoroutineScope()
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private val cacheDirectory: File
|
|
150
|
+
get() = appContext.cacheDirectory
|
|
151
|
+
|
|
152
|
+
private val permissionsManager: Permissions
|
|
153
|
+
get() = appContext.permissions ?: throw Exceptions.PermissionsModuleNotFound()
|
|
154
|
+
|
|
155
|
+
companion object {
|
|
156
|
+
internal val TAG = CameraViewNextModule::class.java.simpleName
|
|
157
|
+
}
|
|
158
|
+
}
|