Skip to content

Commit fff2ba3

Browse files
authored
Merge pull request #101 from synonymdev/fix/scan-layout
Scan Screen Adjustements
2 parents 57784a9 + 3dbffab commit fff2ba3

File tree

3 files changed

+121
-40
lines changed

3 files changed

+121
-40
lines changed

app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt

Lines changed: 76 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,19 @@ import androidx.camera.core.ImageAnalysis
1010
import androidx.camera.core.Preview
1111
import androidx.camera.lifecycle.ProcessCameraProvider
1212
import androidx.camera.view.PreviewView
13-
import androidx.compose.foundation.Canvas
1413
import androidx.compose.foundation.background
15-
import androidx.compose.foundation.border
1614
import androidx.compose.foundation.layout.Box
15+
import androidx.compose.foundation.layout.Column
16+
import androidx.compose.foundation.layout.Spacer
1717
import 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
1821
import androidx.compose.foundation.layout.size
22+
import androidx.compose.foundation.shape.CircleShape
1923
import androidx.compose.foundation.shape.RoundedCornerShape
24+
import androidx.compose.material.Icon
25+
import androidx.compose.material.IconButton
2026
import androidx.compose.runtime.Composable
2127
import androidx.compose.runtime.DisposableEffect
2228
import androidx.compose.runtime.LaunchedEffect
@@ -27,15 +33,10 @@ import androidx.compose.runtime.remember
2733
import androidx.compose.runtime.setValue
2834
import androidx.compose.ui.Alignment
2935
import androidx.compose.ui.Modifier
36+
import androidx.compose.ui.draw.clip
3037
import 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
3738
import androidx.compose.ui.platform.LocalContext
38-
import androidx.compose.ui.platform.LocalDensity
39+
import androidx.compose.ui.res.painterResource
3940
import androidx.compose.ui.res.stringResource
4041
import androidx.compose.ui.unit.dp
4142
import androidx.compose.ui.viewinterop.AndroidView
@@ -49,9 +50,11 @@ import kotlinx.coroutines.Dispatchers
4950
import kotlinx.coroutines.withContext
5051
import to.bitkit.R
5152
import to.bitkit.ui.appViewModel
53+
import to.bitkit.ui.components.PrimaryButton
5254
import to.bitkit.ui.scaffold.AppTopBar
5355
import to.bitkit.ui.scaffold.ScreenColumn
5456
import to.bitkit.ui.shared.util.gradientBackground
57+
import to.bitkit.ui.theme.Colors
5558
import to.bitkit.utils.Logger
5659
import 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
150157
private 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
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24">
6+
<path
7+
android:pathData="M18,7.25C18,7.412 17.947,7.57 17.85,7.7L15.9,10.3C15.803,10.43 15.75,10.588 15.75,10.75V21C15.75,21.199 15.671,21.39 15.53,21.53C15.39,21.671 15.199,21.75 15,21.75H9C8.801,21.75 8.61,21.671 8.47,21.53C8.329,21.39 8.25,21.199 8.25,21V10.75C8.25,10.588 8.197,10.43 8.1,10.3L6.15,7.7C6.053,7.57 6,7.412 6,7.25V6H18V7.25Z"
8+
android:strokeAlpha="0.2"
9+
android:fillColor="#ffffff"
10+
android:fillAlpha="0.2"/>
11+
<path
12+
android:pathData="M5.689,1.939C5.971,1.658 6.352,1.5 6.75,1.5H17.25C17.648,1.5 18.029,1.658 18.311,1.939C18.592,2.221 18.75,2.602 18.75,3V7.25C18.75,7.575 18.645,7.89 18.45,8.15L16.5,10.75L16.5,21C16.5,21.398 16.342,21.779 16.061,22.061C15.779,22.342 15.398,22.5 15,22.5H9C8.602,22.5 8.221,22.342 7.939,22.061C7.658,21.779 7.5,21.398 7.5,21L7.5,10.75L5.55,8.15C5.355,7.89 5.25,7.575 5.25,7.25V3C5.25,2.602 5.408,2.221 5.689,1.939ZM6.75,3L6.75,7.25L8.7,9.85C8.895,10.11 9,10.425 9,10.75V21H15V10.75C15,10.425 15.105,10.11 15.3,9.85L17.25,7.25V3H6.75Z"
13+
android:fillColor="#ffffff"
14+
android:fillType="evenOdd"/>
15+
<path
16+
android:pathData="M12,10.5C12.414,10.5 12.75,10.836 12.75,11.25V14.25C12.75,14.664 12.414,15 12,15C11.586,15 11.25,14.664 11.25,14.25V11.25C11.25,10.836 11.586,10.5 12,10.5Z"
17+
android:fillColor="#ffffff"
18+
android:fillType="evenOdd"/>
19+
<path
20+
android:pathData="M5.25,6C5.25,5.586 5.586,5.25 6,5.25H18C18.414,5.25 18.75,5.586 18.75,6C18.75,6.414 18.414,6.75 18,6.75H6C5.586,6.75 5.25,6.414 5.25,6Z"
21+
android:fillColor="#ffffff"
22+
android:fillType="evenOdd"/>
23+
</vector>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24">
6+
<path
7+
android:pathData="M3.75,16.5V4.5C3.75,4.301 3.829,4.11 3.97,3.97C4.11,3.829 4.301,3.75 4.5,3.75H19.5C19.699,3.75 19.89,3.829 20.03,3.97C20.171,4.11 20.25,4.301 20.25,4.5V15L20.25,15L16.28,11.03C16.14,10.89 15.949,10.811 15.75,10.811C15.551,10.811 15.36,10.89 15.22,11.03L11.03,15.22C10.89,15.36 10.699,15.439 10.5,15.439C10.301,15.439 10.11,15.36 9.97,15.22L8.03,13.28C7.89,13.14 7.699,13.061 7.5,13.061C7.301,13.061 7.11,13.14 6.97,13.28L3.75,16.5Z"
8+
android:strokeAlpha="0.2"
9+
android:fillColor="#ffffff"
10+
android:fillAlpha="0.2"/>
11+
<path
12+
android:pathData="M9.375,9.75C9.996,9.75 10.5,9.246 10.5,8.625C10.5,8.004 9.996,7.5 9.375,7.5C8.754,7.5 8.25,8.004 8.25,8.625C8.25,9.246 8.754,9.75 9.375,9.75Z"
13+
android:fillColor="#ffffff"/>
14+
<path
15+
android:pathData="M3,4.5C3,3.672 3.672,3 4.5,3H19.5C20.328,3 21,3.672 21,4.5V19.5C21,20.328 20.328,21 19.5,21H4.5C3.672,21 3,20.328 3,19.5V4.5ZM19.5,4.5H4.5V19.5H19.5V4.5Z"
16+
android:fillColor="#ffffff"
17+
android:fillType="evenOdd"/>
18+
<path
19+
android:pathData="M14.689,10.5C14.971,10.219 15.352,10.061 15.75,10.061C16.148,10.061 16.529,10.219 16.811,10.5L16.28,11.03L16.811,10.5L20.78,14.469C21.073,14.762 21.073,15.237 20.78,15.53C20.487,15.823 20.013,15.823 19.72,15.53L15.75,11.561L11.561,15.75C11.279,16.031 10.898,16.189 10.5,16.189C10.102,16.189 9.721,16.031 9.439,15.75L7.5,13.811L4.28,17.03C3.987,17.323 3.513,17.323 3.22,17.03C2.927,16.737 2.927,16.263 3.22,15.97L6.439,12.75L6.944,13.255L6.439,12.75C6.721,12.469 7.102,12.311 7.5,12.311C7.898,12.311 8.279,12.469 8.561,12.75L8.03,13.28L8.561,12.75L10.5,14.689L14.689,10.5Z"
20+
android:fillColor="#ffffff"
21+
android:fillType="evenOdd"/>
22+
</vector>

0 commit comments

Comments
 (0)