Skip to content

Commit a792394

Browse files
committed
fix(flipcash/services/opencode): remove BalanceController#balance
have rawBalance be only observable; cash and balance convert to rate for UI Signed-off-by: Brandon McAnsh <[email protected]>
1 parent a9df2da commit a792394

File tree

4 files changed

+18
-46
lines changed

4 files changed

+18
-46
lines changed

apps/flipcash/features/balance/src/main/kotlin/com/flipcash/app/balance/internal/BalanceViewModel.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ import com.getcode.manager.BottomBarAction
1515
import com.getcode.manager.BottomBarManager
1616
import com.getcode.opencode.controllers.BalanceController
1717
import com.getcode.opencode.controllers.TransactionController
18+
import com.getcode.opencode.exchange.Exchange
1819
import com.getcode.opencode.model.core.ID
1920
import com.getcode.opencode.model.financial.LocalFiat
2021
import com.getcode.solana.keys.PublicKey
2122
import com.getcode.util.resources.ResourceHelper
2223
import com.getcode.view.BaseViewModel2
2324
import dagger.hilt.android.lifecycle.HiltViewModel
25+
import kotlinx.coroutines.flow.combine
2426
import kotlinx.coroutines.flow.filterIsInstance
2527
import kotlinx.coroutines.flow.launchIn
2628
import kotlinx.coroutines.flow.map
@@ -37,6 +39,7 @@ internal class BalanceViewModel @Inject constructor(
3739
featureFlags: FeatureFlagController,
3840
userManager: UserManager,
3941
resources: ResourceHelper,
42+
private val exchange: Exchange,
4043
) : BaseViewModel2<BalanceViewModel.State, BalanceViewModel.Event>(
4144
initialState = State(),
4245
updateStateForEvent = updateStateForEvent
@@ -60,9 +63,18 @@ internal class BalanceViewModel @Inject constructor(
6063
}
6164

6265
init {
63-
balanceController.balance
64-
.onEach { dispatchEvent(Event.OnBalanceUpdated(it)) }
65-
.launchIn(viewModelScope)
66+
combine(
67+
balanceController.rawBalance,
68+
exchange.observeEntryRate(),
69+
) { balance, rate ->
70+
LocalFiat(
71+
usdc = balance,
72+
converted = balance.convertingTo(rate),
73+
rate = rate
74+
)
75+
}.onEach {
76+
dispatchEvent(Event.OnBalanceUpdated(it))
77+
}.launchIn(viewModelScope)
6678

6779
featureFlags.observe(FeatureFlag.TransactionDetails)
6880
.onEach { dispatchEvent(Event.OnTransactionDetailsEnabled(it)) }

apps/flipcash/features/cash/src/main/kotlin/com/flipcash/app/cash/internal/CashScreenViewModel.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ internal class CashScreenViewModel @Inject constructor(
252252

253253
internal companion object {
254254
val updateStateForEvent: (Event) -> ((State) -> State) = { event ->
255-
println("event: $event")
256255
when (event) {
257256
is Event.OnBalanceChanged -> { state ->
258257
state.copy(balance = event.balance)

services/opencode/src/main/kotlin/com/getcode/opencode/ControllerFactory.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import com.getcode.opencode.controllers.AccountController
55
import com.getcode.opencode.controllers.BalanceController
66
import com.getcode.opencode.controllers.MessagingController
77
import com.getcode.opencode.controllers.TransactionController
8-
import com.getcode.opencode.generators.MnemonicGenerator
98
import com.getcode.opencode.inject.OpenCodeModule
10-
import com.getcode.opencode.managers.MnemonicManager
119
import dagger.hilt.android.EntryPointAccessors
1210

1311
object ControllerFactory {
@@ -19,18 +17,8 @@ object ControllerFactory {
1917
}
2018

2119
fun createBalanceController(context: Context,config: ProtocolConfig): BalanceController {
22-
val appContext = context.applicationContext ?: throw IllegalStateException(
23-
"applicationContext was not provided",
24-
)
25-
26-
val module = EntryPointAccessors.fromApplication(
27-
appContext,
28-
OpenCodeModule::class.java,
29-
)
30-
3120
return BalanceController(
3221
accountController = createAccountController(context, config),
33-
exchange = ExchangeFactory.createOpenCodeExchange(context, config),
3422
networkObserver = NetworkFactory.createNetworkObserver(context),
3523
)
3624
}

services/opencode/src/main/kotlin/com/getcode/opencode/controllers/BalanceController.kt

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.getcode.opencode.controllers
22

3-
import com.getcode.opencode.exchange.Exchange
43
import com.getcode.opencode.model.accounts.AccountCluster
54
import com.getcode.opencode.model.accounts.AccountInfo
65
import com.getcode.opencode.model.accounts.AccountType
@@ -16,18 +15,14 @@ import com.getcode.utils.network.NetworkConnectivityListener
1615
import com.getcode.utils.network.retryable
1716
import com.getcode.utils.timedTrace
1817
import com.getcode.utils.trace
19-
import com.hoc081098.channeleventbus.ChannelEventBus
2018
import kotlinx.coroutines.CoroutineScope
2119
import kotlinx.coroutines.Dispatchers
2220
import kotlinx.coroutines.SupervisorJob
2321
import kotlinx.coroutines.flow.MutableStateFlow
2422
import kotlinx.coroutines.flow.StateFlow
2523
import kotlinx.coroutines.flow.asStateFlow
26-
import kotlinx.coroutines.flow.combine
27-
import kotlinx.coroutines.flow.distinctUntilChanged
2824
import kotlinx.coroutines.flow.filterNotNull
2925
import kotlinx.coroutines.flow.flatMapLatest
30-
import kotlinx.coroutines.flow.flowOn
3126
import kotlinx.coroutines.flow.launchIn
3227
import kotlinx.coroutines.flow.map
3328
import kotlinx.coroutines.flow.onEach
@@ -42,12 +37,11 @@ import kotlin.concurrent.atomics.ExperimentalAtomicApi
4237
class BalanceController @Inject constructor(
4338
private val accountController: AccountController,
4439
private val networkObserver: NetworkConnectivityListener,
45-
private val exchange: Exchange,
4640
) {
4741
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
4842

4943
private val _rawBalance = MutableStateFlow(Fiat.Zero)
50-
private val localizedBalance = MutableStateFlow(LocalFiat.Zero)
44+
5145
private val cluster = MutableStateFlow<AccountCluster?>(null)
5246

5347
private val fetching = AtomicBoolean(false)
@@ -58,9 +52,6 @@ class BalanceController @Inject constructor(
5852
val rawBalance: StateFlow<Fiat>
5953
get() = _rawBalance.asStateFlow()
6054

61-
val balance: StateFlow<LocalFiat>
62-
get() = localizedBalance.asStateFlow()
63-
6455
fun onUserLoggedIn(cluster: AccountCluster) {
6556
trace(
6657
tag = "Balance",
@@ -78,22 +69,6 @@ class BalanceController @Inject constructor(
7869
if (connected) {
7970
retryable { fetchBalance() }
8071
}
81-
}.flatMapLatest {
82-
combine(
83-
exchange.observeBalanceRate()
84-
.flowOn(Dispatchers.IO)
85-
.onEach { exchange.fetchRatesIfNeeded() },
86-
_rawBalance
87-
) { rate, balance ->
88-
LocalFiat(
89-
usdc = balance,
90-
converted = balance.convertingTo(rate),
91-
rate = rate
92-
)
93-
}
94-
}.distinctUntilChanged()
95-
.onEach { newBalance ->
96-
localizedBalance.update { newBalance }
9772
}.launchIn(scope)
9873
}
9974

@@ -104,7 +79,6 @@ class BalanceController @Inject constructor(
10479
} else {
10580
_rawBalance.value += fiat.usdc
10681
}
107-
localizedBalance.value = fiat
10882
}
10983

11084
suspend fun subtract(fiat: LocalFiat) {
@@ -114,7 +88,6 @@ class BalanceController @Inject constructor(
11488
} else {
11589
_rawBalance.value = (_rawBalance.value - fiat.usdc).coerceAtLeast(Fiat.Zero)
11690
}
117-
localizedBalance.value = fiat
11891
}
11992

12093
// TODO: split non-balance account handling out into a separate controller
@@ -155,7 +128,8 @@ class BalanceController @Inject constructor(
155128
throw error
156129
}
157130
}?.map { response ->
158-
val primary = response.accounts.values.find { it.accountType == AccountType.Primary }
131+
val primary =
132+
response.accounts.values.find { it.accountType == AccountType.Primary }
159133
if (primary?.unusable == true) {
160134
onTimelockUnlocked()
161135
}
@@ -194,7 +168,6 @@ class BalanceController @Inject constructor(
194168

195169
fun reset() {
196170
_rawBalance.value = Fiat.Zero
197-
localizedBalance.value = LocalFiat.Zero
198171
cluster.value = null
199172
}
200173
}

0 commit comments

Comments
 (0)