Skip to content

Commit 63644b1

Browse files
authored
Merge pull request #87 from code-payments/fix/give-kin-share-return-on-cancel
fix(givekin/share): trigger cancellation properly to return funds immediately
2 parents 1460cb0 + 125afde commit 63644b1

3 files changed

Lines changed: 39 additions & 19 deletions

File tree

api/src/main/java/com/getcode/network/BalanceController.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class BalanceController @Inject constructor(
2828

2929
fun observe(): Flow<Double> = balanceRepository.balanceFlow
3030

31+
val balance: Double
32+
get() = balanceRepository.balanceFlow.value
33+
3134
fun setTray(organizer: Organizer, tray: Tray) {
3235
organizer.set(tray)
3336
balanceRepository.setBalance(organizer.availableBalance.toKinTruncatingLong().toDouble())

api/src/main/java/com/getcode/network/client/Client_Transaction.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,17 +199,21 @@ suspend fun Client.receiveRemoteSuspend(giftCard: GiftCardAccount): KinAmount =
199199
return@withContext kinAmount
200200
}
201201

202-
fun Client.cancelRemoteSend(
202+
@SuppressLint("CheckResult")
203+
suspend fun Client.cancelRemoteSend(
203204
giftCard: GiftCardAccount,
204205
amount: Kin,
205206
organizer: Organizer
206-
) {
207+
): Double {
207208
transactionReceiver.receiveRemotely(
208209
amount = amount,
209210
organizer = organizer,
210211
giftCard = giftCard,
211212
isVoiding = true
212-
)
213+
).blockingAwait()
214+
215+
balanceController.fetchBalanceSuspend()
216+
return balanceController.balance
213217
}
214218

215219

app/src/main/java/com/getcode/view/main/home/HomeViewModel.kt

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import cafe.adriel.voyager.core.model.ScreenModel
1010
import com.getcode.App
1111
import com.getcode.BuildConfig
1212
import com.getcode.R
13+
import com.getcode.analytics.AnalyticsManager
1314
import com.getcode.crypt.MnemonicPhrase
1415
import com.getcode.db.Database
15-
import com.getcode.manager.AnalyticsManager
16+
import com.getcode.analytics.AnalyticsService
1617
import com.getcode.manager.AuthManager
1718
import com.getcode.manager.BottomBarManager
1819
import com.getcode.manager.SessionManager
@@ -153,7 +154,7 @@ class HomeViewModel @Inject constructor(
153154
private val paymentRepository: PaymentRepository,
154155
private val balanceController: BalanceController,
155156
private val prefRepository: PrefRepository,
156-
private val analyticsManager: AnalyticsManager,
157+
private val analytics: AnalyticsService,
157158
private val authManager: AuthManager,
158159
private val networkObserver: NetworkConnectivityListener,
159160
private val resources: ResourceHelper,
@@ -294,7 +295,6 @@ class HomeViewModel @Inject constructor(
294295
Completable.concatArray(
295296
balanceController.fetchBalance(),
296297
client.fetchLimits(isForce = true),
297-
client.fetchPaymentHistoryDelta(owner = SessionManager.getKeyPair()!!).ignoreElement()
298298
)
299299
}
300300
.subscribe({
@@ -313,7 +313,7 @@ class HomeViewModel @Inject constructor(
313313
billDismissTimer?.cancel()
314314
billDismissTimer = Timer().schedule((1000 * 50).toLong()) {
315315
cancelSend()
316-
analyticsManager.billTimeoutReached(
316+
analytics.billTimeoutReached(
317317
bill.amount.kin,
318318
bill.amount.rate.currency,
319319
AnalyticsManager.BillPresentationStyle.Slide
@@ -357,7 +357,7 @@ class HomeViewModel @Inject constructor(
357357
}
358358

359359
if (style is PresentationStyle.Visible) {
360-
analyticsManager.billShown(
360+
analytics.billShown(
361361
bill.amountFloored.kin,
362362
bill.amountFloored.rate.currency,
363363
when (style) {
@@ -568,7 +568,7 @@ class HomeViewModel @Inject constructor(
568568
}
569569
}
570570

571-
analyticsManager.requestShown(amount = amount)
571+
analytics.requestShown(amount = amount)
572572

573573
if (DEBUG_SCAN_TIMES) {
574574
Timber.tag("codescan")
@@ -658,7 +658,7 @@ class HomeViewModel @Inject constructor(
658658
val amount = bill.amount
659659
val request = bill.metadata.request
660660

661-
analyticsManager.requestHidden(amount = amount)
661+
analytics.requestHidden(amount = amount)
662662

663663
if (rejected) {
664664
if (!ignoreRedirect) {
@@ -782,7 +782,7 @@ class HomeViewModel @Inject constructor(
782782

783783
@SuppressLint("CheckResult")
784784
private fun attemptReceive(organizer: Organizer, payload: CodePayload) {
785-
analyticsManager.grabStart()
785+
analytics.grabStart()
786786
receiveTransactionRepository.start(organizer, payload.rendezvous)
787787
.doOnNext { metadata ->
788788
Timber.d("metadata=$metadata")
@@ -792,7 +792,7 @@ class HomeViewModel @Inject constructor(
792792
else -> return@doOnNext
793793
}
794794

795-
analyticsManager.grab(kin = kinAmount.kin, currencyCode = kinAmount.rate.currency)
795+
analytics.grab(kin = kinAmount.kin, currencyCode = kinAmount.rate.currency)
796796

797797
val exchangeCurrency = kinAmount.rate.currency.name
798798
val exchangeRate = kinAmount.rate.fx
@@ -818,7 +818,6 @@ class HomeViewModel @Inject constructor(
818818
Completable.concatArray(
819819
balanceController.fetchBalance(),
820820
client.fetchLimits(isForce = true),
821-
client.fetchPaymentHistoryDelta(owner = SessionManager.getKeyPair()!!).ignoreElement()
822821
)
823822
}
824823
.subscribe({ }, {
@@ -828,7 +827,7 @@ class HomeViewModel @Inject constructor(
828827
}
829828

830829
fun onCashLinkGrabStart() {
831-
analyticsManager.cashLinkGrabStart()
830+
analytics.cashLinkGrabStart()
832831
}
833832

834833
fun startScan(view: KikCodeScannerView) {
@@ -947,6 +946,10 @@ class HomeViewModel @Inject constructor(
947946
loadingIndicatorTimer = Timer().schedule(1000) {
948947
uiFlow.update { it.copy(isRemoteSendLoading = false) }
949948
}
949+
analytics.remoteSendOutgoing(
950+
kin = amount.kin,
951+
currencyCode = amount.rate.currency
952+
)
950953
}
951954
.doOnError {
952955
loadingIndicatorTimer?.cancel()
@@ -959,9 +962,14 @@ class HomeViewModel @Inject constructor(
959962
)
960963
}
961964

962-
private fun cancelRemoteSend(giftCard: GiftCardAccount, amount: KinAmount) {
963-
val organizer = SessionManager.getOrganizer() ?: return
965+
private fun cancelRemoteSend(giftCard: GiftCardAccount, amount: KinAmount) = viewModelScope.launch {
966+
val organizer = SessionManager.getOrganizer() ?: return@launch
964967
client.cancelRemoteSend(giftCard, amount.kin, organizer)
968+
analytics.remoteSendIncoming(
969+
kin = amount.kin,
970+
currencyCode = amount.rate.currency,
971+
isVoiding = true
972+
)
965973
}
966974

967975
private fun showRemoteSendDialog(
@@ -1045,8 +1053,13 @@ class HomeViewModel @Inject constructor(
10451053
try {
10461054
//Get the amount on the card
10471055
val amount = client.receiveRemoteSuspend(giftCardAccount)
1048-
analyticsManager.cashLinkGrab(amount.kin, amount.rate.currency)
1049-
analyticsManager.onBillReceived()
1056+
analytics.remoteSendIncoming(
1057+
kin = amount.kin,
1058+
currencyCode = amount.rate.currency,
1059+
isVoiding = false
1060+
)
1061+
analytics.cashLinkGrab(amount.kin, amount.rate.currency)
1062+
analytics.onBillReceived()
10501063
viewModelScope.launch(Dispatchers.Main) {
10511064
BottomBarManager.clear()
10521065
showBill(
@@ -1106,7 +1119,7 @@ class HomeViewModel @Inject constructor(
11061119
}
11071120

11081121
fun onDrawn() {
1109-
analyticsManager.onAppStarted()
1122+
analytics.onAppStarted()
11101123
}
11111124

11121125
private fun setDeepLinkHandled(withDelay: Long = 2000) {

0 commit comments

Comments
 (0)