@@ -47,6 +47,7 @@ import androidx.compose.ui.unit.dp
4747import androidx.compose.ui.viewinterop.AndroidView
4848import androidx.lifecycle.compose.LocalLifecycleOwner
4949import com.google.accompanist.permissions.ExperimentalPermissionsApi
50+ import com.google.accompanist.permissions.PermissionStatus
5051import com.google.accompanist.permissions.rememberPermissionState
5152import com.google.mlkit.vision.barcode.BarcodeScannerOptions
5253import com.google.mlkit.vision.barcode.BarcodeScanning
@@ -68,7 +69,6 @@ import to.bitkit.ui.components.PrimaryButton
6869import to.bitkit.ui.components.RectangleButton
6970import to.bitkit.ui.components.VerticalSpacer
7071import to.bitkit.ui.scaffold.SheetTopBar
71- import to.bitkit.ui.screens.scanner.CameraPermissionView
7272import to.bitkit.ui.screens.scanner.QrCodeAnalyzer
7373import to.bitkit.ui.shared.modifiers.sheetHeight
7474import to.bitkit.ui.shared.util.gradientBackground
@@ -103,7 +103,6 @@ fun SendRecipientScreen(
103103 val preview = remember { CameraPreview .Builder ().build() }
104104 var camera by remember { mutableStateOf<Camera ?>(null ) }
105105
106-
107106 val cameraSelector = remember {
108107 CameraSelector .Builder ()
109108 .requireLensFacing(CameraSelector .LENS_FACING_BACK )
@@ -212,6 +211,46 @@ fun SendRecipientScreen(
212211 }
213212 }
214213
214+ SendRecipientContent (
215+ previewView = previewView,
216+ onClickFlashlight = {
217+ isFlashlightOn = ! isFlashlightOn
218+ camera?.cameraControl?.enableTorch(isFlashlightOn)
219+ },
220+ onClickGallery = {
221+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
222+ pickMedia.launch(
223+ PickVisualMediaRequest (ActivityResultContracts .PickVisualMedia .ImageOnly )
224+ )
225+ } else {
226+ galleryLauncher.launch(" image/*" )
227+ }
228+ },
229+ onClickContact = {
230+ scope.launch {
231+ app?.toast(Exception (" Coming soon: Contact" ))
232+ }
233+ },
234+ onClickPaste = { onEvent(SendEvent .Paste ) },
235+ onClickManual = { onEvent(SendEvent .EnterManually ) },
236+ cameraPermissionGranted = cameraPermissionState.status is PermissionStatus .Granted ,
237+ onRequestPermission = { context.startActivityAppSettings() },
238+ modifier = modifier
239+ )
240+ }
241+
242+ @Composable
243+ private fun SendRecipientContent (
244+ previewView : PreviewView ? ,
245+ onClickFlashlight : () -> Unit ,
246+ onClickGallery : () -> Unit ,
247+ onClickContact : () -> Unit ,
248+ onClickPaste : () -> Unit ,
249+ onClickManual : () -> Unit ,
250+ cameraPermissionGranted : Boolean ,
251+ onRequestPermission : () -> Unit ,
252+ modifier : Modifier = Modifier ,
253+ ) {
215254 Column (
216255 modifier = modifier
217256 .fillMaxSize()
@@ -230,38 +269,21 @@ fun SendRecipientScreen(
230269 .fillMaxWidth()
231270 .weight(1f )
232271 ) {
233- CameraPermissionView (
234- permissionState = cameraPermissionState,
235- deniedContent = {
236- PermissionDenied (
237- onClickRetry = {
238- context.startActivityAppSettings()
239- },
240- modifier = Modifier
241- .fillMaxWidth()
242- .fillMaxHeight()
243- )
244- },
245- grantedContent = {
246- CameraPreviewWithControls (
247- previewView = previewView,
248- onClickFlashlight = {
249- isFlashlightOn = ! isFlashlightOn
250- camera?.cameraControl?.enableTorch(isFlashlightOn)
251- },
252- onClickGallery = {
253- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
254- pickMedia.launch(
255- PickVisualMediaRequest (ActivityResultContracts .PickVisualMedia .ImageOnly )
256- )
257- } else {
258- galleryLauncher.launch(" image/*" )
259- }
260- },
261- modifier = Modifier .fillMaxSize()
262- )
263- }
264- )
272+ if (cameraPermissionGranted && previewView != null ) {
273+ CameraPreviewWithControls (
274+ previewView = previewView,
275+ onClickFlashlight = onClickFlashlight,
276+ onClickGallery = onClickGallery,
277+ modifier = Modifier .fillMaxSize()
278+ )
279+ } else {
280+ PermissionDenied (
281+ onClickRetry = onRequestPermission,
282+ modifier = Modifier
283+ .fillMaxWidth()
284+ .fillMaxHeight()
285+ )
286+ }
265287 }
266288
267289 RectangleButton (
@@ -270,9 +292,7 @@ fun SendRecipientScreen(
270292 iconTint = Colors .Brand ,
271293 modifier = Modifier .testTag(" RecipientContact" )
272294 ) {
273- scope.launch {
274- app?.toast(Exception (" Coming soon: Contact" ))
275- }
295+ onClickContact()
276296 }
277297
278298 RectangleButton (
@@ -281,7 +301,7 @@ fun SendRecipientScreen(
281301 iconTint = Colors .Brand ,
282302 modifier = Modifier .testTag(" RecipientInvoice" )
283303 ) {
284- onEvent( SendEvent . Paste )
304+ onClickPaste( )
285305 }
286306
287307 RectangleButton (
@@ -290,7 +310,7 @@ fun SendRecipientScreen(
290310 iconTint = Colors .Brand ,
291311 modifier = Modifier .testTag(" RecipientManual" )
292312 ) {
293- onEvent( SendEvent . EnterManually )
313+ onClickManual( )
294314 }
295315 }
296316 }
@@ -436,8 +456,15 @@ private fun processImageFromGallery(
436456private fun Preview () {
437457 AppThemeSurface {
438458 BottomSheetPreview {
439- SendRecipientScreen (
440- onEvent = {},
459+ SendRecipientContent (
460+ previewView = null ,
461+ onClickFlashlight = {},
462+ onClickGallery = {},
463+ onClickContact = {},
464+ onClickPaste = {},
465+ onClickManual = {},
466+ cameraPermissionGranted = false ,
467+ onRequestPermission = {},
441468 modifier = Modifier .sheetHeight(),
442469 )
443470 }
0 commit comments