Skip to content

Commit 08050db

Browse files
committed
feat(flipcash): rid of BillPresentationStyle and make it action based
Pop => Grabbed Slide => PutInWallet Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 07f29f3 commit 08050db

3 files changed

Lines changed: 42 additions & 38 deletions

File tree

apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/bills/BillContainerView.kt

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ import com.flipcash.app.scanner.internal.ui.components.DecorView
4040
import com.flipcash.app.scanner.internal.ui.modals.ReceivedFundsConfirmation
4141
import com.flipcash.app.scanner.internal.ScannerDecorItem
4242
import com.flipcash.app.session.LocalSessionController
43-
import com.flipcash.app.session.PresentationStyle
43+
import com.flipcash.app.session.BillDeterminationResult
44+
import com.flipcash.app.session.Grabbed
45+
import com.flipcash.app.session.PutInWallet
4446
import com.flipcash.features.scanner.R
4547
import com.getcode.manager.TopBarManager
4648
import com.getcode.ui.biometrics.LocalBiometricsState
@@ -51,7 +53,6 @@ import com.getcode.ui.utils.AnimationUtils
5153
import com.getcode.util.permissions.PermissionResult
5254
import com.getcode.util.permissions.getPermissionLauncher
5355
import com.getcode.util.permissions.rememberPermissionHandler
54-
import com.getcode.utils.base58
5556
import kotlinx.coroutines.delay
5657

5758
@OptIn(ExperimentalMaterialApi::class)
@@ -149,7 +150,7 @@ internal fun BillContainer(
149150
val canDismiss =
150151
it == DismissValue.DismissedToEnd && updatedBillState.canSwipeToDismiss
151152
if (canDismiss) {
152-
session.dismissBill()
153+
session.dismissBill(PutInWallet)
153154
dismissed = true
154155
}
155156
canDismiss
@@ -197,14 +198,14 @@ internal fun BillContainer(
197198
contentPadding = PaddingValues(bottom = managementHeight),
198199
bill = updatedBillState.bill,
199200
transitionSpec = {
200-
when (updatedState.presentationStyle) {
201-
PresentationStyle.Hidden -> EnterTransition.None
202-
PresentationStyle.Pop -> AnimationUtils.animationBillEnterGrabbed
203-
PresentationStyle.Slide -> AnimationUtils.animationBillEnterGive
204-
} togetherWith when (updatedState.presentationStyle) {
205-
PresentationStyle.Hidden -> ExitTransition.None
206-
PresentationStyle.Pop -> AnimationUtils.animationBillExitGrabbed
207-
PresentationStyle.Slide -> AnimationUtils.animationBillExitReturned
201+
when (updatedState.billResult) {
202+
BillDeterminationResult.None -> EnterTransition.None
203+
Grabbed -> AnimationUtils.animationBillEnterGrabbed
204+
PutInWallet -> AnimationUtils.animationBillEnterGive
205+
} togetherWith when (updatedState.billResult) {
206+
BillDeterminationResult.None -> ExitTransition.None
207+
Grabbed -> AnimationUtils.animationBillExitGrabbed
208+
PutInWallet -> AnimationUtils.animationBillExitReturned
208209
}
209210
}
210211
)
@@ -240,7 +241,7 @@ internal fun BillContainer(
240241
}
241242

242243
BackHandler(canCancel) {
243-
session.dismissBill()
244+
session.dismissBill(PutInWallet)
244245
}
245246
}
246247

@@ -257,7 +258,7 @@ internal fun BillContainer(
257258
) {
258259
ReceivedFundsConfirmation(
259260
bill = updatedBillState.bill as Bill.Cash,
260-
onClaim = { session.dismissBill() }
261+
onClaim = { session.dismissBill(PutInWallet) }
261262
)
262263
}
263264
}

