diff --git a/wallet/src/de/schildbach/wallet/service/BlockchainServiceImpl.java b/wallet/src/de/schildbach/wallet/service/BlockchainServiceImpl.java index b4227afc98..7d12ea9564 100644 --- a/wallet/src/de/schildbach/wallet/service/BlockchainServiceImpl.java +++ b/wallet/src/de/schildbach/wallet/service/BlockchainServiceImpl.java @@ -1025,7 +1025,7 @@ void initViewModel() { blockchainStateDao.load().observe(this, (blockchainState) -> handleBlockchainStateNotification(blockchainState, mixingStatus)); registerCrowdNodeConfirmedAddressFilter(); - FlowExtKt.observe(coinJoinService.getMixingState(), this, (mixingStatus, continuation) -> { + FlowExtKt.observe(coinJoinService.observeMixingState(), this, (mixingStatus, continuation) -> { handleBlockchainStateNotification(blockchainState, mixingStatus); return null; }); diff --git a/wallet/src/de/schildbach/wallet/service/CoinJoinService.kt b/wallet/src/de/schildbach/wallet/service/CoinJoinService.kt index 9ff7312c6b..d5a443d1fd 100644 --- a/wallet/src/de/schildbach/wallet/service/CoinJoinService.kt +++ b/wallet/src/de/schildbach/wallet/service/CoinJoinService.kt @@ -81,9 +81,9 @@ enum class CoinJoinMode { * Monitor the status of the CoinJoin Mixing Service */ interface CoinJoinService { - val mixingStatus: MixingStatus - val mixingState: Flow - val mixingProgress: Flow + suspend fun getMixingState(): MixingStatus + fun observeMixingState(): Flow + fun observeMixingProgress(): Flow } enum class MixingStatus { @@ -122,11 +122,11 @@ class CoinJoinMixingService @Inject constructor( private var sessionCompleteListeners: ArrayList = arrayListOf() var mode: CoinJoinMode = CoinJoinMode.NONE - override var mixingStatus: MixingStatus = MixingStatus.NOT_STARTED - private set - val _mixingState = MutableStateFlow(MixingStatus.NOT_STARTED) - override val mixingState: Flow - get() = _mixingState + private val _mixingState = MutableStateFlow(MixingStatus.NOT_STARTED) + private val _progressFlow = MutableStateFlow(0.00) + + override suspend fun getMixingState(): MixingStatus = _mixingState.value + override fun observeMixingState(): Flow = _mixingState private val coroutineScope = CoroutineScope( Executors.newFixedThreadPool(2, ContextPropagatingThreadFactory("coinjoin-pool")).asCoroutineDispatcher() @@ -146,9 +146,7 @@ class CoinJoinMixingService @Inject constructor( private val updateMixingStateMutex = Mutex(locked = false) private var exception: Throwable? = null - override val mixingProgress: Flow - get() = _progressFlow - private val _progressFlow = MutableStateFlow(0.00) + override fun observeMixingProgress(): Flow = _progressFlow init { blockchainStateProvider.observeNetworkStatus() @@ -236,8 +234,8 @@ class CoinJoinMixingService @Inject constructor( "coinjoin-updateState: $mode, $hasAnonymizableBalance, $networkStatus, $isSynced, ${blockChain != null}" ) this.networkStatus = networkStatus - this.mixingStatus = mixingStatus - _mixingState.value = mixingStatus + // this.getMixingState = getMixingState + // _mixingState.value = getMixingState this.hasAnonymizableBalance = hasAnonymizableBalance this.isSynced = isSynced this.mode = mode @@ -268,8 +266,8 @@ class CoinJoinMixingService @Inject constructor( ) { updateMixingStateMutex.lock() try { - val previousMixingStatus = this.mixingStatus - this.mixingStatus = mixingStatus + val previousMixingStatus = _mixingState.value + _mixingState.value = mixingStatus log.info("coinjoin-updateMixingState: $previousMixingStatus -> $mixingStatus") when { diff --git a/wallet/src/de/schildbach/wallet/ui/SettingsViewModel.kt b/wallet/src/de/schildbach/wallet/ui/SettingsViewModel.kt index 47fc6c4da8..66d4e394d3 100644 --- a/wallet/src/de/schildbach/wallet/ui/SettingsViewModel.kt +++ b/wallet/src/de/schildbach/wallet/ui/SettingsViewModel.kt @@ -8,8 +8,9 @@ import de.schildbach.wallet.service.CoinJoinMode import de.schildbach.wallet.service.CoinJoinService import de.schildbach.wallet.service.MixingStatus import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.bitcoinj.utils.MonetaryFormat import org.bitcoinj.wallet.Wallet import org.bitcoinj.wallet.WalletEx import org.dash.wallet.common.WalletDataProvider @@ -29,8 +30,12 @@ class SettingsViewModel @Inject constructor( val coinJoinMixingMode: Flow get() = coinJoinConfig.observeMode() - val coinJoinMixingStatus: MixingStatus - get() = coinJoinService.mixingStatus + var coinJoinMixingStatus: MixingStatus = MixingStatus.NOT_STARTED + init { + coinJoinService.observeMixingState() + .onEach { coinJoinMixingStatus = it } + .launchIn(viewModelScope) + } var decimalFormat: DecimalFormat = DecimalFormat("0.000") val walletBalance: String diff --git a/wallet/src/de/schildbach/wallet/ui/main/MainViewModel.kt b/wallet/src/de/schildbach/wallet/ui/main/MainViewModel.kt index 9ec6f13a32..2d9f5e3922 100644 --- a/wallet/src/de/schildbach/wallet/ui/main/MainViewModel.kt +++ b/wallet/src/de/schildbach/wallet/ui/main/MainViewModel.kt @@ -101,8 +101,6 @@ import org.dash.wallet.common.util.head import org.dash.wallet.common.util.toBigDecimal import org.dash.wallet.integrations.crowdnode.transactions.FullCrowdNodeSignUpTxSet import org.slf4j.LoggerFactory -import java.math.MathContext -import java.math.RoundingMode import java.text.DecimalFormat import java.util.Currency import java.util.Locale @@ -210,9 +208,9 @@ class MainViewModel @Inject constructor( val coinJoinMode: Flow get() = coinJoinConfig.observeMode() val mixingState: Flow - get() = coinJoinService.mixingState + get() = coinJoinService.observeMixingState() val mixingProgress: Flow - get() = coinJoinService.mixingProgress + get() = coinJoinService.observeMixingProgress() var decimalFormat: DecimalFormat = DecimalFormat("0.000") val walletBalance: String