diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.kt index df02bb08d9..3190b8ced9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import org.signal.camera.CameraScreen @@ -46,6 +47,7 @@ import org.signal.camera.CameraScreenEvents import org.signal.camera.CameraScreenViewModel import org.signal.camera.VideoCaptureResult import org.signal.camera.VideoOutput +import org.signal.camera.hud.GalleryThumbnailButton import org.signal.camera.hud.StandardCameraHud import org.signal.camera.hud.StandardCameraHudEvents import org.signal.camera.hud.StringResources @@ -141,6 +143,7 @@ class CameraXFragment : ComposeFragment(), CameraFragment { onCheckPermissions = { checkPermissions(isVideoEnabled) }, hasCameraPermission = { hasCameraPermission() }, onRequestMicPermission = { requestMicPermission() }, + onGalleryClicked = { controller?.onGalleryClicked() }, createVideoFileDescriptor = { createVideoFileDescriptor() }, getMaxVideoDurationInSeconds = { getMaxVideoDurationInSeconds() }, cameraDisplay = CameraDisplay.getDisplay(requireActivity()) @@ -300,6 +303,7 @@ private fun CameraXScreen( onCheckPermissions: () -> Unit, hasCameraPermission: () -> Boolean, onRequestMicPermission: () -> Unit, + onGalleryClicked: () -> Unit, createVideoFileDescriptor: () -> ParcelFileDescriptor?, getMaxVideoDurationInSeconds: () -> Int, cameraDisplay: CameraDisplay, @@ -436,7 +440,9 @@ private fun CameraXScreen( } else { PermissionMissingContent( isVideoEnabled = isVideoEnabled, - onRequestPermissions = onCheckPermissions + onRequestPermissions = onCheckPermissions, + onGalleryClicked = onGalleryClicked, + galleryButtonBottomPadding = hudBottomMargin + 16.dp ) } } @@ -445,7 +451,9 @@ private fun CameraXScreen( @Composable private fun PermissionMissingContent( isVideoEnabled: Boolean, - onRequestPermissions: () -> Unit + onRequestPermissions: () -> Unit, + onGalleryClicked: () -> Unit, + galleryButtonBottomPadding: Dp = 16.dp ) { val context = LocalContext.current val hasAudioPermission = remember { Permissions.hasAll(context, Manifest.permission.RECORD_AUDIO) } @@ -476,6 +484,14 @@ private fun PermissionMissingContent( Text(text = stringResource(R.string.CameraXFragment_allow_access)) } } + + Box( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(bottom = galleryButtonBottomPadding, end = 40.dp) + ) { + GalleryThumbnailButton(onClick = onGalleryClicked) + } } } @@ -600,6 +616,7 @@ private fun CameraXScreenPreview_20_9() { onCheckPermissions = {}, hasCameraPermission = { true }, onRequestMicPermission = { }, + onGalleryClicked = { }, createVideoFileDescriptor = { null }, getMaxVideoDurationInSeconds = { 60 }, cameraDisplay = CameraDisplay.DISPLAY_20_9, @@ -626,6 +643,7 @@ private fun CameraXScreenPreview_19_9() { onCheckPermissions = {}, hasCameraPermission = { true }, onRequestMicPermission = { }, + onGalleryClicked = { }, createVideoFileDescriptor = { null }, getMaxVideoDurationInSeconds = { 60 }, cameraDisplay = CameraDisplay.DISPLAY_19_9, @@ -652,6 +670,7 @@ private fun CameraXScreenPreview_18_9() { onCheckPermissions = {}, hasCameraPermission = { true }, onRequestMicPermission = { }, + onGalleryClicked = { }, createVideoFileDescriptor = { null }, getMaxVideoDurationInSeconds = { 60 }, cameraDisplay = CameraDisplay.DISPLAY_18_9, @@ -678,6 +697,7 @@ private fun CameraXScreenPreview_16_9() { onCheckPermissions = {}, hasCameraPermission = { true }, onRequestMicPermission = { }, + onGalleryClicked = { }, createVideoFileDescriptor = { null }, getMaxVideoDurationInSeconds = { 60 }, cameraDisplay = CameraDisplay.DISPLAY_16_9, @@ -704,6 +724,7 @@ private fun CameraXScreenPreview_6_5() { onCheckPermissions = {}, hasCameraPermission = { true }, onRequestMicPermission = { }, + onGalleryClicked = { }, createVideoFileDescriptor = { null }, getMaxVideoDurationInSeconds = { 60 }, cameraDisplay = CameraDisplay.DISPLAY_6_5,