@@ -185,6 +185,14 @@ class CamConfig(private val mActivity: MainActivity) {
185
185
val DEFAULT_CAMERA_MODE = CameraMode .CAMERA
186
186
187
187
const val COMMON_SHARED_PREFS_NAME = " commons"
188
+
189
+ val FRONT_CAMERA_SELECTOR = CameraSelector .Builder ()
190
+ .requireLensFacing(CameraSelector .LENS_FACING_FRONT )
191
+ .build()
192
+
193
+ val REAR_CAMERA_SELECTOR = CameraSelector .Builder ()
194
+ .requireLensFacing(CameraSelector .LENS_FACING_BACK )
195
+ .build()
188
196
}
189
197
190
198
var camera: Camera ? = null
@@ -1014,7 +1022,14 @@ class CamConfig(private val mActivity: MainActivity) {
1014
1022
1015
1023
if (currentMode.extensionMode != ExtensionMode .NONE ) {
1016
1024
extensionsManager?.let { em ->
1017
- tCameraSelector = em.getExtensionEnabledCameraSelector(tCameraSelector, currentMode.extensionMode)
1025
+ if (! em.isExtensionAvailable(tCameraSelector, currentMode.extensionMode))
1026
+ return false
1027
+
1028
+ try {
1029
+ tCameraSelector = em.getExtensionEnabledCameraSelector(tCameraSelector, currentMode.extensionMode)
1030
+ } catch (e : IllegalArgumentException ) {
1031
+ return false
1032
+ }
1018
1033
}
1019
1034
}
1020
1035
@@ -1042,6 +1057,20 @@ class CamConfig(private val mActivity: MainActivity) {
1042
1057
1043
1058
if (mActivity.isDestroyed || mActivity.isFinishing) return
1044
1059
1060
+ // Test whether the current lens facing is supported by the current device
1061
+ // If not then silently switch to the other lens facing
1062
+ // (Snackbar/popup message can be shown before startCamera is called
1063
+ // in specific cases of explicitly switching to another side or if
1064
+ // the camera is expected)
1065
+ if (! isLensFacingSupported(lensFacing)) {
1066
+ lensFacing = if (lensFacing == CameraSelector .LENS_FACING_BACK ) {
1067
+ CameraSelector .LENS_FACING_FRONT
1068
+ } else {
1069
+ CameraSelector .LENS_FACING_BACK
1070
+ }
1071
+ }
1072
+
1073
+
1045
1074
cameraSelector = CameraSelector .Builder ()
1046
1075
.requireLensFacing(lensFacing)
1047
1076
.build()
@@ -1298,13 +1327,18 @@ class CamConfig(private val mActivity: MainActivity) {
1298
1327
}
1299
1328
1300
1329
private fun availableModes (): Set <CameraMode > {
1301
- return CameraMode .values() .filter {
1330
+ return CameraMode .entries .filter {
1302
1331
when (it) {
1303
1332
CameraMode .CAMERA , CameraMode .VIDEO -> true
1304
1333
CameraMode .QR_SCAN -> mActivity !is SecureMainActivity
1305
1334
else -> {
1306
1335
check(it.extensionMode != ExtensionMode .NONE )
1307
- extensionsManager?.isExtensionAvailable(cameraSelector, it.extensionMode) ? : false
1336
+ val em = extensionsManager
1337
+ if (em != null ) {
1338
+ em.isExtensionAvailable(FRONT_CAMERA_SELECTOR , it.extensionMode) || em.isExtensionAvailable(REAR_CAMERA_SELECTOR , it.extensionMode)
1339
+ } else {
1340
+ false
1341
+ }
1308
1342
}
1309
1343
}
1310
1344
}.toSet()
0 commit comments