From 8fbc4951c1b1f52adecd2ec694ca3b009ef4a698 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 20 Apr 2023 17:32:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/features/wallet/ui/WalletFragment.kt | 39 ++++++++++++++++++- .../tap/features/wallet/ui/WalletViewModel.kt | 16 ++++---- .../AndroidNetworkConnectionManager.kt | 6 ++- .../connection/NetworkConnectionManager.kt | 5 +++ 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 3bf4cd8b80..e6fb203abb 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -7,8 +7,12 @@ import android.view.MenuItem import android.view.View import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity +import androidx.compose.runtime.mutableStateOf import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionInflater @@ -19,6 +23,7 @@ import com.badoo.mvicore.modelWatcher import com.tangem.core.analytics.Analytics import com.tangem.core.ui.fragments.setStatusBarColor import com.tangem.core.ui.utils.OneTouchClickListener +import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.feature.swap.api.SwapFeatureToggleManager import com.tangem.feature.swap.domain.SwapInteractor import com.tangem.tap.MainActivity @@ -47,6 +52,8 @@ import com.tangem.wallet.BuildConfig import com.tangem.wallet.R import com.tangem.wallet.databinding.FragmentWalletBinding import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint @@ -58,6 +65,9 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber state.select { it.walletState } } @@ -194,8 +208,7 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber) { warningsAdapter.submitList(warnings) binding.rvWarningMessages.show(warnings.isNotEmpty()) @@ -215,13 +233,17 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), SafeStoreSubscriber + if (isOnline && isNetworkConnectionError.value) { + refreshWalletData() + } + } + } + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.details_menu -> { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletViewModel.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletViewModel.kt index bba9814685..25b09a2610 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletViewModel.kt @@ -80,14 +80,6 @@ internal class WalletViewModel @Inject constructor( analyticsEventHandler.send(MainScreen.ScreenOpened()) } - private fun launch() { - val manager = store.state.globalState.userWalletsListManager - if (manager != null) { - bootstrapSelectedWalletStoresChanges(manager) - } - bootstrapShowSaveWalletIfNeeded() - } - fun onBalanceLoaded(totalBalance: TotalFiatBalance?) { if (totalBalance != null) { walletAnalyticsEventsMapper.convert(totalBalance)?.let { balanceParam -> @@ -100,6 +92,14 @@ internal class WalletViewModel @Inject constructor( } } + private fun launch() { + val manager = store.state.globalState.userWalletsListManager + if (manager != null) { + bootstrapSelectedWalletStoresChanges(manager) + } + bootstrapShowSaveWalletIfNeeded() + } + @OptIn(FlowPreview::class) private fun bootstrapSelectedWalletStoresChanges(manager: UserWalletsListManager) { observeWalletStoresUpdatesJob = manager.selectedUserWallet diff --git a/core/datasource/src/main/java/com/tangem/datasource/connection/AndroidNetworkConnectionManager.kt b/core/datasource/src/main/java/com/tangem/datasource/connection/AndroidNetworkConnectionManager.kt index 695dbce8bd..6581fbb384 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/connection/AndroidNetworkConnectionManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/connection/AndroidNetworkConnectionManager.kt @@ -15,6 +15,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @@ -35,12 +36,13 @@ internal class AndroidNetworkConnectionManager @Inject constructor( private val dispatchers: CoroutineDispatcherProvider, ) : NetworkConnectionManager { - override val isOnline: Boolean get() = _isOnline.value - private val _isOnline = MutableStateFlow(value = false) private val callbacks = NetworkConnectionManagerCallbacks() private val receiver = NetworkConnectionBroadcastReceiver() + override val isOnline: Boolean get() = _isOnline.value + override val isOnlineFlow: StateFlow = _isOnline + init { (context as? Application)?.registerActivityLifecycleCallbacks(callbacks) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/connection/NetworkConnectionManager.kt b/core/datasource/src/main/java/com/tangem/datasource/connection/NetworkConnectionManager.kt index fa6faca57d..dc1c3e9051 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/connection/NetworkConnectionManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/connection/NetworkConnectionManager.kt @@ -1,8 +1,13 @@ package com.tangem.datasource.connection +import kotlinx.coroutines.flow.StateFlow + /** Network connection manager */ interface NetworkConnectionManager { /** Connection status */ val isOnline: Boolean + + /** Connection status flow */ + val isOnlineFlow: StateFlow } \ No newline at end of file