Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
ecbe6ed
feat: customize button
jvsena42 Dec 1, 2025
1f06a8e
feat: camera view
jvsena42 Dec 1, 2025
5ee42a0
feat: fill width
jvsena42 Dec 1, 2025
fdff73e
feat: permission denied view
jvsena42 Dec 1, 2025
8cfff71
chore: lint
jvsena42 Dec 2, 2025
43946a0
fix: add title
jvsena42 Dec 2, 2025
98c830b
fix: camera cool down
jvsena42 Dec 2, 2025
f14c503
Merge branch 'feat/new-receive-sheet' into feat/send-sheet-redesign
jvsena42 Dec 2, 2025
d846b53
fix: update RectangleButton icon
jvsena42 Dec 2, 2025
e355f92
chore: lint
jvsena42 Dec 2, 2025
e306508
chore: lint
jvsena42 Dec 2, 2025
243f412
Merge branch 'feat/new-receive-sheet' into feat/send-sheet-redesign
jvsena42 Dec 2, 2025
2d0831c
fix: camera permission request
jvsena42 Dec 2, 2025
2da93c1
fix: move camera unbinding to IO dispatcher
jvsena42 Dec 2, 2025
be488e9
refactor: code duplication
jvsena42 Dec 2, 2025
bd7ffe6
chore: lint
jvsena42 Dec 2, 2025
73bad57
Merge branch 'feat/new-receive-sheet' into feat/send-sheet-redesign
jvsena42 Dec 2, 2025
3c561b2
Merge branch 'feat/new-receive-sheet' into feat/send-sheet-redesign
jvsena42 Dec 3, 2025
5ae9878
Merge branch 'feat/new-receive-sheet' into feat/send-sheet-redesign
jvsena42 Dec 3, 2025
154f92c
Merge branch 'master' into feat/send-sheet-redesign
jvsena42 Dec 4, 2025
8a7c8f6
fix: send sheet icon tint
jvsena42 Dec 4, 2025
5e49f0f
Merge branch 'master' into feat/send-sheet-redesign
jvsena42 Dec 4, 2025
3e5d965
fix: camera rebinding
jvsena42 Dec 5, 2025
9b64504
fix: camera initialization caching
jvsena42 Dec 5, 2025
f8bdf49
fix: add a delay transition to open the sheet
jvsena42 Dec 5, 2025
c3f9283
refactor: extract content composable
jvsena42 Dec 5, 2025
eb72e8b
fix: camera permission check
jvsena42 Dec 5, 2025
54fe447
fix: add executor cleanup
jvsena42 Dec 5, 2025
2e54682
refactor: extract shared gallery callbacks
jvsena42 Dec 5, 2025
04a00cf
refactor: use lifecycle-aware permission request
jvsena42 Dec 5, 2025
1bb11c7
refactor: remove unused scope
jvsena42 Dec 5, 2025
767569f
fix: icons size
jvsena42 Dec 5, 2025
944fecd
chore: lint
jvsena42 Dec 5, 2025
21fe26a
chore: lint
jvsena42 Dec 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions app/src/main/java/to/bitkit/ui/components/RectangleButton.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ package to.bitkit.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
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.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ContentPaste
import androidx.compose.material3.Button
Expand All @@ -22,9 +20,9 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import to.bitkit.R
import to.bitkit.ui.theme.AppShapes
import to.bitkit.ui.theme.AppThemeSurface
import to.bitkit.ui.theme.Colors
import to.bitkit.ui.theme.Shapes

@Composable
fun RectangleButton(
Expand All @@ -37,20 +35,20 @@ fun RectangleButton(
Button(
onClick = onClick,
colors = ButtonDefaults.buttonColors(
containerColor = Colors.White10,
containerColor = Colors.Gray6,
),
enabled = enabled,
shape = AppShapes.small,
contentPadding = PaddingValues(24.dp),
shape = Shapes.medium,
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 0.dp),
modifier = modifier
.alpha(if (enabled) 1f else 0.5f)
.height(80.dp)
.fillMaxWidth()
) {
icon()
Spacer(modifier = Modifier.width(16.dp))
HorizontalSpacer(16.dp)
BodyMSB(text = label, color = Colors.White)
Spacer(modifier = Modifier.weight(1f))
FillWidth()
}
}

Expand Down
25 changes: 17 additions & 8 deletions app/src/main/java/to/bitkit/ui/screens/scanner/QrCodeAnalyzer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,21 @@ import to.bitkit.utils.Logger
class QrCodeAnalyzer(
private val onScanResult: (Result<String>) -> Unit,
) : ImageAnalysis.Analyzer {
private var isScanning = true
private var lastScannedCode: String? = null
private var lastScanTime: Long = 0
private val scanCooldownMs = 2000L // 2 seconds cooldown between scans

private val scannerOptions = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
private val scanner: BarcodeScanner = BarcodeScanning.getClient(scannerOptions)

override fun analyze(image: ImageProxy) {
if (!isScanning) {
image.close()
return
}
fun reset() {
lastScannedCode = null
lastScanTime = 0
}

override fun analyze(image: ImageProxy) {
if (image.image != null) {
val inputImage = InputImage.fromMediaImage(image.image!!, image.imageInfo.rotationDegrees)
scanner.process(inputImage)
Expand All @@ -37,8 +39,15 @@ class QrCodeAnalyzer(
it.result.let { barcodes ->
barcodes.forEach { barcode ->
barcode.rawValue?.let { qrCode ->
isScanning = false
onScanResult(Result.success(qrCode))
val currentTime = System.currentTimeMillis()
val isDifferentCode = qrCode != lastScannedCode
val isCooldownExpired = currentTime - lastScanTime > scanCooldownMs

if (isDifferentCode || isCooldownExpired) {
lastScannedCode = qrCode
lastScanTime = currentTime
onScanResult(Result.success(qrCode))
}
image.close()
return@addOnCompleteListener
}
Expand Down
Loading
Loading