diff --git a/app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt b/app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt
index dcc4526bf..cb998de02 100644
--- a/app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt
+++ b/app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt
@@ -10,13 +10,19 @@ import androidx.camera.core.ImageAnalysis
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
-import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background
-import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
@@ -27,15 +33,10 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.clipToBounds
-import androidx.compose.ui.geometry.CornerRadius
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.graphics.BlendMode
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
@@ -49,9 +50,11 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import to.bitkit.R
import to.bitkit.ui.appViewModel
+import to.bitkit.ui.components.PrimaryButton
import to.bitkit.ui.scaffold.AppTopBar
import to.bitkit.ui.scaffold.ScreenColumn
import to.bitkit.ui.shared.util.gradientBackground
+import to.bitkit.ui.theme.Colors
import to.bitkit.utils.Logger
import java.util.concurrent.Executors
@@ -65,6 +68,7 @@ fun QrScanningScreen(
// TODO maybe replace & drop accompanist permissions
val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA)
val lensFacing by remember { mutableIntStateOf(CameraSelector.LENS_FACING_BACK) }
+ var isFlashlightOn by remember { mutableStateOf(false) }
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner) {
@@ -140,7 +144,10 @@ fun QrScanningScreen(
grantedContent = {
ScreenColumn(modifier = Modifier.gradientBackground()) {
AppTopBar(stringResource(R.string.title_scan), onBackClick = { navController.popBackStack() })
- Content(previewView = previewView)
+ Content(previewView = previewView, onClickCamera = {
+ isFlashlightOn = !isFlashlightOn
+ camera?.cameraControl?.enableTorch(isFlashlightOn)
+ })
}
}
)
@@ -149,46 +156,75 @@ fun QrScanningScreen(
@Composable
private fun Content(
previewView: PreviewView,
+ onClickCamera : () -> Unit,
modifier: Modifier = Modifier,
) {
- Box(modifier = modifier.fillMaxSize()) {
- AndroidView(
- modifier = Modifier
- .fillMaxSize()
- .clipToBounds(),
- factory = { previewView.apply { setLayerType(LAYER_TYPE_HARDWARE, null) } }
- )
- val (widthInPx, heightInPx, radiusInPx) = with(LocalDensity.current) {
- remember {
- Triple(350.dp.toPx(), 350.dp.toPx(), 16.dp.toPx())
- }
- }
-
+ Column(
+ modifier = modifier
+ .fillMaxSize()
+ .padding(horizontal = 16.dp)
+ ) {
Box(
- modifier = Modifier
- .fillMaxSize()
- .background(Color.Black.copy(alpha = .5f)),
- contentAlignment = Alignment.Center,
+ modifier = modifier
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(16.dp))
+ .weight(1f)
) {
- Canvas(
+ AndroidView(
+ modifier = Modifier
+ .fillMaxSize()
+ .clipToBounds(),
+ factory = { previewView.apply { setLayerType(LAYER_TYPE_HARDWARE, null) } }
+ )
+
+ IconButton(
+ onClick = {}, //TODO IMPLEMENT
modifier = Modifier
- .size(350.dp)
- .border(1.dp, Color.White, RoundedCornerShape(16.dp))
+ .padding(16.dp)
+ .clip(CircleShape)
+ .background(
+ Colors.White64
+ )
+ .size(48.dp)
+ .align(Alignment.TopStart)
) {
- val offset = Offset(
- x = (size.width - widthInPx) / 2,
- y = (size.height - heightInPx) / 2,
+ Icon(
+ painter = painterResource(R.drawable.ic_image_square),
+ contentDescription = null,
+ tint = Colors.White
)
- val cutoutRect = Rect(offset, Size(widthInPx, heightInPx))
+ }
- drawRoundRect(
- topLeft = cutoutRect.topLeft,
- size = cutoutRect.size,
- cornerRadius = CornerRadius(radiusInPx, radiusInPx),
- color = Color.Transparent,
- blendMode = BlendMode.Clear
+ IconButton(
+ onClick = onClickCamera,
+ modifier = Modifier
+ .padding(16.dp)
+ .clip(CircleShape)
+ .background(
+ Colors.White64
+ )
+ .size(48.dp)
+ .align(Alignment.TopEnd)
+ ) {
+ Icon(
+ painter = painterResource(R.drawable.ic_flashlight),
+ contentDescription = null,
+ tint = Colors.White
)
}
}
+ Spacer(modifier = Modifier.height(16.dp))
+ PrimaryButton(
+ icon = {
+ Icon(
+ painterResource(R.drawable.ic_clipboard_text_simple),
+ contentDescription = null,
+ tint = Colors.White
+ )
+ },
+ text = stringResource(R.string.other__qr_paste),
+ onClick = {} //TODO IMPLEMENT
+ )
+ Spacer(modifier = Modifier.height(16.dp))
}
}
diff --git a/app/src/main/res/drawable/ic_flashlight.xml b/app/src/main/res/drawable/ic_flashlight.xml
new file mode 100644
index 000000000..88e2219b0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_flashlight.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_image_square.xml b/app/src/main/res/drawable/ic_image_square.xml
new file mode 100644
index 000000000..623982518
--- /dev/null
+++ b/app/src/main/res/drawable/ic_image_square.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+