Skip to content

Commit f49306a

Browse files
author
Simon Schubert
committed
FIx crash and migrate deprecated
1 parent f68457d commit f49306a

2 files changed

Lines changed: 35 additions & 45 deletions

File tree

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/ui/composables/CommandView.kt

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ import android.content.Context
44
import android.content.Intent
55
import androidx.compose.foundation.layout.Row
66
import androidx.compose.foundation.layout.padding
7-
import androidx.compose.foundation.text.ClickableText
87
import androidx.compose.material.Icon
98
import androidx.compose.material.IconButton
109
import androidx.compose.material.MaterialTheme
10+
import androidx.compose.material.Text
1111
import androidx.compose.material.icons.Icons
1212
import androidx.compose.material.icons.filled.Share
1313
import androidx.compose.runtime.Composable
1414
import androidx.compose.runtime.remember
1515
import androidx.compose.ui.Alignment
1616
import androidx.compose.ui.Modifier
1717
import androidx.compose.ui.platform.LocalContext
18-
import androidx.compose.ui.platform.LocalUriHandler
1918
import androidx.compose.ui.res.stringResource
19+
import androidx.compose.ui.text.LinkAnnotation
2020
import androidx.compose.ui.text.SpanStyle
2121
import androidx.compose.ui.text.buildAnnotatedString
2222
import androidx.compose.ui.text.withStyle
@@ -49,68 +49,57 @@ fun CommandView(
4949
onNavigate: (String) -> Unit = {},
5050
) {
5151
val codeColor = MaterialTheme.colors.primary
52-
val annotatedString = remember(codeColor) {
52+
val annotatedString = remember(elements, codeColor) {
5353
buildAnnotatedString {
54-
elements.forEachIndexed { index, element ->
54+
elements.forEach { element ->
5555
when (element) {
56-
is CommandElement.Text -> append(element.text)
56+
is CommandElement.Text -> {
57+
append(element.text)
58+
}
5759
is CommandElement.Man -> {
58-
pushStringAnnotation(tag = "$index", annotation = element.man)
60+
val start = this.length
5961
withStyle(style = SpanStyle(color = codeColor)) {
6062
append(element.man)
6163
}
62-
pop()
64+
val end = this.length
65+
addLink(
66+
LinkAnnotation.Clickable(
67+
tag = "man:${element.man}",
68+
linkInteractionListener = {
69+
val manCommand = databaseHelper.getCommand(element.man)
70+
if (manCommand != null) {
71+
onNavigate("command?commandId=${manCommand.id}&commandName=${manCommand.name}")
72+
}
73+
},
74+
),
75+
start,
76+
end,
77+
)
6378
}
64-
6579
is CommandElement.Url -> {
66-
pushStringAnnotation(tag = "$index", annotation = element.url)
80+
val start = this.length
6781
withStyle(style = SpanStyle(color = codeColor)) {
6882
append(element.command)
6983
}
70-
pop()
84+
val end = this.length
85+
addLink(
86+
LinkAnnotation.Url(element.url),
87+
start,
88+
end,
89+
)
7190
}
7291
}
7392
}
7493
}
7594
}
7695

77-
val uriHandler = LocalUriHandler.current
78-
Row(modifier = Modifier.padding(start = 12.dp, end = 4.dp, top = 8.dp, bottom = 8.dp)) {
79-
ClickableText(
96+
Row(modifier = Modifier.padding(start = 12.dp, end = 4.dp, top = 6.dp, bottom = 6.dp)) {
97+
Text(
8098
text = annotatedString,
8199
modifier = Modifier
82100
.weight(1f)
83101
.align(Alignment.CenterVertically),
84102
style = MaterialTheme.typography.subtitle2,
85-
onClick = { offset ->
86-
elements.forEachIndexed { index, element ->
87-
if (element is CommandElement.Url) {
88-
annotatedString.getStringAnnotations(
89-
tag = "$index",
90-
start = offset,
91-
end = offset,
92-
)
93-
.firstOrNull()
94-
?.let {
95-
uriHandler.openUri(it.item)
96-
}
97-
}
98-
if (element is CommandElement.Man) {
99-
annotatedString.getStringAnnotations(
100-
tag = "$index",
101-
start = offset,
102-
end = offset,
103-
)
104-
.firstOrNull()
105-
?.let {
106-
val manCommand = databaseHelper.getCommand(it.item)
107-
if (manCommand != null) {
108-
onNavigate("command?commandId=${manCommand.id}&commandName=${manCommand.name}")
109-
}
110-
}
111-
}
112-
}
113-
},
114103
)
115104

116105
val context = LocalContext.current

android/src/main/java/com/inspiredandroid/linuxcommandbibliotheca/ui/screens/commanddetail/CommandDetailScreen.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ private fun CommandSectionColumn(
110110
Text(
111111
text = split[0],
112112
fontSize = 15.sp,
113-
style = MaterialTheme.typography.subtitle1,
114113
fontWeight = FontWeight.Bold,
115114
)
116115

@@ -181,10 +180,12 @@ private fun getCommands(input: String): List<String> {
181180
private fun String.toAnnotatedString(): AnnotatedString {
182181
val spanned = HtmlCompat.fromHtml(this, HtmlCompat.FROM_HTML_MODE_LEGACY)
183182

183+
val trimmedText = spanned.toString().trim('\n', ' ')
184+
184185
return buildAnnotatedString {
185-
append(spanned.toString().trim('\n', ' '))
186+
append(trimmedText)
186187

187-
spanned.getSpans(0, spanned.length, Any::class.java).forEach { span ->
188+
spanned.getSpans(0, trimmedText.length, Any::class.java).forEach { span ->
188189
val start = spanned.getSpanStart(span)
189190
val end = spanned.getSpanEnd(span)
190191

0 commit comments

Comments
 (0)