@@ -15,17 +15,21 @@ import androidx.compose.foundation.background
1515import androidx.compose.foundation.layout.Box
1616import androidx.compose.foundation.layout.fillMaxSize
1717import androidx.compose.runtime.Composable
18+ import androidx.compose.runtime.DisposableEffect
1819import androidx.compose.runtime.LaunchedEffect
1920import androidx.compose.runtime.getValue
2021import androidx.compose.runtime.mutableStateOf
2122import androidx.compose.runtime.remember
23+ import androidx.compose.runtime.rememberCoroutineScope
2224import androidx.compose.runtime.setValue
2325import androidx.compose.ui.Modifier
2426import androidx.compose.ui.platform.LocalContext
2527import androidx.compose.ui.platform.LocalLifecycleOwner
2628import androidx.compose.ui.viewinterop.AndroidView
29+ import androidx.lifecycle.Lifecycle
2730import androidx.lifecycle.asFlow
2831import com.getcode.theme.CodeTheme
32+ import com.getcode.ui.components.OnLifecycleEvent
2933import com.getcode.ui.utils.AnimationUtils
3034import com.getcode.utils.trace
3135import com.kik.kikx.kikcodes.implementation.KikCodeAnalyzer
@@ -35,6 +39,7 @@ import kotlinx.coroutines.Dispatchers
3539import kotlinx.coroutines.flow.distinctUntilChanged
3640import kotlinx.coroutines.flow.launchIn
3741import kotlinx.coroutines.flow.onEach
42+ import kotlinx.coroutines.launch
3843import kotlinx.coroutines.withContext
3944import timber.log.Timber
4045import java.util.concurrent.Executors
@@ -77,12 +82,23 @@ fun CodeScanner(
7782 KikCodeAnalyzer (scanner, onCodeScanned)
7883 }
7984
85+ val scope = rememberCoroutineScope()
8086 LaunchedEffect (scanner) {
8187 val cameraProvider = context.getCameraProvider()
8288 cameraProvider.unbindAll()
8389 cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalysis)
8490 }
8591
92+ OnLifecycleEvent { _, event ->
93+ if (event == Lifecycle .Event .ON_STOP ) {
94+ scope.launch {
95+ val cameraProvider = context.getCameraProvider()
96+ cameraProvider.unbindAll()
97+ }
98+ }
99+
100+ }
101+
86102 var streamState by remember(previewView) {
87103 mutableStateOf(PreviewView .StreamState .IDLE )
88104 }
0 commit comments