Skip to content

Commit 37335ea

Browse files
Merge pull request #299 from android/camerax-fix
Update CameraXBasic.kt
2 parents b7bdf94 + 206b44a commit 37335ea

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

samples/camera/camerax/src/main/java/com/example/platform/camerax/basic/CameraXBasic.kt

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import androidx.compose.ui.unit.round
6363
import androidx.lifecycle.LifecycleOwner
6464
import androidx.lifecycle.compose.LocalLifecycleOwner
6565
import androidx.lifecycle.compose.collectAsStateWithLifecycle
66+
import androidx.lifecycle.viewmodel.compose.viewModel
6667
import coil.compose.rememberAsyncImagePainter
6768
import com.google.accompanist.permissions.ExperimentalPermissionsApi
6869
import 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(
171172
private 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),

samples/camera/camerax/src/main/java/com/example/platform/camerax/basic/CameraXBasicViewModel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import androidx.camera.lifecycle.awaitInstance
3737
import androidx.compose.ui.geometry.Offset
3838
import androidx.core.content.ContextCompat
3939
import androidx.lifecycle.LifecycleOwner
40+
import androidx.lifecycle.ViewModel
4041
import kotlinx.coroutines.awaitCancellation
4142
import kotlinx.coroutines.flow.MutableStateFlow
4243
import kotlinx.coroutines.flow.StateFlow
@@ -52,7 +53,7 @@ import java.util.concurrent.ExecutorService
5253
* functionality using CameraX. It exposes a [StateFlow] for the camera preview [SurfaceRequest]
5354
* to be used in a composable.
5455
*/
55-
class CameraXBasicViewModel {
56+
class CameraXBasicViewModel : ViewModel() {
5657
private val _surfaceRequest = MutableStateFlow<SurfaceRequest?>(null)
5758
val surfaceRequest: StateFlow<SurfaceRequest?> = _surfaceRequest
5859
private var surfaceMeteringPointFactory: SurfaceOrientedMeteringPointFactory? = null

0 commit comments

Comments
 (0)