diff --git a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt index c9be82b68..882adbc3b 100644 --- a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt +++ b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt @@ -758,7 +758,7 @@ class AppViewModel @Inject constructor( _sendUiState.update { it.copy(isAddressInputValid = true) } } - private fun validateOnChainAddress(invoice: OnChainInvoice) { + private suspend fun validateOnChainAddress(invoice: OnChainInvoice) { val validatedAddress = runCatching { validateBitcoinAddress(invoice.address) } .getOrElse { showAddressValidationError( @@ -778,6 +778,22 @@ class AppViewModel @Inject constructor( return } + // Check if this is a unified invoice with Lightning available + val lnInvoice: LightningInvoice? = invoice.params?.get("lightning")?.let { bolt11 -> + runCatching { decode(bolt11) }.getOrNull() + ?.let { it as? Scanner.Lightning } + ?.invoice + ?.takeIf { lnInv -> + !lnInv.isExpired && lightningRepo.canSend(lnInv.amountSatoshis.coerceAtLeast(1u)) + } + } + + // If Lightning path is available, accept the unified invoice + if (lnInvoice != null) { + _sendUiState.update { it.copy(isAddressInputValid = true) } + return + } + val maxSendOnchain = walletRepo.balanceState.value.maxSendOnchainSats if (maxSendOnchain == 0uL) {