Skip to content

Commit 322ff63

Browse files
committed
Route topic chip tap events up to NiaNavHost
Change-Id: I228c486f5cde1bb47530e8f115a435bfa34381a7
1 parent e997459 commit 322ff63

File tree

22 files changed

+110
-148
lines changed

22 files changed

+110
-148
lines changed

app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -315,45 +315,19 @@ fun NiaCatalog() {
315315
item { Text("Tags", Modifier.padding(top = 16.dp)) }
316316
item {
317317
FlowRow(mainAxisSpacing = 16.dp) {
318-
var expandedTopicId by remember { mutableStateOf<String?>(null) }
319-
320-
var firstFollowed by remember { mutableStateOf(false) }
321318
NiaTopicTag(
322-
expanded = expandedTopicId == "Topic 1",
323-
followed = firstFollowed,
324-
onDropdownMenuToggle = { show ->
325-
expandedTopicId = if (show) "Topic 1" else null
326-
},
327-
onFollowClick = { firstFollowed = true },
328-
onUnfollowClick = { firstFollowed = false },
329-
onBrowseClick = {},
319+
followed = true,
320+
onClick = {},
330321
text = { Text(text = "Topic 1".uppercase()) },
331-
followText = { Text(text = "Follow") },
332-
unFollowText = { Text(text = "Unfollow") },
333-
browseText = { Text(text = "Browse topic") },
334322
)
335-
var secondFollowed by remember { mutableStateOf(true) }
336323
NiaTopicTag(
337-
expanded = expandedTopicId == "Topic 2",
338-
followed = secondFollowed,
339-
onDropdownMenuToggle = { show ->
340-
expandedTopicId = if (show) "Topic 2" else null
341-
},
342-
onFollowClick = { secondFollowed = true },
343-
onUnfollowClick = { secondFollowed = false },
344-
onBrowseClick = {},
324+
followed = false,
325+
onClick = {},
345326
text = { Text(text = "Topic 2".uppercase()) },
346-
followText = { Text(text = "Follow") },
347-
unFollowText = { Text(text = "Unfollow") },
348-
browseText = { Text(text = "Browse topic") },
349327
)
350328
NiaTopicTag(
351-
expanded = false,
352329
followed = false,
353-
onDropdownMenuToggle = {},
354-
onFollowClick = {},
355-
onUnfollowClick = {},
356-
onBrowseClick = {},
330+
onClick = {},
357331
text = { Text(text = "Disabled".uppercase()) },
358332
enabled = false,
359333
)

app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen
3737
@Composable
3838
fun NiaNavHost(
3939
navController: NavHostController,
40-
onBackClick: () -> Unit,
4140
modifier: Modifier = Modifier,
4241
startDestination: String = forYouNavigationRoute,
4342
) {
@@ -46,14 +45,18 @@ fun NiaNavHost(
4645
startDestination = startDestination,
4746
modifier = modifier,
4847
) {
49-
forYouScreen()
50-
bookmarksScreen()
48+
// TODO: handle topic clicks from each top level destination
49+
forYouScreen(onTopicClick = {})
50+
bookmarksScreen(onTopicClick = {})
5151
interestsGraph(
52-
navigateToTopic = { topicId ->
52+
onTopicClick = { topicId ->
5353
navController.navigateToTopic(topicId)
5454
},
5555
nestedGraphs = {
56-
topicScreen(onBackClick)
56+
topicScreen(
57+
onBackClick = navController::popBackStack,
58+
onTopicClick = {},
59+
)
5760
},
5861
)
5962
}

app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,7 @@ fun NiaApp(
178178
)
179179
}
180180

181-
NiaNavHost(
182-
navController = appState.navController,
183-
onBackClick = appState::onBackClick,
184-
)
181+
NiaNavHost(appState.navController)
185182
}
186183

187184
// TODO: We may want to add padding or spacer when the snackbar is shown so that

app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,6 @@ class NiaAppState(
136136
}
137137
}
138138

139-
fun onBackClick() {
140-
navController.popBackStack()
141-
}
142-
143139
fun setShowSettingsDialog(shouldShow: Boolean) {
144140
shouldShowSettingsDialog = shouldShow
145141
}

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,18 @@ import androidx.compose.foundation.layout.Box
2020
import androidx.compose.material3.ButtonDefaults
2121
import androidx.compose.material3.MaterialTheme
2222
import androidx.compose.material3.ProvideTextStyle
23-
import androidx.compose.material3.Text
2423
import androidx.compose.material3.TextButton
2524
import androidx.compose.material3.contentColorFor
2625
import androidx.compose.runtime.Composable
2726
import androidx.compose.ui.Modifier
28-
import androidx.compose.ui.res.stringResource
29-
import com.google.samples.apps.nowinandroid.core.designsystem.R
3027

3128
@Composable
3229
fun NiaTopicTag(
3330
modifier: Modifier = Modifier,
34-
expanded: Boolean = false,
3531
followed: Boolean,
36-
onDropdownMenuToggle: (show: Boolean) -> Unit = {},
37-
onFollowClick: () -> Unit,
38-
onUnfollowClick: () -> Unit,
39-
onBrowseClick: () -> Unit,
32+
onClick: () -> Unit,
4033
enabled: Boolean = true,
4134
text: @Composable () -> Unit,
42-
followText: @Composable () -> Unit = { Text(stringResource(R.string.follow)) },
43-
unFollowText: @Composable () -> Unit = { Text(stringResource(R.string.unfollow)) },
44-
browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) },
4535
) {
4636
Box(modifier = modifier) {
4737
val containerColor = if (followed) {
@@ -52,7 +42,7 @@ fun NiaTopicTag(
5242
)
5343
}
5444
TextButton(
55-
onClick = { onDropdownMenuToggle(true) },
45+
onClick = onClick,
5646
enabled = enabled,
5747
colors = ButtonDefaults.textButtonColors(
5848
containerColor = containerColor,
@@ -66,25 +56,6 @@ fun NiaTopicTag(
6656
text()
6757
}
6858
}
69-
NiaDropdownMenu(
70-
expanded = expanded,
71-
onDismissRequest = { onDropdownMenuToggle(false) },
72-
items = if (followed) listOf(UNFOLLOW, BROWSE) else listOf(FOLLOW, BROWSE),
73-
onItemClick = { item ->
74-
when (item) {
75-
FOLLOW -> onFollowClick()
76-
UNFOLLOW -> onUnfollowClick()
77-
BROWSE -> onBrowseClick()
78-
}
79-
},
80-
itemText = { item ->
81-
when (item) {
82-
FOLLOW -> followText()
83-
UNFOLLOW -> unFollowText()
84-
BROWSE -> browseText()
85-
}
86-
},
87-
)
8859
}
8960
}
9061

@@ -98,7 +69,3 @@ object NiaTagDefaults {
9869
// Button disabled container alpha value not exposed by ButtonDefaults
9970
const val DisabledTopicTagContainerAlpha = 0.12f
10071
}
101-
102-
private const val FOLLOW = 1
103-
private const val UNFOLLOW = 2
104-
private const val BROWSE = 3

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

Lines changed: 0 additions & 21 deletions
This file was deleted.

core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class NewsResourceCardTest {
4141
isBookmarked = false,
4242
onToggleBookmark = {},
4343
onClick = {},
44+
onTopicClick = {},
4445
)
4546

4647
dateFormatted = dateFormatted(publishDate = newsWithKnownResourceType.publishDate)
@@ -68,6 +69,7 @@ class NewsResourceCardTest {
6869
isBookmarked = false,
6970
onToggleBookmark = {},
7071
onClick = {},
72+
onTopicClick = {},
7173
)
7274

7375
dateFormatted = dateFormatted(publishDate = newsWithUnknownResourceType.publishDate)
@@ -81,7 +83,10 @@ class NewsResourceCardTest {
8183
@Test
8284
fun testTopicsChipColorBackground_matchesFollowedState() {
8385
composeTestRule.setContent {
84-
NewsResourceTopics(topics = followableTopicTestData)
86+
NewsResourceTopics(
87+
topics = followableTopicTestData,
88+
onTopicClick = {},
89+
)
8590
}
8691

8792
for (followableTopic in followableTopicTestData) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
4747
fun LazyGridScope.newsFeed(
4848
feedState: NewsFeedUiState,
4949
onNewsResourcesCheckedChanged: (String, Boolean) -> Unit,
50+
onTopicClick: (String) -> Unit,
5051
) {
5152
when (feedState) {
5253
NewsFeedUiState.Loading -> Unit
@@ -68,6 +69,7 @@ fun LazyGridScope.newsFeed(
6869
!userNewsResource.isSaved,
6970
)
7071
},
72+
onTopicClick = onTopicClick,
7173
)
7274
}
7375
}
@@ -112,6 +114,7 @@ private fun NewsFeedLoadingPreview() {
112114
newsFeed(
113115
feedState = NewsFeedUiState.Loading,
114116
onNewsResourcesCheckedChanged = { _, _ -> },
117+
onTopicClick = {},
115118
)
116119
}
117120
}
@@ -129,6 +132,7 @@ private fun NewsFeedContentPreview(
129132
newsFeed(
130133
feedState = NewsFeedUiState.Success(userNewsResources),
131134
onNewsResourcesCheckedChanged = { _, _ -> },
135+
onTopicClick = {},
132136
)
133137
}
134138
}

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

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ fun NewsResourceCardExpanded(
7979
isBookmarked: Boolean,
8080
onToggleBookmark: () -> Unit,
8181
onClick: () -> Unit,
82+
onTopicClick: (String) -> Unit,
8283
modifier: Modifier = Modifier,
8384
) {
8485
val clickActionLabel = stringResource(R.string.card_tap_action)
@@ -116,7 +117,10 @@ fun NewsResourceCardExpanded(
116117
Spacer(modifier = Modifier.height(12.dp))
117118
NewsResourceShortDescription(userNewsResource.content)
118119
Spacer(modifier = Modifier.height(12.dp))
119-
NewsResourceTopics(userNewsResource.followableTopics)
120+
NewsResourceTopics(
121+
topics = userNewsResource.followableTopics,
122+
onTopicClick = onTopicClick,
123+
)
120124
}
121125
}
122126
}
@@ -231,26 +235,17 @@ fun NewsResourceShortDescription(
231235
@Composable
232236
fun NewsResourceTopics(
233237
topics: List<FollowableTopic>,
238+
onTopicClick: (String) -> Unit,
234239
modifier: Modifier = Modifier,
235240
) {
236-
// Store the ID of the Topic which has its "following" menu expanded, if any.
237-
// To avoid UI confusion, only one topic can have an expanded menu at a time.
238-
var expandedTopicId by remember { mutableStateOf<String?>(null) }
239-
240241
Row(
241242
modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips
242243
horizontalArrangement = Arrangement.spacedBy(4.dp),
243244
) {
244245
for (followableTopic in topics) {
245246
NiaTopicTag(
246-
expanded = expandedTopicId == followableTopic.topic.id,
247247
followed = followableTopic.isFollowed,
248-
onDropdownMenuToggle = { show ->
249-
expandedTopicId = if (show) followableTopic.topic.id else null
250-
},
251-
onFollowClick = { }, // ToDo
252-
onUnfollowClick = { }, // ToDo
253-
onBrowseClick = { }, // ToDo
248+
onClick = { onTopicClick(followableTopic.topic.id) },
254249
text = {
255250
val contentDescription = if (followableTopic.isFollowed) {
256251
stringResource(
@@ -308,6 +303,7 @@ private fun ExpandedNewsResourcePreview(
308303
isBookmarked = true,
309304
onToggleBookmark = {},
310305
onClick = {},
306+
onTopicClick = {},
311307
)
312308
}
313309
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ fun LazyListScope.userNewsResourceCardItems(
3737
items: List<UserNewsResource>,
3838
onToggleBookmark: (item: UserNewsResource) -> Unit,
3939
onItemClick: ((item: UserNewsResource) -> Unit)? = null,
40+
onTopicClick: (String) -> Unit,
4041
itemModifier: Modifier = Modifier,
4142
) = items(
4243
items = items,
@@ -56,6 +57,7 @@ fun LazyListScope.userNewsResourceCardItems(
5657
else -> onItemClick(userNewsResource)
5758
}
5859
},
60+
onTopicClick = onTopicClick,
5961
modifier = itemModifier,
6062
)
6163
},

0 commit comments

Comments
 (0)