Skip to content

Commit 4fa4781

Browse files
MHShettythestinger
authored andcommitted
Fix issues and crashes with extension modes
1 parent c414a90 commit 4fa4781

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

app/src/main/java/app/grapheneos/camera/CamConfig.kt

+37-3
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ class CamConfig(private val mActivity: MainActivity) {
185185
val DEFAULT_CAMERA_MODE = CameraMode.CAMERA
186186

187187
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()
188196
}
189197

190198
var camera: Camera? = null
@@ -1014,7 +1022,14 @@ class CamConfig(private val mActivity: MainActivity) {
10141022

10151023
if (currentMode.extensionMode != ExtensionMode.NONE) {
10161024
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+
}
10181033
}
10191034
}
10201035

@@ -1042,6 +1057,20 @@ class CamConfig(private val mActivity: MainActivity) {
10421057

10431058
if (mActivity.isDestroyed || mActivity.isFinishing) return
10441059

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+
10451074
cameraSelector = CameraSelector.Builder()
10461075
.requireLensFacing(lensFacing)
10471076
.build()
@@ -1298,13 +1327,18 @@ class CamConfig(private val mActivity: MainActivity) {
12981327
}
12991328

13001329
private fun availableModes(): Set<CameraMode> {
1301-
return CameraMode.values().filter {
1330+
return CameraMode.entries.filter {
13021331
when (it) {
13031332
CameraMode.CAMERA, CameraMode.VIDEO -> true
13041333
CameraMode.QR_SCAN -> mActivity !is SecureMainActivity
13051334
else -> {
13061335
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+
}
13081342
}
13091343
}
13101344
}.toSet()

0 commit comments

Comments
 (0)