11package to.bitkit.ui.components
22
3+ import android.content.ClipData
34import android.graphics.Bitmap
45import androidx.compose.foundation.Image
56import androidx.compose.foundation.background
@@ -12,11 +13,14 @@ import androidx.compose.foundation.layout.size
1213import androidx.compose.foundation.shape.CircleShape
1314import androidx.compose.foundation.shape.RoundedCornerShape
1415import androidx.compose.material3.CircularProgressIndicator
16+ import androidx.compose.material3.ExperimentalMaterial3Api
17+ import androidx.compose.material3.rememberTooltipState
1518import androidx.compose.runtime.Composable
1619import androidx.compose.runtime.LaunchedEffect
1720import androidx.compose.runtime.getValue
1821import androidx.compose.runtime.mutableStateOf
1922import androidx.compose.runtime.remember
23+ import androidx.compose.runtime.rememberCoroutineScope
2024import androidx.compose.runtime.setValue
2125import androidx.compose.ui.Alignment
2226import androidx.compose.ui.Modifier
@@ -25,9 +29,14 @@ import androidx.compose.ui.graphics.asImageBitmap
2529import androidx.compose.ui.graphics.painter.BitmapPainter
2630import androidx.compose.ui.graphics.painter.Painter
2731import androidx.compose.ui.layout.ContentScale
32+ import androidx.compose.ui.platform.ClipEntry
33+ import androidx.compose.ui.platform.LocalClipboard
34+ import androidx.compose.ui.platform.LocalClipboardManager
2835import androidx.compose.ui.platform.LocalConfiguration
2936import androidx.compose.ui.platform.LocalDensity
3037import androidx.compose.ui.res.painterResource
38+ import androidx.compose.ui.res.stringResource
39+ import androidx.compose.ui.text.AnnotatedString
3140import androidx.compose.ui.tooling.preview.Preview
3241import androidx.compose.ui.unit.Dp
3342import androidx.compose.ui.unit.dp
@@ -41,14 +50,22 @@ import to.bitkit.R
4150import to.bitkit.ui.theme.AppThemeSurface
4251import to.bitkit.ui.theme.Colors
4352import androidx.core.graphics.createBitmap
53+ import to.bitkit.ui.shared.util.clickableAlpha
4454
55+ @OptIn(ExperimentalMaterial3Api ::class )
4556@Composable
4657fun QrCodeImage (
4758 content : String ,
4859 modifier : Modifier = Modifier ,
4960 logoPainter : Painter ? = null,
61+ tipMessage : String = "",
5062 size : Dp = LocalConfiguration .current.screenWidthDp.dp,
5163) {
64+ val clipboard = LocalClipboardManager .current
65+
66+ val tooltipState = rememberTooltipState()
67+ val coroutineScope = rememberCoroutineScope()
68+
5269 Box (
5370 contentAlignment = Alignment .TopCenter ,
5471 modifier = modifier
@@ -59,11 +76,24 @@ fun QrCodeImage(
5976 val bitmap = rememberQrBitmap(content, size)
6077
6178 if (bitmap != null ) {
62- Image (
63- painter = remember(bitmap) { BitmapPainter (bitmap.asImageBitmap()) },
64- contentDescription = null ,
65- contentScale = ContentScale .Inside ,
66- )
79+ Tooltip (
80+ text = tipMessage,
81+ tooltipState = tooltipState
82+ ) {
83+ Image (
84+ painter = remember(bitmap) { BitmapPainter (bitmap.asImageBitmap()) },
85+ contentDescription = null ,
86+ contentScale = ContentScale .Inside ,
87+ modifier = if (tipMessage.isNotBlank()) {
88+ Modifier .clickableAlpha {
89+ coroutineScope.launch {
90+ tooltipState.show()
91+ clipboard.setText(AnnotatedString (content))
92+ }
93+ }
94+ } else Modifier
95+ )
96+ }
6797 logoPainter?.let {
6898 Box (
6999 contentAlignment = Alignment .Center ,
0 commit comments