Change chip color based on following

meghan
magicalmeghan 2 years ago
parent e72e31b1f0
commit 1a9d344322

@ -39,6 +39,10 @@ class GetSaveableNewsResourcesStreamUseCase @Inject constructor(
it.bookmarkedNewsResources
}
private val followedTopicsIdStream = userDataRepository.userDataStream.map {
it.followedTopics
}
/**
* Returns a list of SaveableNewsResources which match the supplied set of topic ids or author
* ids.
@ -60,18 +64,26 @@ class GetSaveableNewsResourcesStreamUseCase @Inject constructor(
filterTopicIds = filterTopicIds,
filterAuthorIds = filterAuthorIds
)
}.mapToSaveableNewsResources(bookmarkedNewsResourcesStream)
}.mapToSaveableNewsResources(
bookmarkedNewsResourcesStream,
followedTopicsIdStream
)
}
private fun Flow<List<NewsResource>>.mapToSaveableNewsResources(
savedNewsResourceIdsStream: Flow<Set<String>>
savedNewsResourceIdsStream: Flow<Set<String>>,
followedTopicIdsStream: Flow<Set<String>>
): Flow<List<SaveableNewsResource>> =
filterNot { it.isEmpty() }
.combine(savedNewsResourceIdsStream) { newsResources, savedNewsResourceIds ->
newsResources.map { newsResource ->
SaveableNewsResource(
newsResource = newsResource,
isSaved = savedNewsResourceIds.contains(newsResource.id)
)
}
combine(
filterNot { it.isEmpty() },
savedNewsResourceIdsStream,
followedTopicIdsStream
) { newsResources, savedNewsResourceIds, followedTopicIds ->
newsResources.map { newsResource ->
SaveableNewsResource(
newsResource = newsResource,
isSaved = savedNewsResourceIds.contains(newsResource.id),
followedTopicIds = followedTopicIds
)
}
}

@ -24,4 +24,5 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
data class SaveableNewsResource(
val newsResource: NewsResource,
val isSaved: Boolean,
val followedTopicIds: Set<String>
)

@ -57,6 +57,7 @@ fun LazyGridScope.newsFeed(
NewsResourceCardExpanded(
newsResource = saveableNewsResource.newsResource,
isBookmarked = saveableNewsResource.isSaved,
followedTopicIds = saveableNewsResource.followedTopicIds,
onClick = { ContextCompat.startActivity(context, launchResourceIntent, null) },
onToggleBookmark = {
onNewsResourcesCheckedChanged(
@ -113,8 +114,9 @@ fun NewsFeedContentPreview() {
feedState = NewsFeedUiState.Success(
previewNewsResources.map {
SaveableNewsResource(
it,
false
newsResource = it,
isSaved = false,
followedTopicIds = emptySet()
)
}
),

@ -81,6 +81,7 @@ import kotlinx.datetime.toJavaInstant
fun NewsResourceCardExpanded(
newsResource: NewsResource,
isBookmarked: Boolean,
followedTopicIds: Set<String>,
onToggleBookmark: () -> Unit,
onClick: () -> Unit,
modifier: Modifier = Modifier
@ -123,7 +124,7 @@ fun NewsResourceCardExpanded(
Spacer(modifier = Modifier.height(12.dp))
NewsResourceShortDescription(newsResource.content)
Spacer(modifier = Modifier.height(12.dp))
NewsResourceTopics(newsResource.topics)
NewsResourceTopics(newsResource.topics, followedTopicIds)
}
}
}
@ -267,6 +268,7 @@ fun NewsResourceShortDescription(
@Composable
fun NewsResourceTopics(
topics: List<Topic>,
followedTopicIds: Set<String>,
modifier: Modifier = Modifier
) {
// Store the ID of the Topic which has its "following" menu expanded, if any.
@ -280,7 +282,7 @@ fun NewsResourceTopics(
for (topic in topics) {
NiaTopicTag(
expanded = expandedTopicId == topic.id,
followed = true, // ToDo: Check if topic is followed
followed = followedTopicIds.contains(topic.id), // ToDo: Check if topic is followed
onDropMenuToggle = { show ->
expandedTopicId = if (show) topic.id else null
},
@ -321,6 +323,7 @@ fun ExpandedNewsResourcePreview() {
NewsResourceCardExpanded(
newsResource = previewNewsResources[0],
isBookmarked = true,
followedTopicIds = emptySet(),
onToggleBookmark = {},
onClick = {}
)

@ -54,6 +54,7 @@ fun <T> LazyListScope.newsResourceCardItems(
NewsResourceCardExpanded(
newsResource = newsResource,
isBookmarked = isBookmarkedMapper(item),
followedTopicIds = emptySet(), //TODO
onToggleBookmark = { onToggleBookmark(item) },
onClick = {
when (onItemClick) {

@ -246,6 +246,7 @@ fun AuthorScreenPopulated() {
SaveableNewsResource(
newsResource = newsResource,
isSaved = index % 2 == 0,
followedTopicIds = emptySet()
)
}
),

@ -399,7 +399,11 @@ fun ForYouScreenPopulatedFeed() {
onboardingUiState = OnboardingUiState.NotShown,
feedState = NewsFeedUiState.Success(
feed = previewNewsResources.map {
SaveableNewsResource(it, false)
SaveableNewsResource(
it,
isSaved = false,
followedTopicIds = emptySet()
)
}
),
onTopicCheckedChanged = { _, _ -> },
@ -421,7 +425,11 @@ fun ForYouScreenOfflinePopulatedFeed() {
onboardingUiState = OnboardingUiState.NotShown,
feedState = NewsFeedUiState.Success(
feed = previewNewsResources.map {
SaveableNewsResource(it, false)
SaveableNewsResource(
newsResource = it,
isSaved = false,
followedTopicIds = emptySet()
)
}
),
onTopicCheckedChanged = { _, _ -> },
@ -446,8 +454,12 @@ fun ForYouScreenTopicSelection() {
),
feedState = NewsFeedUiState.Success(
feed = previewNewsResources.map {
SaveableNewsResource(it, false)
}
SaveableNewsResource(
newsResource = it,
isSaved = false,
followedTopicIds = emptySet()
)
},
),
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
@ -486,8 +498,12 @@ fun ForYouScreenPopulatedAndLoading() {
onboardingUiState = OnboardingUiState.Loading,
feedState = NewsFeedUiState.Success(
feed = previewNewsResources.map {
SaveableNewsResource(it, false)
}
SaveableNewsResource(
newsResource = it,
isSaved = false,
followedTopicIds = emptySet()
)
},
),
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },

@ -257,6 +257,7 @@ fun TopicScreenPopulated() {
SaveableNewsResource(
newsResource = newsResource,
isSaved = index % 2 == 0,
followedTopicIds = emptySet()
)
}
),

Loading…
Cancel
Save