@@ -10,13 +10,19 @@ import androidx.camera.core.ImageAnalysis
1010import androidx.camera.core.Preview
1111import androidx.camera.lifecycle.ProcessCameraProvider
1212import androidx.camera.view.PreviewView
13- import androidx.compose.foundation.Canvas
1413import androidx.compose.foundation.background
15- import androidx.compose.foundation.border
1614import androidx.compose.foundation.layout.Box
15+ import androidx.compose.foundation.layout.Column
16+ import androidx.compose.foundation.layout.Spacer
1717import androidx.compose.foundation.layout.fillMaxSize
18+ import androidx.compose.foundation.layout.fillMaxWidth
19+ import androidx.compose.foundation.layout.height
20+ import androidx.compose.foundation.layout.padding
1821import androidx.compose.foundation.layout.size
22+ import androidx.compose.foundation.shape.CircleShape
1923import androidx.compose.foundation.shape.RoundedCornerShape
24+ import androidx.compose.material.Icon
25+ import androidx.compose.material.IconButton
2026import androidx.compose.runtime.Composable
2127import androidx.compose.runtime.DisposableEffect
2228import androidx.compose.runtime.LaunchedEffect
@@ -27,15 +33,10 @@ import androidx.compose.runtime.remember
2733import androidx.compose.runtime.setValue
2834import androidx.compose.ui.Alignment
2935import androidx.compose.ui.Modifier
36+ import androidx.compose.ui.draw.clip
3037import androidx.compose.ui.draw.clipToBounds
31- import androidx.compose.ui.geometry.CornerRadius
32- import androidx.compose.ui.geometry.Offset
33- import androidx.compose.ui.geometry.Rect
34- import androidx.compose.ui.geometry.Size
35- import androidx.compose.ui.graphics.BlendMode
36- import androidx.compose.ui.graphics.Color
3738import androidx.compose.ui.platform.LocalContext
38- import androidx.compose.ui.platform.LocalDensity
39+ import androidx.compose.ui.res.painterResource
3940import androidx.compose.ui.res.stringResource
4041import androidx.compose.ui.unit.dp
4142import androidx.compose.ui.viewinterop.AndroidView
@@ -49,9 +50,11 @@ import kotlinx.coroutines.Dispatchers
4950import kotlinx.coroutines.withContext
5051import to.bitkit.R
5152import to.bitkit.ui.appViewModel
53+ import to.bitkit.ui.components.PrimaryButton
5254import to.bitkit.ui.scaffold.AppTopBar
5355import to.bitkit.ui.scaffold.ScreenColumn
5456import to.bitkit.ui.shared.util.gradientBackground
57+ import to.bitkit.ui.theme.Colors
5558import to.bitkit.utils.Logger
5659import java.util.concurrent.Executors
5760
@@ -65,6 +68,7 @@ fun QrScanningScreen(
6568 // TODO maybe replace & drop accompanist permissions
6669 val cameraPermissionState = rememberPermissionState(Manifest .permission.CAMERA )
6770 val lensFacing by remember { mutableIntStateOf(CameraSelector .LENS_FACING_BACK ) }
71+ var isFlashlightOn by remember { mutableStateOf(false ) }
6872
6973 val lifecycleOwner = LocalLifecycleOwner .current
7074 DisposableEffect (lifecycleOwner) {
@@ -140,7 +144,10 @@ fun QrScanningScreen(
140144 grantedContent = {
141145 ScreenColumn (modifier = Modifier .gradientBackground()) {
142146 AppTopBar (stringResource(R .string.title_scan), onBackClick = { navController.popBackStack() })
143- Content (previewView = previewView)
147+ Content (previewView = previewView, onClickCamera = {
148+ isFlashlightOn = ! isFlashlightOn
149+ camera?.cameraControl?.enableTorch(isFlashlightOn)
150+ })
144151 }
145152 }
146153 )
@@ -149,46 +156,75 @@ fun QrScanningScreen(
149156@Composable
150157private fun Content (
151158 previewView : PreviewView ,
159+ onClickCamera : () -> Unit ,
152160 modifier : Modifier = Modifier ,
153161) {
154- Box (modifier = modifier.fillMaxSize()) {
155- AndroidView (
156- modifier = Modifier
157- .fillMaxSize()
158- .clipToBounds(),
159- factory = { previewView.apply { setLayerType(LAYER_TYPE_HARDWARE , null ) } }
160- )
161- val (widthInPx, heightInPx, radiusInPx) = with (LocalDensity .current) {
162- remember {
163- Triple (350 .dp.toPx(), 350 .dp.toPx(), 16 .dp.toPx())
164- }
165- }
166-
162+ Column (
163+ modifier = modifier
164+ .fillMaxSize()
165+ .padding(horizontal = 16 .dp)
166+ ) {
167167 Box (
168- modifier = Modifier
169- .fillMaxSize ()
170- .background( Color . Black .copy(alpha = . 5f )),
171- contentAlignment = Alignment . Center ,
168+ modifier = modifier
169+ .fillMaxWidth ()
170+ .clip( RoundedCornerShape ( 16 .dp))
171+ .weight( 1f )
172172 ) {
173- Canvas (
173+ AndroidView (
174+ modifier = Modifier
175+ .fillMaxSize()
176+ .clipToBounds(),
177+ factory = { previewView.apply { setLayerType(LAYER_TYPE_HARDWARE , null ) } }
178+ )
179+
180+ IconButton (
181+ onClick = {}, // TODO IMPLEMENT
174182 modifier = Modifier
175- .size(350 .dp)
176- .border(1 .dp, Color .White , RoundedCornerShape (16 .dp))
183+ .padding(16 .dp)
184+ .clip(CircleShape )
185+ .background(
186+ Colors .White64
187+ )
188+ .size(48 .dp)
189+ .align(Alignment .TopStart )
177190 ) {
178- val offset = Offset (
179- x = (size.width - widthInPx) / 2 ,
180- y = (size.height - heightInPx) / 2 ,
191+ Icon (
192+ painter = painterResource(R .drawable.ic_image_square),
193+ contentDescription = null ,
194+ tint = Colors .White
181195 )
182- val cutoutRect = Rect (offset, Size (widthInPx, heightInPx))
196+ }
183197
184- drawRoundRect(
185- topLeft = cutoutRect.topLeft,
186- size = cutoutRect.size,
187- cornerRadius = CornerRadius (radiusInPx, radiusInPx),
188- color = Color .Transparent ,
189- blendMode = BlendMode .Clear
198+ IconButton (
199+ onClick = onClickCamera,
200+ modifier = Modifier
201+ .padding(16 .dp)
202+ .clip(CircleShape )
203+ .background(
204+ Colors .White64
205+ )
206+ .size(48 .dp)
207+ .align(Alignment .TopEnd )
208+ ) {
209+ Icon (
210+ painter = painterResource(R .drawable.ic_flashlight),
211+ contentDescription = null ,
212+ tint = Colors .White
190213 )
191214 }
192215 }
216+ Spacer (modifier = Modifier .height(16 .dp))
217+ PrimaryButton (
218+ icon = {
219+ Icon (
220+ painterResource(R .drawable.ic_clipboard_text_simple),
221+ contentDescription = null ,
222+ tint = Colors .White
223+ )
224+ },
225+ text = stringResource(R .string.other__qr_paste),
226+ onClick = {} // TODO IMPLEMENT
227+ )
228+ Spacer (modifier = Modifier .height(16 .dp))
193229 }
194230}
0 commit comments