@@ -8,6 +8,9 @@ import androidx.compose.foundation.layout.aspectRatio
88import androidx.compose.foundation.layout.fillMaxSize
99import androidx.compose.foundation.layout.fillMaxWidth
1010import androidx.compose.foundation.layout.padding
11+ import androidx.compose.foundation.layout.size
12+ import androidx.compose.foundation.shape.CircleShape
13+ import androidx.compose.foundation.shape.RoundedCornerShape
1114import androidx.compose.material3.CircularProgressIndicator
1215import androidx.compose.runtime.Composable
1316import androidx.compose.runtime.LaunchedEffect
@@ -20,8 +23,12 @@ import androidx.compose.ui.Modifier
2023import androidx.compose.ui.graphics.Color
2124import androidx.compose.ui.graphics.asImageBitmap
2225import androidx.compose.ui.graphics.painter.BitmapPainter
26+ import androidx.compose.ui.graphics.painter.Painter
27+ import androidx.compose.ui.layout.ContentScale
2328import androidx.compose.ui.platform.LocalConfiguration
2429import androidx.compose.ui.platform.LocalDensity
30+ import androidx.compose.ui.res.painterResource
31+ import androidx.compose.ui.tooling.preview.Preview
2532import androidx.compose.ui.unit.Dp
2633import androidx.compose.ui.unit.dp
2734import com.google.zxing.BarcodeFormat
@@ -30,18 +37,23 @@ import com.google.zxing.WriterException
3037import com.google.zxing.qrcode.QRCodeWriter
3138import kotlinx.coroutines.Dispatchers
3239import kotlinx.coroutines.launch
40+ import to.bitkit.R
41+ import to.bitkit.ui.theme.AppThemeSurface
42+ import to.bitkit.ui.theme.Colors
43+ import androidx.core.graphics.createBitmap
3344
3445@Composable
3546fun QrCodeImage (
3647 content : String ,
3748 modifier : Modifier = Modifier ,
49+ logoPainter : Painter ? = null,
3850 size : Dp = LocalConfiguration .current.screenWidthDp.dp,
3951) {
4052 Box (
4153 contentAlignment = Alignment .TopCenter ,
4254 modifier = modifier
4355 .fillMaxWidth()
44- .background(Color .White )
56+ .background(Color .White , RoundedCornerShape ( 8 .dp) )
4557 .aspectRatio(1f )
4658 .padding(16 .dp)
4759 ) {
@@ -53,8 +65,27 @@ fun QrCodeImage(
5365 contentDescription = null ,
5466 modifier = Modifier .fillMaxSize(),
5567 )
68+ logoPainter?.let {
69+ Box (
70+ contentAlignment = Alignment .Center ,
71+ modifier = Modifier
72+ .size(68 .dp)
73+ .background(Color .White , shape = CircleShape )
74+ .align(Alignment .Center )
75+ ) {
76+ Image (
77+ painter = it,
78+ contentDescription = null ,
79+ modifier = Modifier .size(50 .dp),
80+ contentScale = ContentScale .Fit
81+ )
82+ }
83+ }
5684 } else {
57- CircularProgressIndicator ()
85+ CircularProgressIndicator (
86+ color = Colors .Black ,
87+ modifier = Modifier .align(Alignment .Center )
88+ )
5889 }
5990 }
6091}
@@ -84,17 +115,16 @@ private fun rememberQrBitmap(content: String, size: Dp): Bitmap? {
84115 sizePx,
85116 encodeHints,
86117 )
87- } catch (ex : WriterException ) {
118+ } catch (_ : WriterException ) {
88119 null
89120 }
90121
91122 val matrixWidth = bitmapMatrix?.width ? : sizePx
92123 val matrixHeight = bitmapMatrix?.height ? : sizePx
93124
94- val newBitmap = Bitmap .createBitmap(
95- bitmapMatrix?.width ? : sizePx,
96- bitmapMatrix?.height ? : sizePx,
97- Bitmap .Config .ARGB_8888 ,
125+ val newBitmap = createBitmap(
126+ width = bitmapMatrix?.width ? : sizePx,
127+ height = bitmapMatrix?.height ? : sizePx
98128 )
99129
100130 val pixels = IntArray (matrixWidth * matrixHeight)
@@ -117,3 +147,15 @@ private fun rememberQrBitmap(content: String, size: Dp): Bitmap? {
117147 }
118148 return bitmap
119149}
150+
151+ @Preview(showBackground = true )
152+ @Composable
153+ private fun Preview () {
154+ AppThemeSurface {
155+ QrCodeImage (
156+ content = " https://bitkit.to" ,
157+ logoPainter = painterResource(R .drawable.ic_btc_circle),
158+ modifier = Modifier .padding(16 .dp)
159+ )
160+ }
161+ }
0 commit comments