Change-Id: Iac1e30f357149fc4c6076d688088f6a54fce73da
pull/1238/head
Jaehwa Noh 1 year ago
parent ee8e3aeba6
commit 5f124ead18

@ -16,6 +16,7 @@
package com.google.samples.apps.nowinandroid.core.data.repository package com.google.samples.apps.nowinandroid.core.data.repository
import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao
import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao
import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao
@ -78,10 +79,12 @@ internal class DefaultSearchContentsRepository @Inject constructor(
.distinctUntilChanged() .distinctUntilChanged()
.flatMapLatest(topicDao::getTopicEntities) .flatMapLatest(topicDao::getTopicEntities)
return combine(newsResourcesFlow, topicsFlow) { newsResources, topics -> return combine(newsResourcesFlow, topicsFlow) { newsResources, topics ->
SearchResult( trace("DefaultSearchContentsRepository.searchContents") {
topics = topics.map { it.asExternalModel() }, SearchResult(
newsResources = newsResources.map { it.asExternalModel() }, topics = topics.map { it.asExternalModel() },
) newsResources = newsResources.map { it.asExternalModel() },
)
}
}.flowOn(defaultDispatcher) }.flowOn(defaultDispatcher)
} }
@ -90,6 +93,8 @@ internal class DefaultSearchContentsRepository @Inject constructor(
newsResourceFtsDao.getCount(), newsResourceFtsDao.getCount(),
topicFtsDao.getCount(), topicFtsDao.getCount(),
) { newsResourceCount, topicsCount -> ) { newsResourceCount, topicsCount ->
newsResourceCount + topicsCount trace("DefaultSearchContentsRepository.getSearchContentsCount") {
newsResourceCount + topicsCount
}
}.flowOn(defaultDispatcher) }.flowOn(defaultDispatcher)
} }

@ -16,6 +16,7 @@
package com.google.samples.apps.nowinandroid.core.domain package com.google.samples.apps.nowinandroid.core.domain
import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository
import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository
import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NAME import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NAME
@ -46,16 +47,18 @@ class GetFollowableTopicsUseCase @Inject constructor(
userDataRepository.userData, userDataRepository.userData,
topicsRepository.getTopics(), topicsRepository.getTopics(),
) { userData, topics -> ) { userData, topics ->
val followedTopics = topics trace("GetFollowableTopicsUseCase.invoke") {
.map { topic -> val followedTopics = topics
FollowableTopic( .map { topic ->
topic = topic, FollowableTopic(
isFollowed = topic.id in userData.followedTopics, topic = topic,
) isFollowed = topic.id in userData.followedTopics,
)
}
when (sortBy) {
NAME -> followedTopics.sortedBy { it.topic.name }
else -> followedTopics
} }
when (sortBy) {
NAME -> followedTopics.sortedBy { it.topic.name }
else -> followedTopics
} }
}.flowOn(defaultDispatcher) }.flowOn(defaultDispatcher)
} }

@ -16,6 +16,7 @@
package com.google.samples.apps.nowinandroid.core.domain package com.google.samples.apps.nowinandroid.core.domain
import androidx.tracing.trace
import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository
import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository
import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic
@ -52,18 +53,20 @@ private fun Flow<SearchResult>.mapToUserSearchResult(
defaultDispatcher: CoroutineDispatcher, defaultDispatcher: CoroutineDispatcher,
): Flow<UserSearchResult> = ): Flow<UserSearchResult> =
combine(userDataStream) { searchResult, userData -> combine(userDataStream) { searchResult, userData ->
UserSearchResult( trace("Flow<SearchResult>.mapToUserSearchResult") {
topics = searchResult.topics.map { topic -> UserSearchResult(
FollowableTopic( topics = searchResult.topics.map { topic ->
topic = topic, FollowableTopic(
isFollowed = topic.id in userData.followedTopics, topic = topic,
) isFollowed = topic.id in userData.followedTopics,
}, )
newsResources = searchResult.newsResources.map { news -> },
UserNewsResource( newsResources = searchResult.newsResources.map { news ->
newsResource = news, UserNewsResource(
userData = userData, newsResource = news,
) userData = userData,
}, )
) },
)
}
}.flowOn(defaultDispatcher) }.flowOn(defaultDispatcher)

Loading…
Cancel
Save