apps/flipcash/shared/session/src/main/kotlin/com/flipcash/app/session/SessionController.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@ package com.flipcash.app.session
33
import androidx.compose.runtime.staticCompositionLocalOf
44
import com.flipcash.app.core.bill.Bill
55
import com.flipcash.app.core.bill.BillState
6+
import com.flipcash.app.session.BillDeterminationResult.ActedUpon
67
import com.getcode.opencode.model.financial.Fiat
78
import com.getcode.ui.core.RestrictionType
89
import com.getcode.util.permissions.PermissionResult
910
import com.kik.kikx.models.ScannableKikCode
1011
import kotlinx.coroutines.flow.StateFlow
1112

12-
sealed interface PresentationStyle {
13-
data object Hidden : PresentationStyle
14-
sealed interface Visible
15-
16-
data object Pop : PresentationStyle, Visible
17-
data object Slide : PresentationStyle, Visible
13+
sealed interface BillDeterminationResult {
14+
data object None : BillDeterminationResult
15+
sealed interface ActedUpon
1816
}
1917

18+
data object Grabbed : BillDeterminationResult, ActedUpon
19+
data object PutInWallet : BillDeterminationResult, ActedUpon
20+
2021
interface SessionController {
2122
val state: StateFlow<SessionState>
2223
val billState: StateFlow<BillState>
@@ -25,7 +26,7 @@ interface SessionController {
2526
fun onCameraScanning(scanning: Boolean)
2627
fun onCameraPermissionResult(result: PermissionResult)
2728
fun showBill(bill: Bill, vibrate: Boolean = false)
28-
fun dismissBill(style: PresentationStyle = PresentationStyle.Slide)
29+
fun dismissBill(action: BillDeterminationResult)
2930
fun onCodeScan(code: ScannableKikCode)
3031
fun openCashLink(cashLink: String?)
3132
}
@@ -38,7 +39,7 @@ data class SessionState(
3839
val showNetworkOffline: Boolean = false,
3940
val autoStartCamera: Boolean? = true,
4041
val isCameraScanEnabled: Boolean = true,
41-
val presentationStyle: PresentationStyle = PresentationStyle.Hidden,
42+
val billResult: BillDeterminationResult = BillDeterminationResult.None,
4243
val restrictionType: RestrictionType? = null,
4344
val isRemoteSendLoading: Boolean = false,
4445
val notificationUnreadCount: Int = 0,

apps/flipcash/shared/session/src/main/kotlin/com/flipcash/app/session/internal/RealSessionController.kt

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import com.flipcash.app.core.internal.updater.BalanceUpdater
1313
import com.flipcash.app.core.internal.updater.ExchangeUpdater
1414
import com.flipcash.app.featureflags.FeatureFlag
1515
import com.flipcash.app.featureflags.FeatureFlagController
16-
import com.flipcash.app.session.PresentationStyle
16+
import com.flipcash.app.session.BillDeterminationResult
17+
import com.flipcash.app.session.Grabbed
18+
import com.flipcash.app.session.PutInWallet
1719
import com.flipcash.app.session.SessionController
1820
import com.flipcash.app.session.SessionState
1921
import com.flipcash.app.session.internal.toast.ToastController
@@ -180,7 +182,7 @@ class RealSessionController @Inject constructor(
180182
if (!shareSheetController.isCheckingForShare || (bill != null && !bill.didReceive)) {
181183
BottomBarManager.clear()
182184
billController.cancelAwaitForGrab()
183-
dismissBill()
185+
dismissBill(PutInWallet)
184186
}
185187
}
186188

@@ -299,7 +301,7 @@ class RealSessionController @Inject constructor(
299301
),
300302
// Allow cancelling pending outgoing cash bills
301303
secondaryAction = BillState.Action.Cancel(
302-
action = { dismissBill() }
304+
action = { dismissBill(PutInWallet) }
303305
),
304306
)
305307
}
@@ -317,19 +319,19 @@ class RealSessionController @Inject constructor(
317319
owner = owner,
318320
onGrabbed = {
319321
toastController.enqueue(bill.amount, isDeposit = false)
320-
dismissBill(PresentationStyle.Pop)
322+
dismissBill(Grabbed)
321323
vibrator.vibrate()
322324
bringActivityFeedCurrent()
323325
},
324326
onTimeout = {
325-
dismissBill(style = PresentationStyle.Slide)
327+
dismissBill(action = PutInWallet)
326328
// analytics.billTimeoutReached(
327329
// bill.amount.kin,
328330
// bill.amount.rate.currency,
329331
// CodeAnalyticsManager.BillPresentationStyle.Slide
330332
// )
331333
},
332-
onError = { dismissBill(style = PresentationStyle.Slide) },
334+
onError = { dismissBill(action = PutInWallet) },
333335
present = { data ->
334336
if (!bill.didReceive) {
335337
trace(
@@ -391,7 +393,7 @@ class RealSessionController @Inject constructor(
391393
when (result) {
392394
ShareResult.CopiedToClipboard -> {
393395
toastController.enqueue(amount)
394-
dismissBill(PresentationStyle.Pop)
396+
dismissBill(Grabbed)
395397
vibrator.vibrate()
396398
bringActivityFeedCurrent()
397399
trace(
@@ -406,7 +408,7 @@ class RealSessionController @Inject constructor(
406408

407409
is ShareResult.SharedToApp -> {
408410
toastController.enqueue(amount)
409-
dismissBill(PresentationStyle.Pop)
411+
dismissBill(Grabbed)
410412
vibrator.vibrate()
411413
bringActivityFeedCurrent()
412414
trace(
@@ -447,7 +449,7 @@ class RealSessionController @Inject constructor(
447449
cont.resume(Result.success(it))
448450
},
449451
onError = {
450-
dismissBill()
452+
dismissBill(PutInWallet)
451453
TopBarManager.showMessage(
452454
title = resources.getString(R.string.error_title_failedToCreateGiftCard),
453455
message = resources.getString(R.string.error_description_failedToCreateGiftCard)
@@ -465,11 +467,11 @@ class RealSessionController @Inject constructor(
465467
vault = giftCard.cluster.vaultPublicKey,
466468
owner = owner,
467469
).onFailure {
468-
dismissBill()
470+
dismissBill(PutInWallet)
469471
}.onSuccess {
470472
balanceController.fetchBalance()
471473
checkPendingItemsInFeed()
472-
dismissBill()
474+
dismissBill(PutInWallet)
473475
}
474476
}
475477

@@ -598,10 +600,10 @@ class RealSessionController @Inject constructor(
598600
}
599601
}
600602

601-
val style: PresentationStyle =
602-
if (bill.didReceive) PresentationStyle.Pop else PresentationStyle.Slide
603+
val style: BillDeterminationResult =
604+
if (bill.didReceive) Grabbed else PutInWallet
603605

604-
_state.update { it.copy(presentationStyle = style) }
606+
_state.update { it.copy(billResult = style) }
605607
billController.update {
606608
it.copy(
607609
bill = Bill.Cash(
@@ -614,7 +616,7 @@ class RealSessionController @Inject constructor(
614616
)
615617
}
616618

617-
if (style is PresentationStyle.Visible) {
619+
if (style is BillDeterminationResult.ActedUpon) {
618620
// analytics.billShown(
619621
// bill.amountFloored.kin,
620622
// bill.amountFloored.rate.currency,
@@ -631,11 +633,11 @@ class RealSessionController @Inject constructor(
631633
}
632634

633635

634-
override fun dismissBill(style: PresentationStyle) {
636+
override fun dismissBill(action: BillDeterminationResult) {
635637
scope.launch {
638+
_state.update { it.copy(billResult = action) }
636639
billController.reset()
637640
toastController.consumeQueue()
638-
_state.update { it.copy(presentationStyle = style) }
639641
shareSheetController.reset()
640642
}
641643
}

0 commit comments

Comments
 (0)