Skip to content

Commit bad3ea6

Browse files
committed
Refactor Topics news feed, tidy a few other bits up
Change-Id: Id4c9d1bce484137b363ec4cd21a45ca9863a2e7f
1 parent 45e3cfd commit bad3ea6

File tree

5 files changed

+35
-42
lines changed

5 files changed

+35
-42
lines changed

core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.google.samples.apps.nowinandroid.core.domain
1818

19-
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
19+
import com.google.samples.apps.nowinandroid.core.domain.model.mapToUserNewsResources
2020
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
2121
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video
2222
import com.google.samples.apps.nowinandroid.core.model.data.Topic
@@ -60,11 +60,7 @@ class GetUserNewsResourcesUseCaseTest {
6060

6161
// Check that the correct news resources are returned with their bookmarked state.
6262
assertEquals(
63-
listOf(
64-
UserNewsResource(sampleNewsResources[0], userData),
65-
UserNewsResource(sampleNewsResources[1], userData),
66-
UserNewsResource(sampleNewsResources[2], userData),
67-
),
63+
sampleNewsResources.mapToUserNewsResources(userData),
6864
userNewsResources.first()
6965
)
7066
}
@@ -83,9 +79,7 @@ class GetUserNewsResourcesUseCaseTest {
8379
assertEquals(
8480
sampleNewsResources
8581
.filter { it.topics.contains(sampleTopic1) }
86-
.map {
87-
UserNewsResource(it, emptyUserData)
88-
},
82+
.mapToUserNewsResources(emptyUserData),
8983
userNewsResources.first()
9084
)
9185
}

