Skip to content

Commit c3f9283

Browse files
committed
refactor: extract content composable
1 parent f8bdf49 commit c3f9283

File tree

1 file changed

+68
-41
lines changed

1 file changed

+68
-41
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/send/SendRecipientScreen.kt

Lines changed: 68 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import androidx.compose.ui.unit.dp
4747
import androidx.compose.ui.viewinterop.AndroidView
4848
import androidx.lifecycle.compose.LocalLifecycleOwner
4949
import com.google.accompanist.permissions.ExperimentalPermissionsApi
50+
import com.google.accompanist.permissions.PermissionStatus
5051
import com.google.accompanist.permissions.rememberPermissionState
5152
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
5253
import com.google.mlkit.vision.barcode.BarcodeScanning
@@ -68,7 +69,6 @@ import to.bitkit.ui.components.PrimaryButton
6869
import to.bitkit.ui.components.RectangleButton
6970
import to.bitkit.ui.components.VerticalSpacer
7071
import to.bitkit.ui.scaffold.SheetTopBar
71-
import to.bitkit.ui.screens.scanner.CameraPermissionView
7272
import to.bitkit.ui.screens.scanner.QrCodeAnalyzer
7373
import to.bitkit.ui.shared.modifiers.sheetHeight
7474
import 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(
436456
private 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

Comments
 (0)