Skip to content

Commit 941898b

Browse files
committed
chore: clean up access key QR generation
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent dbbde28 commit 941898b

4 files changed

Lines changed: 62 additions & 61 deletions

File tree

app/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ dependencies {
190190
implementation(Libs.hilt_nav_compose)
191191
implementation(Libs.lib_phone_number_port)
192192
implementation(Libs.mp_android_chart)
193-
implementation(Libs.qr_generator)
194193
implementation(Libs.zxing)
195194
implementation(Libs.mixpanel)
196195

app/src/main/java/com/getcode/util/QRCodeGenerator.kt

Lines changed: 60 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package com.getcode.util
22

33
import android.graphics.Bitmap
44
import android.graphics.Color
5-
import androidmads.library.qrgenearator.QRGContents
6-
import androidmads.library.qrgenearator.QRGEncoder
75
import androidx.compose.runtime.Composable
86
import androidx.compose.runtime.LaunchedEffect
97
import androidx.compose.runtime.getValue
@@ -15,25 +13,21 @@ import androidx.compose.ui.graphics.painter.BitmapPainter
1513
import androidx.compose.ui.platform.LocalDensity
1614
import androidx.compose.ui.unit.Dp
1715
import androidx.compose.ui.unit.dp
18-
import com.getcode.theme.Transparent
19-
import com.getcode.theme.White
20-
import com.getcode.ui.utils.toAGColor
2116
import com.google.zxing.BarcodeFormat
2217
import com.google.zxing.EncodeHintType
2318
import com.google.zxing.WriterException
2419
import com.google.zxing.qrcode.QRCodeWriter
2520
import kotlinx.coroutines.Dispatchers
2621
import kotlinx.coroutines.launch
2722

28-
fun generateQrCode(url: String, size: Int? = null): Bitmap? {
29-
val qrgEncoder = if (size == null) {
30-
QRGEncoder(url, QRGContents.Type.TEXT)
31-
} else {
32-
QRGEncoder(url, null, QRGContents.Type.TEXT, size)
33-
}
34-
qrgEncoder.colorBlack = White.toAGColor()
35-
qrgEncoder.colorWhite = Transparent.toAGColor()
36-
return qrgEncoder.bitmap
23+
fun generateQrCode(url: String, size: Int): Bitmap? {
24+
return generateQr(
25+
url = url,
26+
size = size,
27+
padding = 0,
28+
contentColor = Color.WHITE,
29+
spaceColor = Color.TRANSPARENT
30+
)
3731
}
3832

3933
@Composable
@@ -47,7 +41,6 @@ fun rememberQrBitmapPainter(
4741
val sizePx = with(density) { size.roundToPx() }
4842
val paddingPx = with(density) { padding.roundToPx() }
4943

50-
5144
var bitmap by remember(content) {
5245
mutableStateOf<Bitmap?>(null)
5346
}
@@ -56,45 +49,11 @@ fun rememberQrBitmapPainter(
5649
if (bitmap != null) return@LaunchedEffect
5750

5851
launch(Dispatchers.IO) {
59-
val qrCodeWriter = QRCodeWriter()
60-
61-
val encodeHints = mutableMapOf<EncodeHintType, Any?>()
62-
.apply {
63-
this[EncodeHintType.MARGIN] = paddingPx
64-
}
65-
66-
val bitmapMatrix = try {
67-
qrCodeWriter.encode(
68-
content, BarcodeFormat.QR_CODE,
69-
sizePx, sizePx, encodeHints
70-
)
71-
} catch (ex: WriterException) {
72-
null
73-
}
74-
75-
val matrixWidth = bitmapMatrix?.width ?: sizePx
76-
val matrixHeight = bitmapMatrix?.height ?: sizePx
77-
78-
val newBitmap = Bitmap.createBitmap(
79-
bitmapMatrix?.width ?: sizePx,
80-
bitmapMatrix?.height ?: sizePx,
81-
Bitmap.Config.ARGB_8888,
52+
bitmap = generateQr(
53+
url = content,
54+
size = sizePx,
55+
padding = paddingPx,
8256
)
83-
84-
val pixels = IntArray(matrixWidth * matrixHeight)
85-
86-
for (x in 0 until matrixWidth) {
87-
for (y in 0 until matrixHeight) {
88-
val shouldColorPixel = bitmapMatrix?.get(x, y) ?: false
89-
val pixelColor = if (shouldColorPixel) Color.BLACK else Color.WHITE
90-
91-
pixels[y * matrixWidth + x] = pixelColor
92-
}
93-
}
94-
95-
newBitmap.setPixels(pixels, 0, matrixWidth, 0, 0, matrixWidth, matrixHeight)
96-
97-
bitmap = newBitmap
9857
}
9958
}
10059

@@ -107,3 +66,51 @@ fun rememberQrBitmapPainter(
10766
BitmapPainter(currentBitmap.asImageBitmap())
10867
}
10968
}
69+
70+
private fun generateQr(
71+
url: String,
72+
size: Int,
73+
padding: Int,
74+
contentColor: Int = Color.BLACK,
75+
spaceColor: Int = Color.WHITE,
76+
): Bitmap {
77+
val qrCodeWriter = QRCodeWriter()
78+
79+
val encodeHints = mutableMapOf<EncodeHintType, Any?>()
80+
.apply {
81+
this[EncodeHintType.MARGIN] = padding
82+
}
83+
84+
val bitmapMatrix = try {
85+
qrCodeWriter.encode(
86+
url, BarcodeFormat.QR_CODE,
87+
size, size, encodeHints
88+
)
89+
} catch (ex: WriterException) {
90+
null
91+
}
92+
93+
val matrixWidth = bitmapMatrix?.width ?: size
94+
val matrixHeight = bitmapMatrix?.height ?: size
95+
96+
val newBitmap = Bitmap.createBitmap(
97+
bitmapMatrix?.width ?: size,
98+
bitmapMatrix?.height ?: size,
99+
Bitmap.Config.ARGB_8888,
100+
)
101+
102+
val pixels = IntArray(matrixWidth * matrixHeight)
103+
104+
for (x in 0 until matrixWidth) {
105+
for (y in 0 until matrixHeight) {
106+
val shouldColorPixel = bitmapMatrix?.get(x, y) ?: false
107+
val pixelColor = if (shouldColorPixel) contentColor else spaceColor
108+
109+
pixels[y * matrixWidth + x] = pixelColor
110+
}
111+
}
112+
113+
newBitmap.setPixels(pixels, 0, matrixWidth, 0, 0, matrixWidth, matrixHeight)
114+
115+
return newBitmap
116+
}

app/src/main/java/com/getcode/view/login/BaseAccessKeyViewModel.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,19 @@ import android.graphics.Canvas
55
import android.graphics.Paint
66
import android.graphics.Typeface
77
import android.os.Environment
8-
import androidmads.library.qrgenearator.QRGContents
9-
import androidmads.library.qrgenearator.QRGEncoder
108
import androidx.core.graphics.applyCanvas
119
import androidx.core.graphics.drawable.toBitmap
1210
import androidx.lifecycle.viewModelScope
1311
import com.getcode.R
14-
import com.getcode.media.MediaScanner
1512
import com.getcode.manager.MnemonicManager
1613
import com.getcode.manager.SessionManager
1714
import com.getcode.manager.TopBarManager
15+
import com.getcode.media.MediaScanner
1816
import com.getcode.network.repository.TransactionRepository
1917
import com.getcode.network.repository.TransactionRepository.DeniedReason
2018
import com.getcode.network.repository.decodeBase64
2119
import com.getcode.theme.Alert
22-
import com.getcode.theme.R as themeR
2320
import com.getcode.theme.Brand
24-
import com.getcode.theme.Transparent
2521
import com.getcode.theme.White
2622
import com.getcode.ui.utils.toAGColor
2723
import com.getcode.util.generateQrCode
@@ -41,6 +37,7 @@ import java.text.DateFormat
4137
import java.text.SimpleDateFormat
4238
import java.util.Date
4339
import java.util.Locale
40+
import com.getcode.theme.R as themeR
4441

4542

4643
data class AccessKeyUiModel(

buildSrc/src/main/java/Dependencies.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ object Versions {
6666
const val lib_phone_number_port: String = "8.12.43"
6767
const val lib_phone_number_google: String = "8.12.54"
6868
const val hilt_nav_compose: String = "1.1.0-alpha02"
69-
const val qr_generator: String = "1.0.1"
7069
const val zxing: String = "3.3.2"
7170

7271
const val androidx_test_runner = "1.4.0"
@@ -224,7 +223,6 @@ object Libs {
224223
const val lib_phone_number_port = "io.michaelrocks:libphonenumber-android:${Versions.lib_phone_number_port}"
225224
const val lib_phone_number_google = "com.googlecode.libphonenumber:libphonenumber:${Versions.lib_phone_number_google}"
226225
const val hilt_nav_compose = "androidx.hilt:hilt-navigation-compose:1.1.0-alpha01"
227-
const val qr_generator = "com.github.androidmads:QRGenerator:${Versions.qr_generator}"
228226
const val zxing = "com.google.zxing:core:${Versions.zxing}"
229227

230228
const val retrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}"

0 commit comments

Comments
 (0)