diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/send/SendQuickPayScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/send/SendQuickPayScreen.kt index 922b95f74..1b6ea536b 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/send/SendQuickPayScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/send/SendQuickPayScreen.kt @@ -38,7 +38,7 @@ import to.bitkit.viewmodels.QuickPayViewModel @Composable fun SendQuickPayScreen( quickPayData: QuickPayData, - onPaymentComplete: () -> Unit, + onPaymentComplete: (String, Long) -> Unit, onShowError: (String) -> Unit, viewModel: QuickPayViewModel = hiltViewModel(), ) { @@ -60,7 +60,7 @@ fun SendQuickPayScreen( LaunchedEffect(uiState.result) { when (val result = uiState.result) { - is QuickPayResult.Success -> onPaymentComplete() + is QuickPayResult.Success -> onPaymentComplete(result.paymentHash, result.amountWithFee) is QuickPayResult.Error -> onShowError(result.message) null -> Unit // continue showing loading state } diff --git a/app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt b/app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt index 544d76291..39ea55a5f 100644 --- a/app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt +++ b/app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt @@ -15,6 +15,9 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController import androidx.navigation.toRoute import kotlinx.serialization.Serializable +import to.bitkit.models.NewTransactionSheetDetails +import to.bitkit.models.NewTransactionSheetDirection +import to.bitkit.models.NewTransactionSheetType import to.bitkit.ui.screens.scanner.QrScanningScreen import to.bitkit.ui.screens.wallets.send.AddTagScreen import to.bitkit.ui.screens.wallets.send.PIN_CHECK_RESULT_KEY @@ -72,8 +75,11 @@ fun SendSheet( is SendEffect.PopBack -> navController.popBackStack(it.route, inclusive = false) is SendEffect.PaymentSuccess -> { appViewModel.clearClipboardForAutoRead() - navController.navigate(SendRoute.Success) + navController.navigate(SendRoute.Success) { + popUpTo(startDestination) { inclusive = true } + } } + is SendEffect.NavigateToQuickPay -> navController.navigate(SendRoute.QuickPay) is SendEffect.NavigateToWithdrawConfirm -> navController.navigate(SendRoute.WithdrawConfirm) is SendEffect.NavigateToWithdrawError -> navController.navigate(SendRoute.WithdrawError) @@ -218,8 +224,19 @@ fun SendSheet( val quickPayData by appViewModel.quickPayData.collectAsStateWithLifecycle() SendQuickPayScreen( quickPayData = requireNotNull(quickPayData), - onPaymentComplete = { - navController.navigate(SendRoute.Success) + onPaymentComplete = { paymentHash, amountWithFee -> + appViewModel.handlePaymentSuccess( + NewTransactionSheetDetails( + type = NewTransactionSheetType.LIGHTNING, + direction = NewTransactionSheetDirection.SENT, + paymentHashOrTxId = paymentHash, + sats = amountWithFee, + ), + ) + + navController.navigate(SendRoute.Success) { + popUpTo(startDestination) { inclusive = true } + } }, onShowError = { errorMessage -> navController.navigate(SendRoute.Error(errorMessage)) diff --git a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt index e8214c3ac..86bd8ecfc 100644 --- a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt +++ b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt @@ -1463,7 +1463,7 @@ class AppViewModel @Inject constructor( } } - private fun handlePaymentSuccess(details: NewTransactionSheetDetails) { + fun handlePaymentSuccess(details: NewTransactionSheetDetails) { details.paymentHashOrTxId?.let { if (!processedPayments.add(it)) { Logger.debug("Payment $it already processed, skipping duplicate", context = TAG) diff --git a/app/src/main/java/to/bitkit/viewmodels/QuickPayViewModel.kt b/app/src/main/java/to/bitkit/viewmodels/QuickPayViewModel.kt index 16e44704b..2b9f696ed 100644 --- a/app/src/main/java/to/bitkit/viewmodels/QuickPayViewModel.kt +++ b/app/src/main/java/to/bitkit/viewmodels/QuickPayViewModel.kt @@ -49,9 +49,16 @@ class QuickPayViewModel @Inject constructor( } sendLightning(bolt11, amount) - .onSuccess { + .onSuccess { paymentHash -> Logger.info("QuickPay lightning payment successful") - _uiState.update { it.copy(result = QuickPayResult.Success) } + _uiState.update { + it.copy( + result = QuickPayResult.Success( + paymentHash = paymentHash, + amountWithFee = amount.toLong() // TODO GET FEE WHEN AVAILABLE + ) + ) + } }.onFailure { error -> Logger.error("QuickPay lightning payment failed", error) @@ -96,7 +103,11 @@ class QuickPayViewModel @Inject constructor( } sealed class QuickPayResult { - data object Success : QuickPayResult() + data class Success( + val paymentHash: String, + val amountWithFee: Long, + ) : QuickPayResult() + data class Error(val message: String) : QuickPayResult() }