core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,6 @@ fun NewsResourceTopics(
236236
// Store the ID of the Topic which has its "following" menu expanded, if any.
237237
// To avoid UI confusion, only one topic can have an expanded menu at a time.
238238
var expandedTopicId by remember { mutableStateOf<String?>(null) }
239-
val isFollowed = stringResource(R.string.topic_is_followed)
240-
val isNotFollowed = stringResource(R.string.topic_is_not_followed)
241239

242240
Row(
243241
modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips
@@ -254,13 +252,21 @@ fun NewsResourceTopics(
254252
onUnfollowClick = { }, // ToDo
255253
onBrowseClick = { }, // ToDo
256254
text = {
255+
val contentDescription = if (followableTopic.isFollowed) {
256+
stringResource(
257+
R.string.topic_chip_content_description_when_followed,
258+
followableTopic.topic.name
259+
)
260+
} else {
261+
stringResource(
262+
R.string.topic_chip_content_description_when_not_followed,
263+
followableTopic.topic.name
264+
)
265+
}
257266
Text(
258267
text = followableTopic.topic.name.uppercase(Locale.getDefault()),
259268
modifier = Modifier.semantics {
260-
261-
contentDescription = followableTopic.topic.name + " " +
262-
if (followableTopic.isFollowed) isFollowed
263-
else isNotFollowed
269+
this.contentDescription = contentDescription
264270
}
265271
)
266272
}

core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,42 +24,36 @@ import androidx.compose.ui.Modifier
2424
import androidx.compose.ui.graphics.toArgb
2525
import androidx.compose.ui.platform.LocalContext
2626
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
27-
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
2827

2928
/**
30-
* Extension function for displaying a [List] of [NewsResourceCardExpanded] backed by a generic
31-
* [List] [T].
29+
* Extension function for displaying a [List] of [NewsResourceCardExpanded] backed by a list of
30+
* [UserNewsResource]s.
3231
*
33-
* [newsResourceMapper] maps type [T] to a [NewsResource]
34-
* [isBookmarkedMapper] maps type [T] to whether the [NewsResource] is bookmarked
3532
* [onToggleBookmark] defines the action invoked when a user wishes to bookmark an item
3633
* [onItemClick] optional parameter for action to be performed when the card is clicked. The
3734
* default action launches an intent matching the card.
3835
*/
39-
fun <T> LazyListScope.newsResourceCardItems(
40-
items: List<T>,
41-
newsResourceMapper: (item: T) -> UserNewsResource, // TODO remove this?
42-
isBookmarkedMapper: (item: T) -> Boolean,
43-
onToggleBookmark: (item: T) -> Unit,
44-
onItemClick: ((item: T) -> Unit)? = null,
36+
fun LazyListScope.userNewsResourceCardItems(
37+
items: List<UserNewsResource>,
38+
onToggleBookmark: (item: UserNewsResource) -> Unit,
39+
onItemClick: ((item: UserNewsResource) -> Unit)? = null,
4540
itemModifier: Modifier = Modifier,
4641
) = items(
4742
items = items,
48-
key = { newsResourceMapper(it).id },
49-
itemContent = { item ->
50-
val newsResource = newsResourceMapper(item)
51-
val resourceUrl = Uri.parse(newsResource.url)
43+
key = { it.id },
44+
itemContent = { userNewsResource ->
45+
val resourceUrl = Uri.parse(userNewsResource.url)
5246
val backgroundColor = MaterialTheme.colorScheme.background.toArgb()
5347
val context = LocalContext.current
5448

5549
NewsResourceCardExpanded(
56-
userNewsResource = newsResource,
57-
isBookmarked = isBookmarkedMapper(item),
58-
onToggleBookmark = { onToggleBookmark(item) },
50+
userNewsResource = userNewsResource,
51+
isBookmarked = userNewsResource.isSaved,
52+
onToggleBookmark = { onToggleBookmark(userNewsResource) },
5953
onClick = {
6054
when (onItemClick) {
6155
null -> launchCustomChromeTab(context, resourceUrl, backgroundColor)
62-
else -> onItemClick(item)
56+
else -> onItemClick(userNewsResource)
6357
}
6458
},
6559
modifier = itemModifier

core/ui/src/main/res/values/strings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@
2222
<string name="card_tap_action">Open Resource Link</string>
2323
<string name="card_meta_data_text">%1$s • %2$s</string>
2424

25-
<string name="topic_is_followed">is followed</string>
26-
<string name="topic_is_not_followed">is not followed</string>
25+
<string name="topic_chip_content_description_when_followed">%1$s is followed</string>
26+
<string name="topic_chip_content_description_when_not_followed">%1$s is not followed</string>
2727
</resources>

feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsRes
5757
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
5858
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
5959
import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank
60-
import com.google.samples.apps.nowinandroid.core.ui.newsResourceCardItems
60+
import com.google.samples.apps.nowinandroid.core.ui.userNewsResourceCardItems
6161
import com.google.samples.apps.nowinandroid.feature.topic.R.string
6262
import com.google.samples.apps.nowinandroid.feature.topic.TopicUiState.Loading
6363

@@ -145,7 +145,7 @@ private fun LazyListScope.TopicBody(
145145
TopicHeader(name, description, imageUrl)
146146
}
147147

148-
TopicCards(news, onBookmarkChanged)
148+
userNewsResourceCards(news, onBookmarkChanged)
149149
}
150150

151151
@Composable
@@ -173,16 +173,15 @@ private fun TopicHeader(name: String, description: String, imageUrl: String) {
173173
}
174174
}
175175

176-
private fun LazyListScope.TopicCards(
176+
// TODO: Could/should this be replaced with [LazyGridScope.newsFeed]?
177+
private fun LazyListScope.userNewsResourceCards(
177178
news: NewsUiState,
178179
onBookmarkChanged: (String, Boolean) -> Unit
179180
) {
180181
when (news) {
181182
is NewsUiState.Success -> {
182-
newsResourceCardItems(
183+
userNewsResourceCardItems(
183184
items = news.news,
184-
newsResourceMapper = { it },
185-
isBookmarkedMapper = { it.isSaved },
186185
onToggleBookmark = { onBookmarkChanged(it.id, !it.isSaved) },
187186
itemModifier = Modifier.padding(24.dp)
188187
)

0 commit comments

Comments
 (0)