Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

package com.electricdreams.numo.feature.items

import android.animation.AnimatorSet
Expand All @@ -13,6 +14,7 @@ import android.widget.ImageButton
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import com.google.android.flexbox.FlexboxLayout
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
Expand Down Expand Up @@ -312,8 +314,10 @@ class ItemSelectionActivity : AppCompatActivity() {
val basketId = ensureBasketSaved()
if (basketId != null) {
checkoutHandler.savedBasketId = basketId
checkoutHandler.proceedToCheckout()
} else {
Toast.makeText(this, R.string.item_selection_toast_save_basket_first, Toast.LENGTH_SHORT).show()
}
checkoutHandler.proceedToCheckout()
}

saveButton.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,45 +51,17 @@ class CheckoutHandler(
// Determine how to format the amount for PaymentRequestActivity
val formattedAmount = formatPaymentAmount(fiatTotal, satsTotal)

// Create a snapshot of the basket BEFORE clearing it
// This preserves the checkout data for receipt generation
val checkoutBasket = CheckoutBasket.fromBasketManager(
basketManager = basketManager,
currency = currencyManager.getCurrentCurrency(),
bitcoinPrice = if (btcPrice > 0) btcPrice else null,
totalSatoshis = totalSatoshis,
)
val checkoutBasketJson = checkoutBasket.toJson()

android.util.Log.d("CheckoutHandler", "Captured basket with ${checkoutBasket.items.size} items, total: $totalSatoshis sats")
android.util.Log.d("CheckoutHandler", "Basket JSON size: ${checkoutBasketJson.length} chars")

// Clear basket before navigating away so UI state is clean when we return
basketManager.clearBasket()

// Decide whether to show tip selection first or go directly to payment request
val tipsManager = TipsManager.getInstance(activity)
if (tipsManager.tipsEnabled) {
// Route through beautiful tip selection screen first
val intent = Intent(activity, TipSelectionActivity::class.java).apply {
putExtra(TipSelectionActivity.EXTRA_PAYMENT_AMOUNT, totalSatoshis)
putExtra(TipSelectionActivity.EXTRA_FORMATTED_AMOUNT, formattedAmount)
putExtra(TipSelectionActivity.EXTRA_CHECKOUT_BASKET_JSON, checkoutBasketJson)
// Preserve saved basket association all the way through to PaymentRequestActivity
savedBasketId?.let { putExtra(PaymentRequestActivity.EXTRA_SAVED_BASKET_ID, it) }
}
activity.startActivity(intent)
} else {
// Go directly to payment request without tips
val intent = Intent(activity, PaymentRequestActivity::class.java).apply {
putExtra(PaymentRequestActivity.EXTRA_PAYMENT_AMOUNT, totalSatoshis)
putExtra(PaymentRequestActivity.EXTRA_FORMATTED_AMOUNT, formattedAmount)
putExtra(PaymentRequestActivity.EXTRA_CHECKOUT_BASKET_JSON, checkoutBasketJson)
savedBasketId?.let { putExtra(PaymentRequestActivity.EXTRA_SAVED_BASKET_ID, it) }
}
activity.startActivity(intent)
val intent = Intent(activity, if (tipsManager.tipsEnabled) TipSelectionActivity::class.java else PaymentRequestActivity::class.java).apply {
putExtra(PaymentRequestActivity.EXTRA_PAYMENT_AMOUNT, totalSatoshis)
putExtra(PaymentRequestActivity.EXTRA_FORMATTED_AMOUNT, formattedAmount)
savedBasketId?.let { putExtra(PaymentRequestActivity.EXTRA_SAVED_BASKET_ID, it) }
}

activity.startActivity(intent)
activity.finish()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class TipSelectionActivity : AppCompatActivity() {
private var formattedAmount: String = ""
private var entryCurrency: Currency = Currency.USD
private var enteredAmountFiat: Long = 0
private var checkoutBasketJson: String? = null
private var basketId: String? = null

// State
private var selectedTipSats: Long = 0
Expand Down Expand Up @@ -123,7 +123,7 @@ class TipSelectionActivity : AppCompatActivity() {
private fun initializeFromIntent() {
paymentAmountSats = intent.getLongExtra(EXTRA_PAYMENT_AMOUNT, 0)
formattedAmount = intent.getStringExtra(EXTRA_FORMATTED_AMOUNT) ?: ""
checkoutBasketJson = intent.getStringExtra(EXTRA_CHECKOUT_BASKET_JSON)
basketId = intent.getStringExtra(EXTRA_BASKET_ID)

// Parse entry currency
val parsedAmount = Amount.parse(formattedAmount)
Expand Down Expand Up @@ -852,9 +852,7 @@ class TipSelectionActivity : AppCompatActivity() {
putExtra(EXTRA_TIP_PERCENTAGE, selectedTipPercentage)
putExtra(EXTRA_BASE_AMOUNT_SATS, paymentAmountSats)
putExtra(EXTRA_BASE_FORMATTED_AMOUNT, formattedAmount)
checkoutBasketJson?.let {
putExtra(PaymentRequestActivity.EXTRA_CHECKOUT_BASKET_JSON, it)
}
basketId?.let { putExtra(PaymentRequestActivity.EXTRA_SAVED_BASKET_ID, it) }
}

startActivityForResult(intent, REQUEST_CODE_PAYMENT)
Expand Down Expand Up @@ -902,7 +900,7 @@ class TipSelectionActivity : AppCompatActivity() {
companion object {
const val EXTRA_PAYMENT_AMOUNT = "payment_amount"
const val EXTRA_FORMATTED_AMOUNT = "formatted_amount"
const val EXTRA_CHECKOUT_BASKET_JSON = "checkout_basket_json"
const val EXTRA_BASKET_ID = "basket_id"
const val EXTRA_TIP_AMOUNT_SATS = "tip_amount_sats"
const val EXTRA_TIP_PERCENTAGE = "tip_percentage"
const val EXTRA_BASE_AMOUNT_SATS = "base_amount_sats"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ class PaymentMethodHandler(
) {

/** Show payment method dialog for the specified amount */
fun showPaymentMethodDialog(amount: Long, formattedAmount: String, checkoutBasketJson: String? = null) {
fun showPaymentMethodDialog(amount: Long, formattedAmount: String, basketId: String? = null) {
val tipsManager = TipsManager.getInstance(activity)

val routing = PaymentRoutingCore.determinePaymentRoute(tipsManager.tipsEnabled)
val intent = routing.buildIntent(activity, amount, formattedAmount, checkoutBasketJson)
val intent = routing.buildIntent(activity, amount, formattedAmount, basketId)
activity.startActivityForResult(intent, REQUEST_CODE_PAYMENT)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ object PaymentRoutingCore {
context: Context,
amount: Long,
formattedAmount: String,
checkoutBasketJson: String?
basketId: String?
): Intent {
val targetClass = when (targetActivity) {
TargetActivity.TIP_SELECTION -> TipSelectionActivity::class.java
Expand All @@ -28,9 +28,7 @@ object PaymentRoutingCore {
return Intent(context, targetClass).apply {
putExtra(PaymentRequestActivity.EXTRA_PAYMENT_AMOUNT, amount)
putExtra(PaymentRequestActivity.EXTRA_FORMATTED_AMOUNT, formattedAmount)
checkoutBasketJson?.let {
putExtra(PaymentRequestActivity.EXTRA_CHECKOUT_BASKET_JSON, it)
}
basketId?.let { putExtra(PaymentRequestActivity.EXTRA_SAVED_BASKET_ID, it) }
}
}
}
Expand Down
Loading