mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-10-10 00:13:08 +02:00
Merge pull request #230 from maxmoney21m/bugfix/223-invoice-intent
Fix LN invoice in expandable text component
This commit is contained in:
@@ -152,4 +152,22 @@ object LnInvoiceUtil {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the string contains an LN invoice, returns a Pair of the start and end
|
||||||
|
* positions of the invoice in the string. Otherwise, returns (0, 0). This is
|
||||||
|
* used to ensure we don't accidentally cut an invoice in the middle when taking
|
||||||
|
* only a portion of the available text.
|
||||||
|
*/
|
||||||
|
fun locateInvoice(input: String?): Pair<Int, Int> {
|
||||||
|
if (input == null) {
|
||||||
|
return Pair(0, 0)
|
||||||
|
}
|
||||||
|
val matcher = invoicePattern.matcher(input)
|
||||||
|
return if (matcher.find()) {
|
||||||
|
Pair(matcher.start(), matcher.end())
|
||||||
|
} else {
|
||||||
|
Pair(0, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,8 +26,11 @@ import androidx.compose.ui.res.stringResource
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
|
import com.vitorpamplona.amethyst.service.lnurl.LnInvoiceUtil
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
|
|
||||||
|
const val SHORT_TEXT_LENGTH = 350
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ExpandableRichTextViewer(
|
fun ExpandableRichTextViewer(
|
||||||
content: String,
|
content: String,
|
||||||
@@ -40,7 +43,16 @@ fun ExpandableRichTextViewer(
|
|||||||
) {
|
) {
|
||||||
var showFullText by remember { mutableStateOf(false) }
|
var showFullText by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
val text = if (showFullText) content else content.take(350)
|
val text = if (showFullText) {
|
||||||
|
content
|
||||||
|
} else {
|
||||||
|
val (lnStart, lnEnd) = LnInvoiceUtil.locateInvoice(content)
|
||||||
|
if (lnStart < SHORT_TEXT_LENGTH && lnEnd > 0) {
|
||||||
|
content.take(lnEnd)
|
||||||
|
} else {
|
||||||
|
content.take(SHORT_TEXT_LENGTH)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Box(contentAlignment = Alignment.BottomCenter) {
|
Box(contentAlignment = Alignment.BottomCenter) {
|
||||||
// CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
|
// CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
|
||||||
|
Reference in New Issue
Block a user