From a85bd0967605365d0c79021be6c5ddb3f85f0886 Mon Sep 17 00:00:00 2001 From: Kaung Khant Soe Date: Wed, 2 Aug 2023 13:01:03 +0630 Subject: [PATCH 1/3] [#101] Backend implementation for internet connection --- app/src/main/AndroidManifest.xml | 1 + .../compose/crypto/di/modules/AppModule.kt | 12 +++++ .../crypto/ui/screens/home/HomeScreen.kt | 8 +++ .../crypto/ui/screens/home/HomeViewModel.kt | 17 ++++-- .../crypto/ui/screens/home/HomeScreenTest.kt | 10 ++-- .../ui/screens/home/HomeViewModelTest.kt | 9 ++-- .../data/repository/GlobalRepositoryImpl.kt | 53 +++++++++++++++++++ .../domain/repository/GlobalRepository.kt | 7 +++ .../usecase/GetConnectionStatsUseCase.kt | 9 ++++ 9 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt create mode 100644 domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt create mode 100644 domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 49a8f3ac..b2f5a256 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="co.nimblehq.compose.crypto"> + by viewModel.output.myCoins.collectAsState() diff --git a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt index 14d38678..0d7b4f05 100644 --- a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt +++ b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt @@ -1,7 +1,6 @@ package co.nimblehq.compose.crypto.ui.screens.home -import co.nimblehq.compose.crypto.domain.usecase.GetMyCoinsUseCase -import co.nimblehq.compose.crypto.domain.usecase.GetTrendingCoinsUseCase +import co.nimblehq.compose.crypto.domain.usecase.* import co.nimblehq.compose.crypto.lib.IsLoading import co.nimblehq.compose.crypto.ui.base.* import co.nimblehq.compose.crypto.ui.navigation.AppDestination @@ -52,7 +51,8 @@ interface Output : BaseOutput { class HomeViewModel @Inject constructor( dispatchers: DispatchersProvider, private val getMyCoinsUseCase: GetMyCoinsUseCase, - private val getTrendingCoinsUseCase: GetTrendingCoinsUseCase + private val getTrendingCoinsUseCase: GetTrendingCoinsUseCase, + private val getConnectionStatsUseCase: GetConnectionStatsUseCase, ) : BaseViewModel(dispatchers), Input, Output { override val input = this @@ -84,8 +84,19 @@ class HomeViewModel @Inject constructor( private var trendingCoinsPage = MY_COINS_INITIAL_PAGE + // TODO remove in integration ticket + private val _hasConnection = MutableStateFlow(null) + val hasConnection: StateFlow = _hasConnection + init { loadData() + // TODO remove in integration ticket + execute { + getConnectionStatsUseCase() + .collect { + _hasConnection.emit(it) + } + } } override fun loadData(isRefreshing: Boolean) { diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt index 4c08e397..1a45c44a 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt @@ -5,8 +5,7 @@ import androidx.compose.ui.test.* import androidx.compose.ui.test.junit4.* import androidx.navigation.* import co.nimblehq.compose.crypto.R -import co.nimblehq.compose.crypto.domain.usecase.GetMyCoinsUseCase -import co.nimblehq.compose.crypto.domain.usecase.GetTrendingCoinsUseCase +import co.nimblehq.compose.crypto.domain.usecase.* import co.nimblehq.compose.crypto.extension.toFormattedString import co.nimblehq.compose.crypto.test.MockUtil import co.nimblehq.compose.crypto.ui.navigation.AppDestination @@ -55,12 +54,16 @@ class HomeScreenTest : BaseViewModelTest() { private val mockGetMyCoinsUseCase = mockk() private val mockGetTrendingCoinsUseCase = mockk() + // TODO remove in integration ticket + private val mockGetConnectionStatsUseCase = mockk() + private lateinit var viewModel: HomeViewModel private var appDestination: AppDestination? = null @Before fun setUp() { + every { mockGetConnectionStatsUseCase() } returns flowOf(null) composeAndroidTestRule.activity.setContent { HomeScreen( viewModel = viewModel, @@ -216,7 +219,8 @@ class HomeScreenTest : BaseViewModelTest() { viewModel = HomeViewModel( dispatchers = testDispatcherProvider, getMyCoinsUseCase = mockGetMyCoinsUseCase, - getTrendingCoinsUseCase = mockGetTrendingCoinsUseCase + getTrendingCoinsUseCase = mockGetTrendingCoinsUseCase, + getConnectionStatsUseCase = mockGetConnectionStatsUseCase ) } } diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt index 4fcc9adf..c9c15acc 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt @@ -1,8 +1,7 @@ package co.nimblehq.compose.crypto.ui.screens.home import app.cash.turbine.test -import co.nimblehq.compose.crypto.domain.usecase.GetMyCoinsUseCase -import co.nimblehq.compose.crypto.domain.usecase.GetTrendingCoinsUseCase +import co.nimblehq.compose.crypto.domain.usecase.* import co.nimblehq.compose.crypto.test.MockUtil import co.nimblehq.compose.crypto.ui.navigation.AppDestination import co.nimblehq.compose.crypto.ui.screens.BaseViewModelTest @@ -25,6 +24,9 @@ class HomeViewModelTest : BaseViewModelTest() { private val mockGetTrendingCoinsUseCase = mockk() private lateinit var viewModel: HomeViewModel + // TODO remove in integration ticket + private val mockGetConnectionStatsUseCase = mockk() + @Before fun setUp() { every { mockGetMyCoinsUseCase.execute(any()) } returns flowOf(MockUtil.myCoins) @@ -143,7 +145,8 @@ class HomeViewModelTest : BaseViewModelTest() { viewModel = HomeViewModel( testDispatcherProvider, mockGetMyCoinsUseCase, - mockGetTrendingCoinsUseCase + mockGetTrendingCoinsUseCase, + mockGetConnectionStatsUseCase ) } } diff --git a/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt new file mode 100644 index 00000000..1d151b85 --- /dev/null +++ b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt @@ -0,0 +1,53 @@ +package co.nimblehq.compose.crypto.data.repository + +import android.content.Context +import android.net.* +import co.nimblehq.compose.crypto.domain.repository.GlobalRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow + +class GlobalRepositoryImpl( + context: Context +) : GlobalRepository { + + private var connectionStatus: MutableStateFlow = MutableStateFlow(null) + + private val networkRequest = NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .build() + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + // network is available for use + override fun onAvailable(network: Network) { + super.onAvailable(network) + connectionStatus.value = true + } + + // Network capabilities have changed for the network + override fun onCapabilitiesChanged( + network: Network, + networkCapabilities: NetworkCapabilities + ) { + super.onCapabilitiesChanged(network, networkCapabilities) + val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) + if(unmetered) { + connectionStatus.value = true + } + } + + // lost network connection + override fun onLost(network: Network) { + super.onLost(network) + connectionStatus.value = false + } + } + + init { + val connectivityManager = context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager + connectivityManager.requestNetwork(networkRequest, networkCallback) + } + + override fun getConnectionStatus(): Flow = connectionStatus +} diff --git a/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt b/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt new file mode 100644 index 00000000..f50847f0 --- /dev/null +++ b/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt @@ -0,0 +1,7 @@ +package co.nimblehq.compose.crypto.domain.repository + +import kotlinx.coroutines.flow.Flow + +interface GlobalRepository { + fun getConnectionStatus(): Flow +} diff --git a/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt new file mode 100644 index 00000000..716f2704 --- /dev/null +++ b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt @@ -0,0 +1,9 @@ +package co.nimblehq.compose.crypto.domain.usecase + +import co.nimblehq.compose.crypto.domain.repository.GlobalRepository +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class GetConnectionStatsUseCase @Inject constructor(private val repository: GlobalRepository) { + operator fun invoke(): Flow = repository.getConnectionStatus() +} From 8a173a86819bd7d3330de5f0de89dde8f010b175 Mon Sep 17 00:00:00 2001 From: Kaung Khant Soe Date: Wed, 2 Aug 2023 14:23:10 +0630 Subject: [PATCH 2/3] [#101] Minor grammar concerns --- .../compose/crypto/ui/screens/home/HomeViewModel.kt | 4 ++-- .../compose/crypto/ui/screens/home/HomeScreenTest.kt | 6 +++--- .../crypto/ui/screens/home/HomeViewModelTest.kt | 4 ++-- .../crypto/data/repository/GlobalRepositoryImpl.kt | 12 ++++++------ ...StatsUseCase.kt => GetConnectionStatusUseCase.kt} | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) rename domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/{GetConnectionStatsUseCase.kt => GetConnectionStatusUseCase.kt} (73%) diff --git a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt index 0d7b4f05..2d6529ff 100644 --- a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt +++ b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt @@ -52,7 +52,7 @@ class HomeViewModel @Inject constructor( dispatchers: DispatchersProvider, private val getMyCoinsUseCase: GetMyCoinsUseCase, private val getTrendingCoinsUseCase: GetTrendingCoinsUseCase, - private val getConnectionStatsUseCase: GetConnectionStatsUseCase, + private val getConnectionStatusUseCase: GetConnectionStatusUseCase, ) : BaseViewModel(dispatchers), Input, Output { override val input = this @@ -92,7 +92,7 @@ class HomeViewModel @Inject constructor( loadData() // TODO remove in integration ticket execute { - getConnectionStatsUseCase() + getConnectionStatusUseCase() .collect { _hasConnection.emit(it) } diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt index 1a45c44a..69937f12 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt @@ -55,7 +55,7 @@ class HomeScreenTest : BaseViewModelTest() { private val mockGetTrendingCoinsUseCase = mockk() // TODO remove in integration ticket - private val mockGetConnectionStatsUseCase = mockk() + private val mockGetConnectionStatusUseCase = mockk() private lateinit var viewModel: HomeViewModel @@ -63,7 +63,7 @@ class HomeScreenTest : BaseViewModelTest() { @Before fun setUp() { - every { mockGetConnectionStatsUseCase() } returns flowOf(null) + every { mockGetConnectionStatusUseCase() } returns flowOf(null) composeAndroidTestRule.activity.setContent { HomeScreen( viewModel = viewModel, @@ -220,7 +220,7 @@ class HomeScreenTest : BaseViewModelTest() { dispatchers = testDispatcherProvider, getMyCoinsUseCase = mockGetMyCoinsUseCase, getTrendingCoinsUseCase = mockGetTrendingCoinsUseCase, - getConnectionStatsUseCase = mockGetConnectionStatsUseCase + getConnectionStatusUseCase = mockGetConnectionStatusUseCase ) } } diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt index c9c15acc..f34fcd90 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt @@ -25,7 +25,7 @@ class HomeViewModelTest : BaseViewModelTest() { private lateinit var viewModel: HomeViewModel // TODO remove in integration ticket - private val mockGetConnectionStatsUseCase = mockk() + private val mockGetConnectionStatusUseCase = mockk() @Before fun setUp() { @@ -146,7 +146,7 @@ class HomeViewModelTest : BaseViewModelTest() { testDispatcherProvider, mockGetMyCoinsUseCase, mockGetTrendingCoinsUseCase, - mockGetConnectionStatsUseCase + mockGetConnectionStatusUseCase ) } } diff --git a/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt index 1d151b85..87590cfa 100644 --- a/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt +++ b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt @@ -10,7 +10,7 @@ class GlobalRepositoryImpl( context: Context ) : GlobalRepository { - private var connectionStatus: MutableStateFlow = MutableStateFlow(null) + private var isNetworkConnected: MutableStateFlow = MutableStateFlow(null) private val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) @@ -22,7 +22,7 @@ class GlobalRepositoryImpl( // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) - connectionStatus.value = true + isNetworkConnected.value = true } // Network capabilities have changed for the network @@ -32,15 +32,15 @@ class GlobalRepositoryImpl( ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) - if(unmetered) { - connectionStatus.value = true + if (unmetered) { + isNetworkConnected.value = true } } // lost network connection override fun onLost(network: Network) { super.onLost(network) - connectionStatus.value = false + isNetworkConnected.value = false } } @@ -49,5 +49,5 @@ class GlobalRepositoryImpl( connectivityManager.requestNetwork(networkRequest, networkCallback) } - override fun getConnectionStatus(): Flow = connectionStatus + override fun getConnectionStatus(): Flow = isNetworkConnected } diff --git a/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt similarity index 73% rename from domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt rename to domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt index 716f2704..7adbbb47 100644 --- a/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatsUseCase.kt +++ b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt @@ -4,6 +4,6 @@ import co.nimblehq.compose.crypto.domain.repository.GlobalRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject -class GetConnectionStatsUseCase @Inject constructor(private val repository: GlobalRepository) { +class GetConnectionStatusUseCase @Inject constructor(private val repository: GlobalRepository) { operator fun invoke(): Flow = repository.getConnectionStatus() } From 5af8ad3de7f5cbbde23a5734fcff11401d93dbf6 Mon Sep 17 00:00:00 2001 From: Kaung Khant Soe Date: Thu, 3 Aug 2023 10:37:45 +0630 Subject: [PATCH 3/3] [#101] Minor name changes --- .../nimblehq/compose/crypto/ui/screens/home/HomeScreen.kt | 8 ++++---- .../compose/crypto/ui/screens/home/HomeViewModel.kt | 4 ++-- .../compose/crypto/ui/screens/home/HomeScreenTest.kt | 6 +++--- .../compose/crypto/ui/screens/home/HomeViewModelTest.kt | 4 ++-- .../crypto/data/repository/GlobalRepositoryImpl.kt | 4 ++-- .../compose/crypto/domain/repository/GlobalRepository.kt | 2 +- ...ctionStatusUseCase.kt => IsNetworkConnectedUseCase.kt} | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) rename domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/{GetConnectionStatusUseCase.kt => IsNetworkConnectedUseCase.kt} (51%) diff --git a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreen.kt b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreen.kt index a4ac38e5..5e21838c 100644 --- a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreen.kt +++ b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreen.kt @@ -57,10 +57,10 @@ fun HomeScreen( } // TODO remove in integration ticket - val hasConnection by viewModel.hasConnection.collectAsState() - LaunchedEffect(key1 = hasConnection) { - if (hasConnection != null) { - Toast.makeText(context,"Connection: $hasConnection", Toast.LENGTH_SHORT).show() + val isNetworkConnected by viewModel.hasConnection.collectAsState() + LaunchedEffect(isNetworkConnected) { + if (isNetworkConnected != null) { + Toast.makeText(context,"Connection: $isNetworkConnected", Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt index 2d6529ff..4636e824 100644 --- a/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt +++ b/app/src/main/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModel.kt @@ -52,7 +52,7 @@ class HomeViewModel @Inject constructor( dispatchers: DispatchersProvider, private val getMyCoinsUseCase: GetMyCoinsUseCase, private val getTrendingCoinsUseCase: GetTrendingCoinsUseCase, - private val getConnectionStatusUseCase: GetConnectionStatusUseCase, + private val isNetworkConnectedUseCase: IsNetworkConnectedUseCase, ) : BaseViewModel(dispatchers), Input, Output { override val input = this @@ -92,7 +92,7 @@ class HomeViewModel @Inject constructor( loadData() // TODO remove in integration ticket execute { - getConnectionStatusUseCase() + isNetworkConnectedUseCase() .collect { _hasConnection.emit(it) } diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt index 69937f12..36982cbb 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeScreenTest.kt @@ -55,7 +55,7 @@ class HomeScreenTest : BaseViewModelTest() { private val mockGetTrendingCoinsUseCase = mockk() // TODO remove in integration ticket - private val mockGetConnectionStatusUseCase = mockk() + private val mockIsNetworkConnectedUseCase = mockk() private lateinit var viewModel: HomeViewModel @@ -63,7 +63,7 @@ class HomeScreenTest : BaseViewModelTest() { @Before fun setUp() { - every { mockGetConnectionStatusUseCase() } returns flowOf(null) + every { mockIsNetworkConnectedUseCase() } returns flowOf(null) composeAndroidTestRule.activity.setContent { HomeScreen( viewModel = viewModel, @@ -220,7 +220,7 @@ class HomeScreenTest : BaseViewModelTest() { dispatchers = testDispatcherProvider, getMyCoinsUseCase = mockGetMyCoinsUseCase, getTrendingCoinsUseCase = mockGetTrendingCoinsUseCase, - getConnectionStatusUseCase = mockGetConnectionStatusUseCase + isNetworkConnectedUseCase = mockIsNetworkConnectedUseCase ) } } diff --git a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt index f34fcd90..2dd11860 100644 --- a/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt +++ b/app/src/test/java/co/nimblehq/compose/crypto/ui/screens/home/HomeViewModelTest.kt @@ -25,7 +25,7 @@ class HomeViewModelTest : BaseViewModelTest() { private lateinit var viewModel: HomeViewModel // TODO remove in integration ticket - private val mockGetConnectionStatusUseCase = mockk() + private val mockIsNetworkConnectedUseCase = mockk() @Before fun setUp() { @@ -146,7 +146,7 @@ class HomeViewModelTest : BaseViewModelTest() { testDispatcherProvider, mockGetMyCoinsUseCase, mockGetTrendingCoinsUseCase, - mockGetConnectionStatusUseCase + mockIsNetworkConnectedUseCase ) } } diff --git a/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt index 87590cfa..e9983752 100644 --- a/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt +++ b/data/src/main/java/co/nimblehq/compose/crypto/data/repository/GlobalRepositoryImpl.kt @@ -10,7 +10,7 @@ class GlobalRepositoryImpl( context: Context ) : GlobalRepository { - private var isNetworkConnected: MutableStateFlow = MutableStateFlow(null) + private val isNetworkConnected: MutableStateFlow = MutableStateFlow(null) private val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) @@ -49,5 +49,5 @@ class GlobalRepositoryImpl( connectivityManager.requestNetwork(networkRequest, networkCallback) } - override fun getConnectionStatus(): Flow = isNetworkConnected + override fun isNetworkConnected(): Flow = isNetworkConnected } diff --git a/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt b/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt index f50847f0..0ac31a5e 100644 --- a/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt +++ b/domain/src/main/java/co/nimblehq/compose/crypto/domain/repository/GlobalRepository.kt @@ -3,5 +3,5 @@ package co.nimblehq.compose.crypto.domain.repository import kotlinx.coroutines.flow.Flow interface GlobalRepository { - fun getConnectionStatus(): Flow + fun isNetworkConnected(): Flow } diff --git a/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/IsNetworkConnectedUseCase.kt similarity index 51% rename from domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt rename to domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/IsNetworkConnectedUseCase.kt index 7adbbb47..f96bb82f 100644 --- a/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/GetConnectionStatusUseCase.kt +++ b/domain/src/main/java/co/nimblehq/compose/crypto/domain/usecase/IsNetworkConnectedUseCase.kt @@ -4,6 +4,6 @@ import co.nimblehq.compose.crypto.domain.repository.GlobalRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject -class GetConnectionStatusUseCase @Inject constructor(private val repository: GlobalRepository) { - operator fun invoke(): Flow = repository.getConnectionStatus() +class IsNetworkConnectedUseCase @Inject constructor(private val repository: GlobalRepository) { + operator fun invoke(): Flow = repository.isNetworkConnected() }