Skip to content

Commit 65d452b

Browse files
committed
🐛 Only create 2 use-cases at a time (important for low-power devices)
1 parent aed1019 commit 65d452b

2 files changed

Lines changed: 24 additions & 12 deletions

File tree

app/src/main/java/co/stonephone/stonecamera/StoneCameraApp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ fun StoneCameraApp(
8989
LaunchedEffect(previewView, imageCapture) {
9090
if (previewView != null && imageCapture != null) {
9191
viewfinderDimensions = calculateImageCoverageRegion(
92-
previewView!!, imageCapture
92+
previewView, imageCapture
9393
)
9494
}
9595
}

app/src/main/java/co/stonephone/stonecamera/StoneCameraViewModel.kt

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class StoneCameraViewModel(
6060
var camera: Camera? by mutableStateOf(null)
6161
private set
6262

63-
private var _selectedCameraId = "0"
63+
private var _selectedCameraId: String? = null
6464

6565
var facing by mutableStateOf(CameraSelector.LENS_FACING_BACK)
6666
private set
@@ -268,6 +268,8 @@ class StoneCameraViewModel(
268268
stopRecording()
269269
}
270270
selectedMode = mode
271+
272+
bindUseCases()
271273
}
272274

273275

@@ -339,24 +341,34 @@ class StoneCameraViewModel(
339341
// TODO consider a job that can be interrupted?
340342

341343
// These dependencies load in asynchronously, and can be destroyed & re-created at various points (e.g. rotating)
342-
if (previewView == null || _cameraProvider == null || lifecycleOwner == null) return
344+
if (previewView == null || _cameraProvider == null || lifecycleOwner == null || _selectedCameraId == null) return
343345
else {
344346
try {
345347
preview.surfaceProvider = previewView!!.surfaceProvider
346348

347-
val cameraSelector = createCameraSelectorForId(_selectedCameraId)
349+
val cameraSelector = createCameraSelectorForId(_selectedCameraId!!)
348350

349351
previewViewTouchHandlers.clear()
350352
_cameraProvider!!.unbindAll()
351353

352-
camera = _cameraProvider!!.bindToLifecycle(
353-
lifecycleOwner!!,
354-
cameraSelector,
355-
preview,
356-
imageCapture,
357-
videoCapture,
358-
imageAnalysis,
359-
)
354+
// TODO move this into a plugin-level solution
355+
// also: on more powerful devices that can support 3 use-cases, we should bind them all from day 1 for fast switching
356+
if(selectedMode == "Photo") {
357+
camera = _cameraProvider!!.bindToLifecycle(
358+
lifecycleOwner!!,
359+
cameraSelector,
360+
preview,
361+
imageCapture,
362+
imageAnalysis,
363+
)
364+
} else {
365+
camera = _cameraProvider!!.bindToLifecycle(
366+
lifecycleOwner!!,
367+
cameraSelector,
368+
preview,
369+
videoCapture,
370+
)
371+
}
360372

361373
initializePlugins()
362374

0 commit comments

Comments
 (0)