Skip to content

Commit 72d68f8

Browse files
committed
fix: persist wallet balance fiat setting
1 parent 6227da8 commit 72d68f8

File tree

5 files changed

+34
-43
lines changed

5 files changed

+34
-43
lines changed

common/src/commonMain/kotlin/com/blockstream/common/data/WalletExtras.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package com.blockstream.common.data
22

33
import com.blockstream.common.gdk.GreenJson
4-
import com.blockstream.common.gdk.data.Settings
5-
import kotlinx.serialization.SerialName
64
import kotlinx.serialization.Serializable
75

86
@Serializable
97
data class WalletExtras(
10-
@SerialName("settings")
11-
val settings: Settings? = null,
8+
val totalBalanceInFiat: Boolean = false
129
) : GreenJson<WalletExtras>() {
1310
override fun kSerializer() = serializer()
1411

common/src/commonMain/kotlin/com/blockstream/common/gdk/GdkSession.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ class GdkSession constructor(
291291
val activeAccount get() = _activeAccountStateFlow.asStateFlow()
292292

293293
val walletTotalBalance get() = _walletTotalBalanceSharedFlow.asStateFlow()
294-
val walletTotalBalanceDenominationSharedFlow = MutableStateFlow<Denomination>(Denomination.BTC)
294+
val walletTotalBalanceDenominationStateFlow = MutableStateFlow<Denomination>(Denomination.BTC)
295295

296296
val walletAssets: StateFlow<DataState<Assets>> get() = _walletAssetsFlow.asStateFlow()
297297

@@ -622,7 +622,7 @@ class GdkSession constructor(
622622
// Prefer Multisig for initial sync as those networks are synced across devices
623623
// In case of Lightning Shorcut get settings from parent wallet
624624
val syncNetwork = activeBitcoinMultisig ?: activeLiquidMultisig ?: defaultNetwork
625-
val prominentSettings = ephemeralWallet?.extras?.settings?.takeIf { isLightningShortcut } ?: getSettings(network = syncNetwork)
625+
val prominentSettings = getSettings(network = syncNetwork)
626626
prominentSettings?.also {
627627
try {
628628
changeGlobalSettings(it)
@@ -811,7 +811,7 @@ class GdkSession constructor(
811811

812812
// Clear total balance
813813
_walletTotalBalanceSharedFlow.value = -1L
814-
walletTotalBalanceDenominationSharedFlow.value = Denomination.BTC
814+
walletTotalBalanceDenominationStateFlow.value = Denomination.BTC
815815

816816
// Clear Assets
817817
_walletAssetsFlow.value = DataState.Loading
@@ -1633,6 +1633,7 @@ class GdkSession constructor(
16331633
_failedNetworksStateFlow.value += failedNetworkLogins
16341634
onLoginSuccess(
16351635
loginData = it,
1636+
wallet = wallet,
16361637
initAccount = initAccount,
16371638
initNetwork = initNetwork,
16381639
initializeSession = initializeSession
@@ -1733,6 +1734,7 @@ class GdkSession constructor(
17331734

17341735
private suspend fun onLoginSuccess(
17351736
loginData: LoginData,
1737+
wallet: GreenWallet?,
17361738
initNetwork: String?,
17371739
initAccount: Long?,
17381740
initializeSession: Boolean
@@ -1742,14 +1744,14 @@ class GdkSession constructor(
17421744

17431745
if (initializeSession) {
17441746
countly.activeWalletStart()
1745-
initializeSessionData(initNetwork, initAccount)
1747+
initializeSessionData(wallet, initNetwork, initAccount)
17461748
}
17471749

17481750
// Allow initialization calls to have priority over notifications initiated updates (getWalletTransactions & updateAccountAndBalances)
17491751
_disableNotificationHandling = false
17501752
}
17511753

1752-
private suspend fun initializeSessionData(initNetwork: String?, initAccount: Long?) {
1754+
private suspend fun initializeSessionData(wallet: GreenWallet?, initNetwork: String?, initAccount: Long?) {
17531755
// Check if active account index was archived from 1) a different client (multisig) or 2) from cached Singlesig hww session
17541756
// Expect refresh = true to be already called
17551757
updateAccounts()
@@ -1764,6 +1766,10 @@ class GdkSession constructor(
17641766
// Update the enriched assets
17651767
updateEnrichedAssets()
17661768

1769+
// Change wallet balance denomination
1770+
walletTotalBalanceDenominationStateFlow.value =
1771+
if (wallet?.extras?.totalBalanceInFiat == true) Denomination.defaultOrFiat(session = this, isFiat = true) else Denomination.BTC
1772+
17671773
if (!isWatchOnlyValue && !isLightningShortcut) {
17681774
// Sync settings from prominent network to the rest
17691775
syncSettings()

common/src/commonMain/kotlin/com/blockstream/common/models/overview/WalletBalanceViewModel.kt

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.blockstream.common.models.overview
22

33
import com.blockstream.common.data.Denomination
44
import com.blockstream.common.data.GreenWallet
5+
import com.blockstream.common.data.WalletExtras
56
import com.blockstream.common.extensions.launchIn
67
import com.blockstream.common.models.GreenViewModel
78
import com.blockstream.common.utils.toAmountLook
@@ -50,7 +51,7 @@ open class WalletBalanceViewModel(greenWallet: GreenWallet) :
5051

5152
combine(
5253
session.walletTotalBalance,
53-
session.walletTotalBalanceDenominationSharedFlow,
54+
session.walletTotalBalanceDenominationStateFlow,
5455
hideAmounts,
5556
session.settings()
5657
) { _, _, _, _ ->
@@ -61,7 +62,7 @@ open class WalletBalanceViewModel(greenWallet: GreenWallet) :
6162
}.onEach {
6263
updateBalance(
6364
session.walletTotalBalance.value,
64-
session.walletTotalBalanceDenominationSharedFlow.value.isFiat
65+
session.walletTotalBalanceDenominationStateFlow.value.isFiat
6566
)
6667
}.launchIn(this)
6768
}
@@ -71,10 +72,7 @@ open class WalletBalanceViewModel(greenWallet: GreenWallet) :
7172

7273
when (event) {
7374
is LocalEvents.ToggleBalance -> {
74-
session.walletTotalBalanceDenominationSharedFlow.value =
75-
session.walletTotalBalanceDenominationSharedFlow.value.let {
76-
Denomination.defaultOrFiat(session = session, isFiat = !it.isFiat)
77-
}
75+
toggleBalance()
7876
}
7977

8078
is LocalEvents.ToggleHideAmounts -> {
@@ -90,6 +88,24 @@ open class WalletBalanceViewModel(greenWallet: GreenWallet) :
9088
}
9189
}
9290

91+
fun toggleBalance() {
92+
doAsync({
93+
session.walletTotalBalanceDenominationStateFlow.value =
94+
session.walletTotalBalanceDenominationStateFlow.value.let {
95+
Denomination.defaultOrFiat(session = session, isFiat = !it.isFiat)
96+
}
97+
98+
if (!greenWallet.isEphemeral) {
99+
greenWallet.also {
100+
session.walletTotalBalanceDenominationStateFlow.value.isFiat.also { isFiat ->
101+
it.extras = it.extras?.copy(totalBalanceInFiat = isFiat) ?: WalletExtras(totalBalanceInFiat = isFiat)
102+
}
103+
database.updateWallet(it)
104+
}
105+
}
106+
})
107+
}
108+
93109
private suspend fun updateBalance(value: Long, isFiat: Boolean) {
94110
// Loading
95111
if (value == -1L) {

common/src/commonMain/kotlin/com/blockstream/common/models/settings/DenominationExchangeRateViewModel.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import com.blockstream.common.BTC_UNIT
66
import com.blockstream.common.BitcoinUnits
77
import com.blockstream.common.TestnetUnits
88
import com.blockstream.common.data.GreenWallet
9-
import com.blockstream.common.data.WalletExtras
109
import com.blockstream.common.extensions.ifConnected
1110
import com.blockstream.common.extensions.launchIn
1211
import com.blockstream.common.extensions.previewWallet
@@ -116,20 +115,6 @@ class DenominationExchangeRateViewModel(greenWallet: GreenWallet) :
116115
}
117116

118117
session.changeGlobalSettings(newSettings)
119-
120-
if (!greenWallet.isEphemeral) {
121-
greenWallet.also {
122-
// Pass settings to Lightning Shortcut
123-
sessionManager.getWalletSessionOrNull(it.lightningShortcutWallet())
124-
?.also { lightningSession ->
125-
lightningSession.changeGlobalSettings(newSettings)
126-
}
127-
128-
it.extras = WalletExtras(settings = newSettings.forWalletExtras())
129-
130-
database.updateWallet(it)
131-
}
132-
}
133118
}, onSuccess = {
134119
postSideEffect(SideEffects.Dismiss)
135120
})

common/src/commonMain/kotlin/com/blockstream/common/models/settings/WalletSettingsViewModel.kt

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -751,19 +751,6 @@ class WalletSettingsViewModel(
751751
private fun saveGlobalSettings(newSettings: Settings) {
752752
doAsync({
753753
session.changeGlobalSettings(newSettings)
754-
if (!greenWallet.isEphemeral) {
755-
greenWallet.also {
756-
// Pass settings to Lightning Shortcut
757-
sessionManager.getWalletSessionOrNull(it.lightningShortcutWallet())
758-
?.also { lightningSession ->
759-
lightningSession.changeGlobalSettings(newSettings)
760-
}
761-
762-
it.extras = WalletExtras(settings = newSettings.forWalletExtras())
763-
764-
database.updateWallet(it)
765-
}
766-
}
767754
}, onSuccess = {
768755
postSideEffect(SideEffects.Success())
769756
})

0 commit comments

Comments
 (0)