@@ -63,6 +63,7 @@ import androidx.compose.ui.unit.round
6363import androidx.lifecycle.LifecycleOwner
6464import androidx.lifecycle.compose.LocalLifecycleOwner
6565import androidx.lifecycle.compose.collectAsStateWithLifecycle
66+ import androidx.lifecycle.viewmodel.compose.viewModel
6667import coil.compose.rememberAsyncImagePainter
6768import com.google.accompanist.permissions.ExperimentalPermissionsApi
6869import com.google.accompanist.permissions.PermissionState
@@ -84,22 +85,21 @@ fun CameraXBasic(modifier: Modifier = Modifier) {
8485 var showCapturedImage by remember { mutableStateOf<Uri ?>(null ) }
8586 val cameraPermissionState = rememberPermissionState(Manifest .permission.CAMERA )
8687 val imageCaptureCallbackExecutor: ExecutorService = remember { Executors .newSingleThreadExecutor() }
87- val viewModel = remember { CameraXBasicViewModel () }
88+ val viewModel = viewModel { CameraXBasicViewModel () }
8889
8990 DisposableEffect (Unit ) {
9091 onDispose {
9192 imageCaptureCallbackExecutor.shutdown()
9293 }
9394 }
9495
95- Box (modifier = Modifier .fillMaxSize()) {
96+ Box (modifier = modifier .fillMaxSize()) {
9697 ContentWithPermissionHandling (
9798 cameraPermissionState = cameraPermissionState,
9899 showCapturedImage = showCapturedImage,
99100 onShowCapturedImageChange = { showCapturedImage = it },
100101 viewModel = viewModel,
101- imageCaptureCallbackExecutor = imageCaptureCallbackExecutor,
102- modifier = modifier,
102+ imageCaptureCallbackExecutor = imageCaptureCallbackExecutor
103103 )
104104 }
105105}
@@ -131,7 +131,7 @@ private fun ContentWithPermissionHandling(
131131 when (cameraPermissionState.status) {
132132 is PermissionStatus .Granted -> {
133133 if (showCapturedImage != null ) {
134- CapturedImageView (uri = showCapturedImage) {
134+ CapturedImageView (uri = showCapturedImage, modifier = modifier ) {
135135 onShowCapturedImageChange(null )
136136 }
137137 } else {
@@ -152,8 +152,9 @@ private fun ContentWithPermissionHandling(
152152 }
153153
154154 is PermissionStatus .Denied -> CameraPermissionDeniedView (
155- cameraPermissionState.status,
156- cameraPermissionState,
155+ status = cameraPermissionState.status,
156+ cameraPermissionState = cameraPermissionState,
157+ modifier = modifier
157158 )
158159 }
159160}
@@ -171,9 +172,10 @@ private fun ContentWithPermissionHandling(
171172private fun CameraPermissionDeniedView (
172173 status : PermissionStatus ,
173174 cameraPermissionState : PermissionState ,
175+ modifier : Modifier = Modifier
174176) {
175177 Column (
176- modifier = Modifier
178+ modifier = modifier
177179 .fillMaxSize()
178180 .padding(16 .dp),
179181 horizontalAlignment = Alignment .CenterHorizontally ,
@@ -232,7 +234,7 @@ private fun CameraPreviewContent(
232234
233235 surfaceRequest?.let { request ->
234236 val coordinateTransformer = remember { MutableCoordinateTransformer () }
235- Box (modifier = Modifier .fillMaxSize()) {
237+ Box (modifier = modifier .fillMaxSize()) {
236238 CameraXViewfinder (
237239 surfaceRequest = request,
238240 coordinateTransformer = coordinateTransformer,
@@ -263,14 +265,13 @@ private fun CameraPreviewContent(
263265 .size(48 .dp),
264266 )
265267 }
266- Column (
268+
269+ Button (
270+ onClick = onTakePhotoClick,
267271 modifier = Modifier
268272 .align(Alignment .BottomCenter )
269273 .padding(16 .dp),
270- horizontalAlignment = Alignment .CenterHorizontally ,
271- ) {
272- Button (onClick = onTakePhotoClick) { Text (" Take Photo" ) }
273- }
274+ ) { Text (" Take Photo" ) }
274275 }
275276 }
276277}
@@ -283,9 +284,9 @@ private fun CameraPreviewContent(
283284 * (e.g., clicks the back button).
284285 */
285286@Composable
286- fun CapturedImageView (uri : Uri , onDismiss : () -> Unit ) {
287+ fun CapturedImageView (uri : Uri , modifier : Modifier = Modifier , onDismiss : () -> Unit = {} ) {
287288 Box (
288- modifier = Modifier .fillMaxSize(),
289+ modifier = modifier .fillMaxSize(),
289290 ) {
290291 Image (
291292 painter = rememberAsyncImagePainter(uri),
0 commit comments