Skip to content

Commit 17b2843

Browse files
committed
feat: implement tooltip in the qr image
1 parent 89ed2c5 commit 17b2843

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

app/src/main/java/to/bitkit/ui/components/QrCodeImage.kt

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package to.bitkit.ui.components
22

3+
import android.content.ClipData
34
import android.graphics.Bitmap
45
import androidx.compose.foundation.Image
56
import androidx.compose.foundation.background
@@ -12,11 +13,14 @@ import androidx.compose.foundation.layout.size
1213
import androidx.compose.foundation.shape.CircleShape
1314
import androidx.compose.foundation.shape.RoundedCornerShape
1415
import androidx.compose.material3.CircularProgressIndicator
16+
import androidx.compose.material3.ExperimentalMaterial3Api
17+
import androidx.compose.material3.rememberTooltipState
1518
import androidx.compose.runtime.Composable
1619
import androidx.compose.runtime.LaunchedEffect
1720
import androidx.compose.runtime.getValue
1821
import androidx.compose.runtime.mutableStateOf
1922
import androidx.compose.runtime.remember
23+
import androidx.compose.runtime.rememberCoroutineScope
2024
import androidx.compose.runtime.setValue
2125
import androidx.compose.ui.Alignment
2226
import androidx.compose.ui.Modifier
@@ -25,9 +29,14 @@ import androidx.compose.ui.graphics.asImageBitmap
2529
import androidx.compose.ui.graphics.painter.BitmapPainter
2630
import androidx.compose.ui.graphics.painter.Painter
2731
import 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
2835
import androidx.compose.ui.platform.LocalConfiguration
2936
import androidx.compose.ui.platform.LocalDensity
3037
import androidx.compose.ui.res.painterResource
38+
import androidx.compose.ui.res.stringResource
39+
import androidx.compose.ui.text.AnnotatedString
3140
import androidx.compose.ui.tooling.preview.Preview
3241
import androidx.compose.ui.unit.Dp
3342
import androidx.compose.ui.unit.dp
@@ -41,14 +50,22 @@ import to.bitkit.R
4150
import to.bitkit.ui.theme.AppThemeSurface
4251
import to.bitkit.ui.theme.Colors
4352
import androidx.core.graphics.createBitmap
53+
import to.bitkit.ui.shared.util.clickableAlpha
4454

55+
@OptIn(ExperimentalMaterial3Api::class)
4556
@Composable
4657
fun 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,

app/src/main/java/to/bitkit/ui/screens/wallets/receive/ReceiveQrScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ private fun ReceiveQrSlide(
444444
QrCodeImage(
445445
content = uri,
446446
logoPainter = qrLogoPainter,
447-
modifier = Modifier.weight(1f, fill = false)
447+
tipMessage = stringResource(R.string.wallet__receive_copied),
448+
modifier = Modifier.weight(1f, fill = false),
448449
)
449450

450451
Spacer(modifier = Modifier.height(16.dp))

0 commit comments

Comments
 (0)