@@ -63,6 +63,7 @@ import androidx.compose.ui.unit.round
63
63
import androidx.lifecycle.LifecycleOwner
64
64
import androidx.lifecycle.compose.LocalLifecycleOwner
65
65
import androidx.lifecycle.compose.collectAsStateWithLifecycle
66
+ import androidx.lifecycle.viewmodel.compose.viewModel
66
67
import coil.compose.rememberAsyncImagePainter
67
68
import com.google.accompanist.permissions.ExperimentalPermissionsApi
68
69
import com.google.accompanist.permissions.PermissionState
@@ -84,22 +85,21 @@ fun CameraXBasic(modifier: Modifier = Modifier) {
84
85
var showCapturedImage by remember { mutableStateOf<Uri ?>(null ) }
85
86
val cameraPermissionState = rememberPermissionState(Manifest .permission.CAMERA )
86
87
val imageCaptureCallbackExecutor: ExecutorService = remember { Executors .newSingleThreadExecutor() }
87
- val viewModel = remember { CameraXBasicViewModel () }
88
+ val viewModel = viewModel { CameraXBasicViewModel () }
88
89
89
90
DisposableEffect (Unit ) {
90
91
onDispose {
91
92
imageCaptureCallbackExecutor.shutdown()
92
93
}
93
94
}
94
95
95
- Box (modifier = Modifier .fillMaxSize()) {
96
+ Box (modifier = modifier .fillMaxSize()) {
96
97
ContentWithPermissionHandling (
97
98
cameraPermissionState = cameraPermissionState,
98
99
showCapturedImage = showCapturedImage,
99
100
onShowCapturedImageChange = { showCapturedImage = it },
100
101
viewModel = viewModel,
101
- imageCaptureCallbackExecutor = imageCaptureCallbackExecutor,
102
- modifier = modifier,
102
+ imageCaptureCallbackExecutor = imageCaptureCallbackExecutor
103
103
)
104
104
}
105
105
}
@@ -131,7 +131,7 @@ private fun ContentWithPermissionHandling(
131
131
when (cameraPermissionState.status) {
132
132
is PermissionStatus .Granted -> {
133
133
if (showCapturedImage != null ) {
134
- CapturedImageView (uri = showCapturedImage) {
134
+ CapturedImageView (uri = showCapturedImage, modifier = modifier ) {
135
135
onShowCapturedImageChange(null )
136
136
}
137
137
} else {
@@ -152,8 +152,9 @@ private fun ContentWithPermissionHandling(
152
152
}
153
153
154
154
is PermissionStatus .Denied -> CameraPermissionDeniedView (
155
- cameraPermissionState.status,
156
- cameraPermissionState,
155
+ status = cameraPermissionState.status,
156
+ cameraPermissionState = cameraPermissionState,
157
+ modifier = modifier
157
158
)
158
159
}
159
160
}
@@ -171,9 +172,10 @@ private fun ContentWithPermissionHandling(
171
172
private fun CameraPermissionDeniedView (
172
173
status : PermissionStatus ,
173
174
cameraPermissionState : PermissionState ,
175
+ modifier : Modifier = Modifier
174
176
) {
175
177
Column (
176
- modifier = Modifier
178
+ modifier = modifier
177
179
.fillMaxSize()
178
180
.padding(16 .dp),
179
181
horizontalAlignment = Alignment .CenterHorizontally ,
@@ -232,7 +234,7 @@ private fun CameraPreviewContent(
232
234
233
235
surfaceRequest?.let { request ->
234
236
val coordinateTransformer = remember { MutableCoordinateTransformer () }
235
- Box (modifier = Modifier .fillMaxSize()) {
237
+ Box (modifier = modifier .fillMaxSize()) {
236
238
CameraXViewfinder (
237
239
surfaceRequest = request,
238
240
coordinateTransformer = coordinateTransformer,
@@ -263,14 +265,13 @@ private fun CameraPreviewContent(
263
265
.size(48 .dp),
264
266
)
265
267
}
266
- Column (
268
+
269
+ Button (
270
+ onClick = onTakePhotoClick,
267
271
modifier = Modifier
268
272
.align(Alignment .BottomCenter )
269
273
.padding(16 .dp),
270
- horizontalAlignment = Alignment .CenterHorizontally ,
271
- ) {
272
- Button (onClick = onTakePhotoClick) { Text (" Take Photo" ) }
273
- }
274
+ ) { Text (" Take Photo" ) }
274
275
}
275
276
}
276
277
}
@@ -283,9 +284,9 @@ private fun CameraPreviewContent(
283
284
* (e.g., clicks the back button).
284
285
*/
285
286
@Composable
286
- fun CapturedImageView (uri : Uri , onDismiss : () -> Unit ) {
287
+ fun CapturedImageView (uri : Uri , modifier : Modifier = Modifier , onDismiss : () -> Unit = {} ) {
287
288
Box (
288
- modifier = Modifier .fillMaxSize(),
289
+ modifier = modifier .fillMaxSize(),
289
290
) {
290
291
Image (
291
292
painter = rememberAsyncImagePainter(uri),
0 commit comments