Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply flowOn(defaultDispatchers) for main-safe. #1238

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f19fe74
Apply withContext(defaultDispatchers) for main-safe.
Jaehwa-Noh Mar 2, 2024
3075835
Pass argument defaultDispatcher.
Jaehwa-Noh Mar 2, 2024
dbf3e26
Pass argument defaultDispatcher.
Jaehwa-Noh Mar 2, 2024
cba92ea
Pass argument defaultDispatcher.
Jaehwa-Noh Mar 2, 2024
30cfcf0
Pass argument defaultDispatcher.
Jaehwa-Noh Mar 3, 2024
e7e1674
Merge branch 'main' into main-safe
Jaehwa-Noh Mar 4, 2024
22130b6
Change withContext to flowOn.
Jaehwa-Noh Mar 4, 2024
4916b9f
Change withContext to flowOn.
Jaehwa-Noh Mar 4, 2024
ff1744b
Fix spotless
Jaehwa-Noh Mar 4, 2024
3fc2365
Pass argument defaultDispatcher.
Jaehwa-Noh Mar 6, 2024
7d98d19
Set private visibility.
Jaehwa-Noh Mar 6, 2024
79b7df7
Remove private visibility.
Jaehwa-Noh Mar 8, 2024
09a5cd8
Add code documentation.
Jaehwa-Noh Mar 8, 2024
d4b1c3e
Add MainDispatcherRule()
Jaehwa-Noh Mar 8, 2024
a564345
Show parameter name.
Jaehwa-Noh Mar 8, 2024
1cead62
Show parameters name.
Jaehwa-Noh Mar 8, 2024
e4854fd
Pass dispatcherRule.testDispatcher to run test same scheduler.
Jaehwa-Noh Mar 8, 2024
4cb837a
Fix spotless.
Jaehwa-Noh Mar 8, 2024
bd31b14
Merge branch 'android:main' into main-safe
Jaehwa-Noh Mar 8, 2024
79dbcbb
Merge branch 'android:main' into main-safe
Jaehwa-Noh Mar 11, 2024
022b87e
Merge branch 'android:main' into main-safe
Jaehwa-Noh Mar 14, 2024
56e4c7c
Merge branch 'android:main' into main-safe
Jaehwa-Noh Mar 15, 2024
ee8e3ae
Merge branch 'android:main' into main-safe
Jaehwa-Noh Mar 18, 2024
5f124ea
Add trace.
Jaehwa-Noh May 9, 2024
ca5a7bc
Merge branch 'android-remote-main' into main-safe
Jaehwa-Noh May 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActi
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import kotlinx.coroutines.Dispatchers
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -79,6 +80,7 @@ class NavigationUiTest {
val userNewsResourceRepository = CompositeUserNewsResourceRepository(
newsRepository = TestNewsRepository(),
userDataRepository = TestUserDataRepository(),
defaultDispatcher = Dispatchers.Default,
)

@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepo
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor
import com.google.samples.apps.nowinandroid.core.testing.util.TestTimeZoneMonitor
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
Expand Down Expand Up @@ -64,7 +65,7 @@ class NiaAppStateTest {
private val timeZoneMonitor = TestTimeZoneMonitor()

private val userNewsResourceRepository =
CompositeUserNewsResourceRepository(TestNewsRepository(), TestUserDataRepository())
CompositeUserNewsResourceRepository(TestNewsRepository(), TestUserDataRepository(), Dispatchers.Default)

// Subject under test.
private lateinit var state: NiaAppState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@ package com.google.samples.apps.nowinandroid.core.data.repository

import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource
import com.google.samples.apps.nowinandroid.core.model.data.mapToUserNewsResources
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import javax.inject.Inject

Expand All @@ -33,6 +37,7 @@ import javax.inject.Inject
class CompositeUserNewsResourceRepository @Inject constructor(
val newsRepository: NewsRepository,
val userDataRepository: UserDataRepository,
@Dispatcher(Default) private val defaultDispatcher: CoroutineDispatcher,
) : UserNewsResourceRepository {

/**
Expand All @@ -43,8 +48,10 @@ class CompositeUserNewsResourceRepository @Inject constructor(
): Flow<List<UserNewsResource>> =
newsRepository.getNewsResources(query)
.combine(userDataRepository.userData) { newsResources, userData ->
newsResources.mapToUserNewsResources(userData)
}
newsResources.mapToUserNewsResources(userData)
}.flowOn(
defaultDispatcher
)
Jaehwa-Noh marked this conversation as resolved.
Show resolved Hide resolved

/**
* Returns available news resources (joined with user data) for the followed topics.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel
import com.google.samples.apps.nowinandroid.core.database.model.asFtsEntity
import com.google.samples.apps.nowinandroid.core.model.data.SearchResult
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.withContext
import javax.inject.Inject
Expand All @@ -42,6 +44,7 @@ internal class DefaultSearchContentsRepository @Inject constructor(
private val topicDao: TopicDao,
private val topicFtsDao: TopicFtsDao,
@Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher,
@Dispatcher(Default) private val defaultDispatcher: CoroutineDispatcher,
) : SearchContentsRepository {

override suspend fun populateFtsData() {
Expand Down Expand Up @@ -79,7 +82,7 @@ internal class DefaultSearchContentsRepository @Inject constructor(
topics = topics.map { it.asExternalModel() },
newsResources = newsResources.map { it.asExternalModel() },
)
}
}.flowOn(defaultDispatcher)
}

override fun getSearchContentsCount(): Flow<Int> =
Expand All @@ -88,5 +91,5 @@ internal class DefaultSearchContentsRepository @Inject constructor(
topicFtsDao.getCount(),
) { newsResourceCount, topicsCount ->
newsResourceCount + topicsCount
}
}.flowOn(defaultDispatcher)
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit
import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NAME
import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NONE
import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOn
import javax.inject.Inject

/**
Expand All @@ -31,6 +35,7 @@ import javax.inject.Inject
class GetFollowableTopicsUseCase @Inject constructor(
private val topicsRepository: TopicsRepository,
private val userDataRepository: UserDataRepository,
@Dispatcher(Default) private val defaultDispatcher: CoroutineDispatcher,
) {
/**
* Returns a list of topics with their associated followed state.
Expand All @@ -52,7 +57,7 @@ class GetFollowableTopicsUseCase @Inject constructor(
NAME -> followedTopics.sortedBy { it.topic.name }
else -> followedTopics
}
}
}.flowOn(defaultDispatcher)
}

enum class TopicSortField {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,12 @@ import com.google.samples.apps.nowinandroid.core.model.data.SearchResult
import com.google.samples.apps.nowinandroid.core.model.data.UserData
import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource
import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult
import com.google.samples.apps.nowinandroid.core.network.Dispatcher
import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.Default
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOn
import javax.inject.Inject

/**
Expand All @@ -33,16 +37,20 @@ import javax.inject.Inject
class GetSearchContentsUseCase @Inject constructor(
private val searchContentsRepository: SearchContentsRepository,
private val userDataRepository: UserDataRepository,
@Dispatcher(Default) private val defaultDispatcher: CoroutineDispatcher,
) {

operator fun invoke(
searchQuery: String,
): Flow<UserSearchResult> =
searchContentsRepository.searchContents(searchQuery)
.mapToUserSearchResult(userDataRepository.userData)
.mapToUserSearchResult(userDataRepository.userData, defaultDispatcher)
}

private fun Flow<SearchResult>.mapToUserSearchResult(userDataStream: Flow<UserData>): Flow<UserSearchResult> =
private fun Flow<SearchResult>.mapToUserSearchResult(
userDataStream: Flow<UserData>,
defaultDispatcher: CoroutineDispatcher,
): Flow<UserSearchResult> =
combine(userDataStream) { searchResult, userData ->
UserSearchResult(
topics = searchResult.topics.map { topic ->
Expand All @@ -58,4 +66,4 @@ private fun Flow<SearchResult>.mapToUserSearchResult(userDataStream: Flow<UserDa
)
},
)
}
}.flowOn(defaultDispatcher)
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUi
import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery
import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading
import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
Expand All @@ -56,6 +57,7 @@ class SearchViewModelTest {
private val getSearchContentsUseCase = GetSearchContentsUseCase(
searchContentsRepository = searchContentsRepository,
userDataRepository = userDataRepository,
defaultDispatcher = Dispatchers.Default
)
private val recentSearchRepository = TestRecentSearchRepository()
private val getRecentQueryUseCase = GetRecentSearchQueriesUseCase(recentSearchRepository)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRe
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.topic.navigation.TOPIC_ID_ARG
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
Expand Down Expand Up @@ -54,6 +55,7 @@ class TopicViewModelTest {
private val userNewsResourceRepository = CompositeUserNewsResourceRepository(
newsRepository = newsRepository,
userDataRepository = userDataRepository,
defaultDispatcher = Dispatchers.Default,
)
private lateinit var viewModel: TopicViewModel

Expand Down