Skip to content

Commit 446bac0

Browse files
committed
perf: RecordService copy text
1 parent 53987a7 commit 446bac0

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

app/src/main/kotlin/li/songe/gkd/service/RecordService.kt

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package li.songe.gkd.service
22

33
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.clickable
45
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
7+
import androidx.compose.foundation.layout.Row
8+
import androidx.compose.foundation.layout.Spacer
69
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.layout.width
711
import androidx.compose.material3.LocalContentColor
812
import androidx.compose.material3.MaterialTheme
913
import androidx.compose.material3.Text
@@ -29,8 +33,11 @@ import li.songe.gkd.permission.canDrawOverlaysState
2933
import li.songe.gkd.shizuku.SafeTaskListener
3034
import li.songe.gkd.shizuku.shizukuContextFlow
3135
import li.songe.gkd.ui.component.AppNameText
36+
import li.songe.gkd.ui.component.PerfIcon
3237
import li.songe.gkd.ui.style.AppTheme
38+
import li.songe.gkd.ui.style.iconTextSize
3339
import li.songe.gkd.util.appInfoMapFlow
40+
import li.songe.gkd.util.copyText
3441
import li.songe.gkd.util.startForegroundServiceByClass
3542
import li.songe.gkd.util.stopServiceByClass
3643

@@ -40,7 +47,7 @@ class RecordService : OverlayWindowService(
4047
) {
4148

4249
val topAppInfoFlow by lazy {
43-
appInfoMapFlow.combine(topActivityFlow) { map, topActivity ->
50+
combine(appInfoMapFlow, topActivityFlow) { map, topActivity ->
4451
map[topActivity.appId]
4552
}.stateIn(lifecycleScope, SharingStarted.Eagerly, null)
4653
}
@@ -58,7 +65,7 @@ class RecordService : OverlayWindowService(
5865
modifier = Modifier
5966
.clip(MaterialTheme.shapes.small)
6067
.background(bgColor.copy(alpha = 0.9f))
61-
.padding(horizontal = 4.dp, vertical = 2.dp)
68+
.padding(4.dp)
6269
) {
6370
CompositionLocalProvider(LocalContentColor provides contentColorFor(bgColor)) {
6471
if (activityOkFlow.collectAsState().value) {
@@ -77,7 +84,10 @@ class RecordService : OverlayWindowService(
7784
topAppInfoFlow.collectAsState().value?.let {
7885
AppNameText(appInfo = it)
7986
}
80-
Text(text = "${topActivity.appId}\n${topActivity.shortActivityId}")
87+
RowText(text = topActivity.appId)
88+
topActivity.shortActivityId?.let {
89+
RowText(text = it)
90+
}
8191
}
8292
} else {
8393
Column {
@@ -113,4 +123,21 @@ class RecordService : OverlayWindowService(
113123

114124
fun stop() = stopServiceByClass(RecordService::class)
115125
}
116-
}
126+
}
127+
128+
@Composable
129+
private fun RowText(text: String) {
130+
Row {
131+
Text(text = text, modifier = Modifier.weight(1f, false))
132+
Spacer(modifier = Modifier.width(4.dp))
133+
PerfIcon(
134+
imageVector = PerfIcon.ContentCopy,
135+
modifier = Modifier
136+
.clip(MaterialTheme.shapes.extraSmall)
137+
.clickable(onClick = {
138+
copyText(text)
139+
})
140+
.iconTextSize(),
141+
)
142+
}
143+
}

app/src/main/kotlin/li/songe/gkd/ui/style/Padding.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ package li.songe.gkd.ui.style
22

33
import androidx.compose.foundation.layout.PaddingValues
44
import androidx.compose.foundation.layout.padding
5+
import androidx.compose.foundation.layout.size
6+
import androidx.compose.material3.LocalTextStyle
57
import androidx.compose.material3.MenuDefaults
8+
import androidx.compose.runtime.Composable
69
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.platform.LocalDensity
711
import androidx.compose.ui.unit.dp
812

913
val itemHorizontalPadding = 16.dp
@@ -32,3 +36,12 @@ fun Modifier.scaffoldPadding(values: PaddingValues): Modifier {
3236
// 被 LazyXXX 使用时, 移除 bottom padding, 否则 底部导航栏 无法实现透明背景
3337
)
3438
}
39+
40+
@Composable
41+
fun Modifier.iconTextSize(): Modifier {
42+
val density = LocalDensity.current
43+
val textStyle = LocalTextStyle.current
44+
val lineHeightDp = density.run { textStyle.lineHeight.toDp() }
45+
val fontSizeDp = density.run { textStyle.fontSize.toDp() }
46+
return padding((lineHeightDp - fontSizeDp) / 2).size(fontSizeDp)
47+
}

0 commit comments

Comments
 (0)