@@ -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