From e9e67db48389ee977d246547cab1c21ccde24bdb Mon Sep 17 00:00:00 2001 From: yveskalume Date: Thu, 17 Nov 2022 23:36:58 +0200 Subject: [PATCH] navigating to browse the topic on NiaTopicTag click --- .../samples/apps/niacatalog/ui/Catalog.kt | 18 ---------- .../nowinandroid/navigation/NiaNavHost.kt | 26 +++++++++++--- .../core/designsystem/component/Tag.kt | 35 +------------------ .../apps/nowinandroid/core/ui/NewsFeed.kt | 10 ++++-- .../nowinandroid/core/ui/NewsResourceCard.kt | 17 +++------ .../core/ui/NewsResourceCardList.kt | 2 ++ .../feature/author/AuthorScreenTest.kt | 4 +++ .../feature/author/AuthorScreen.kt | 17 ++++++--- .../author/navigation/AuthorNavigation.kt | 5 +-- .../feature/bookmarks/BookmarksScreenTest.kt | 9 +++-- .../feature/bookmarks/BookmarksScreen.kt | 3 ++ .../navigation/BookmarksNavigation.kt | 4 +-- .../feature/foryou/ForYouScreenTest.kt | 24 ++++++++----- .../feature/foryou/ForYouScreen.kt | 19 +++++++--- .../foryou/navigation/ForYouNavigation.kt | 4 +-- .../feature/topic/TopicScreenTest.kt | 4 +++ .../nowinandroid/feature/topic/TopicScreen.kt | 20 ++++++++--- .../topic/navigation/TopicNavigation.kt | 5 +-- 18 files changed, 122 insertions(+), 104 deletions(-) diff --git a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt b/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt index 851c20b28..8a8580935 100644 --- a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt +++ b/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt @@ -522,33 +522,15 @@ fun NiaCatalog() { var firstFollowed by remember { mutableStateOf(false) } NiaTopicTag( - expanded = expandedTopicId == "Topic 1", followed = firstFollowed, - onDropMenuToggle = { show -> - expandedTopicId = if (show) "Topic 1" else null - }, - onFollowClick = { firstFollowed = true }, - onUnfollowClick = { firstFollowed = false }, onBrowseClick = {}, text = { Text(text = "Topic 1".uppercase()) }, - followText = { Text(text = "Follow") }, - unFollowText = { Text(text = "Unfollow") }, - browseText = { Text(text = "Browse topic") } ) var secondFollowed by remember { mutableStateOf(true) } NiaTopicTag( - expanded = expandedTopicId == "Topic 2", followed = secondFollowed, - onDropMenuToggle = { show -> - expandedTopicId = if (show) "Topic 2" else null - }, - onFollowClick = { secondFollowed = true }, - onUnfollowClick = { secondFollowed = false }, onBrowseClick = {}, text = { Text(text = "Topic 2".uppercase()) }, - followText = { Text(text = "Follow") }, - unFollowText = { Text(text = "Unfollow") }, - browseText = { Text(text = "Browse topic") } ) } } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index 10fafddd9..101545ad7 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -48,8 +48,16 @@ fun NiaNavHost( startDestination = startDestination, modifier = modifier, ) { - forYouScreen() - bookmarksScreen() + forYouScreen( + onBrowseTopic = { topicId -> + navController.navigateToTopic(topicId) + } + ) + bookmarksScreen( + onBrowseTopic = { topicId -> + navController.navigateToTopic(topicId) + } + ) interestsGraph( navigateToTopic = { topicId -> navController.navigateToTopic(topicId) @@ -58,8 +66,18 @@ fun NiaNavHost( navController.navigateToAuthor(authorId) }, nestedGraphs = { - topicScreen(onBackClick) - authorScreen(onBackClick) + topicScreen( + onBackClick = onBackClick, + onBrowseTopic = { topicId -> + navController.navigateToTopic(topicId) + } + ) + authorScreen( + onBackClick = onBackClick, + onBrowseTopic = { topicId -> + navController.navigateToTopic(topicId) + } + ) } ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt index 6a2475931..9af4f39a1 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt @@ -18,28 +18,18 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component import androidx.compose.foundation.layout.Box import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource -import com.google.samples.apps.nowinandroid.core.designsystem.R @Composable fun NiaTopicTag( - expanded: Boolean = false, followed: Boolean, - onDropMenuToggle: (show: Boolean) -> Unit = {}, - onFollowClick: () -> Unit, - onUnfollowClick: () -> Unit, onBrowseClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, text: @Composable () -> Unit, - followText: @Composable () -> Unit = { Text(stringResource(R.string.follow)) }, - unFollowText: @Composable () -> Unit = { Text(stringResource(R.string.unfollow)) }, - browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) } ) { Box(modifier = modifier) { @@ -49,7 +39,7 @@ fun NiaTopicTag( MaterialTheme.colorScheme.surfaceVariant } NiaTextButton( - onClick = { onDropMenuToggle(true) }, + onClick = onBrowseClick, enabled = enabled, small = true, colors = NiaButtonDefaults.textButtonColors( @@ -65,28 +55,5 @@ fun NiaTopicTag( ), text = text ) - NiaDropdownMenu( - expanded = expanded, - onDismissRequest = { onDropMenuToggle(false) }, - items = if (followed) listOf(UNFOLLOW, BROWSE) else listOf(FOLLOW, BROWSE), - onItemClick = { item -> - when (item) { - FOLLOW -> onFollowClick() - UNFOLLOW -> onUnfollowClick() - BROWSE -> onBrowseClick() - } - }, - itemText = { item -> - when (item) { - FOLLOW -> followText() - UNFOLLOW -> unFollowText() - BROWSE -> browseText() - } - } - ) } } - -private const val FOLLOW = 1 -private const val UNFOLLOW = 2 -private const val BROWSE = 3 diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt index 32308bd63..f85eed061 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt @@ -42,7 +42,8 @@ import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources */ fun LazyGridScope.newsFeed( feedState: NewsFeedUiState, - onNewsResourcesCheckedChanged: (String, Boolean) -> Unit + onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, ) { when (feedState) { NewsFeedUiState.Loading -> Unit @@ -58,6 +59,7 @@ fun LazyGridScope.newsFeed( newsResource = saveableNewsResource.newsResource, isBookmarked = saveableNewsResource.isSaved, onClick = { ContextCompat.startActivity(context, launchResourceIntent, null) }, + onBrowseTopic = onBrowseTopic, onToggleBookmark = { onNewsResourcesCheckedChanged( saveableNewsResource.newsResource.id, @@ -97,7 +99,8 @@ fun NewsFeedLoadingPreview() { LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) { newsFeed( feedState = NewsFeedUiState.Loading, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -118,7 +121,8 @@ fun NewsFeedContentPreview() { ) } ), - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt index 16e86c192..2aa03ee87 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt @@ -82,6 +82,7 @@ fun NewsResourceCardExpanded( newsResource: NewsResource, isBookmarked: Boolean, onToggleBookmark: () -> Unit, + onBrowseTopic: (String) -> 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(topics = newsResource.topics, onBrowseTopic = onBrowseTopic) } } } @@ -267,26 +268,17 @@ fun NewsResourceShortDescription( @Composable fun NewsResourceTopics( topics: List, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier ) { - // Store the ID of the Topic which has its "following" menu expanded, if any. - // To avoid UI confusion, only one topic can have an expanded menu at a time. - var expandedTopicId by remember { mutableStateOf(null) } - Row( modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips horizontalArrangement = Arrangement.spacedBy(4.dp), ) { for (topic in topics) { NiaTopicTag( - expanded = expandedTopicId == topic.id, followed = true, // ToDo: Check if topic is followed - onDropMenuToggle = { show -> - expandedTopicId = if (show) topic.id else null - }, - onFollowClick = { }, // ToDo - onUnfollowClick = { }, // ToDo - onBrowseClick = { }, // ToDo + onBrowseClick = { onBrowseTopic(topic.id) }, // ToDo text = { Text(text = topic.name.uppercase(Locale.getDefault())) } ) } @@ -322,6 +314,7 @@ fun ExpandedNewsResourcePreview() { newsResource = previewNewsResources[0], isBookmarked = true, onToggleBookmark = {}, + onBrowseTopic = {}, onClick = {} ) } diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt index 25a7bd2dc..7862fc28e 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt @@ -41,6 +41,7 @@ fun LazyListScope.newsResourceCardItems( isBookmarkedMapper: (item: T) -> Boolean, onToggleBookmark: (item: T) -> Unit, onItemClick: ((item: T) -> Unit)? = null, + onBrowseTopic: (String) -> Unit, itemModifier: Modifier = Modifier, ) = items( items = items, @@ -55,6 +56,7 @@ fun LazyListScope.newsResourceCardItems( newsResource = newsResource, isBookmarked = isBookmarkedMapper(item), onToggleBookmark = { onToggleBookmark(item) }, + onBrowseTopic = onBrowseTopic, onClick = { when (onItemClick) { null -> ContextCompat.startActivity(context, launchResourceIntent, null) diff --git a/feature/author/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreenTest.kt b/feature/author/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreenTest.kt index b955912f2..5db1399c1 100644 --- a/feature/author/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreenTest.kt +++ b/feature/author/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreenTest.kt @@ -58,6 +58,7 @@ class AuthorScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -76,6 +77,7 @@ class AuthorScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -106,6 +108,7 @@ class AuthorScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -132,6 +135,7 @@ class AuthorScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } diff --git a/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreen.kt b/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreen.kt index 8f92a07d4..fa08ca72b 100644 --- a/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreen.kt +++ b/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreen.kt @@ -66,6 +66,7 @@ import com.google.samples.apps.nowinandroid.core.ui.newsResourceCardItems @Composable internal fun AuthorRoute( onBackClick: () -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier, viewModel: AuthorViewModel = hiltViewModel(), ) { @@ -79,6 +80,7 @@ internal fun AuthorRoute( onBackClick = onBackClick, onFollowClick = viewModel::followAuthorToggle, onBookmarkChanged = viewModel::bookmarkNews, + onBrowseTopic = onBrowseTopic ) } @@ -90,6 +92,7 @@ internal fun AuthorScreen( onBackClick: () -> Unit, onFollowClick: (Boolean) -> Unit, onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier, ) { val scrollableState = rememberLazyListState() @@ -126,6 +129,7 @@ internal fun AuthorScreen( author = authorUiState.followableAuthor.author, news = newsUiState, onBookmarkChanged = onBookmarkChanged, + onBrowseTopic = onBrowseTopic ) } } @@ -138,13 +142,14 @@ internal fun AuthorScreen( private fun LazyListScope.authorBody( author: Author, news: NewsUiState, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, ) { item { AuthorHeader(author) } - authorCards(news, onBookmarkChanged) + authorCards(news, onBookmarkChanged, onBrowseTopic) } @Composable @@ -175,7 +180,8 @@ private fun AuthorHeader(author: Author) { private fun LazyListScope.authorCards( news: NewsUiState, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, ) { when (news) { is NewsUiState.Success -> { @@ -184,7 +190,8 @@ private fun LazyListScope.authorCards( newsResourceMapper = { it.newsResource }, isBookmarkedMapper = { it.isSaved }, onToggleBookmark = { onBookmarkChanged(it.newsResource.id, !it.isSaved) }, - itemModifier = Modifier.padding(24.dp) + itemModifier = Modifier.padding(24.dp), + onBrowseTopic = onBrowseTopic ) } is NewsUiState.Loading -> item { @@ -251,6 +258,7 @@ fun AuthorScreenPopulated() { onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -267,6 +275,7 @@ fun AuthorScreenLoading() { onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } } diff --git a/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigation.kt b/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigation.kt index 59b68ce91..9c36ddc65 100644 --- a/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigation.kt +++ b/feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigation.kt @@ -41,7 +41,8 @@ fun NavController.navigateToAuthor(authorId: String) { } fun NavGraphBuilder.authorScreen( - onBackClick: () -> Unit + onBackClick: () -> Unit, + onBrowseTopic: (String) -> Unit, ) { composable( route = "author_route/{$authorIdArg}", @@ -49,6 +50,6 @@ fun NavGraphBuilder.authorScreen( navArgument(authorIdArg) { type = NavType.StringType } ) ) { - AuthorRoute(onBackClick = onBackClick) + AuthorRoute(onBackClick = onBackClick, onBrowseTopic = onBrowseTopic) } } diff --git a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt index 1dafc5c98..644616055 100644 --- a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt +++ b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt @@ -52,7 +52,8 @@ class BookmarksScreenTest { composeTestRule.setContent { BookmarksScreen( feedState = NewsFeedUiState.Loading, - removeFromBookmarks = { } + removeFromBookmarks = { }, + onBrowseTopic = {} ) } @@ -73,7 +74,8 @@ class BookmarksScreenTest { previewNewsResources.take(2) .map { SaveableNewsResource(it, true) } ), - removeFromBookmarks = { } + removeFromBookmarks = { }, + onBrowseTopic = {} ) } @@ -115,7 +117,8 @@ class BookmarksScreenTest { removeFromBookmarks = { newsResourceId -> assertEquals(previewNewsResources[0].id, newsResourceId) removeFromBookmarksCalled = true - } + }, + onBrowseTopic = {} ) } diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt index 06a87bc9e..39ce1aef8 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt +++ b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt @@ -64,12 +64,14 @@ import com.google.samples.apps.nowinandroid.core.ui.newsFeed @Composable internal fun BookmarksRoute( modifier: Modifier = Modifier, + onBrowseTopic: (String) -> Unit, viewModel: BookmarksViewModel = hiltViewModel() ) { val feedState by viewModel.feedUiState.collectAsStateWithLifecycle() BookmarksScreen( feedState = feedState, removeFromBookmarks = viewModel::removeFromSavedResources, + onBrowseTopic = onBrowseTopic, modifier = modifier ) } @@ -109,6 +111,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { private fun BookmarksGrid( feedState: NewsFeedUiState, removeFromBookmarks: (String) -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier ) { val scrollableState = rememberLazyGridState() diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt index 188c948e4..a170a197f 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt @@ -28,8 +28,8 @@ fun NavController.navigateToBookmarks(navOptions: NavOptions? = null) { this.navigate(bookmarksRoute, navOptions) } -fun NavGraphBuilder.bookmarksScreen() { +fun NavGraphBuilder.bookmarksScreen(onBrowseTopic: (String) -> Unit) { composable(route = bookmarksRoute) { - BookmarksRoute() + BookmarksRoute(onBrowseTopic = onBrowseTopic) } } diff --git a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt b/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt index d89f5d91f..85f9d6f6e 100644 --- a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt +++ b/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt @@ -59,7 +59,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -82,7 +83,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -111,7 +113,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -163,7 +166,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -215,7 +219,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -262,7 +267,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -285,7 +291,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -311,7 +318,8 @@ class ForYouScreenTest { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt index 34325ae93..5f537e615 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt @@ -97,6 +97,7 @@ import com.google.samples.apps.nowinandroid.core.ui.newsFeed @Composable internal fun ForYouRoute( modifier: Modifier = Modifier, + onBrowseTopic: (String) -> Unit, viewModel: ForYouViewModel = hiltViewModel() ) { val onboardingUiState by viewModel.onboardingUiState.collectAsStateWithLifecycle() @@ -111,6 +112,7 @@ internal fun ForYouRoute( onAuthorCheckedChanged = viewModel::updateAuthorSelection, saveFollowedTopics = viewModel::dismissOnboarding, onNewsResourcesCheckedChanged = viewModel::updateNewsResourceSaved, + onBrowseTopic = onBrowseTopic, modifier = modifier ) } @@ -124,6 +126,7 @@ internal fun ForYouScreen( onAuthorCheckedChanged: (String, Boolean) -> Unit, saveFollowedTopics: () -> Unit, onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier, ) { @@ -183,6 +186,7 @@ internal fun ForYouScreen( newsFeed( feedState = feedState, onNewsResourcesCheckedChanged = onNewsResourcesCheckedChanged, + onBrowseTopic = onBrowseTopic ) item(span = { GridItemSpan(maxLineSpan) }) { @@ -417,7 +421,8 @@ fun ForYouScreenPopulatedFeed() { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -439,7 +444,8 @@ fun ForYouScreenOfflinePopulatedFeed() { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -464,7 +470,8 @@ fun ForYouScreenTopicSelection() { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -482,7 +489,8 @@ fun ForYouScreenLoading() { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -504,7 +512,8 @@ fun ForYouScreenPopulatedAndLoading() { onTopicCheckedChanged = { _, _ -> }, onAuthorCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, + onBrowseTopic = {} ) } } diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt index f57deab90..759fe681a 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt @@ -28,8 +28,8 @@ fun NavController.navigateToForYou(navOptions: NavOptions? = null) { this.navigate(forYouNavigationRoute, navOptions) } -fun NavGraphBuilder.forYouScreen() { +fun NavGraphBuilder.forYouScreen(onBrowseTopic: (String) -> Unit) { composable(route = forYouNavigationRoute) { - ForYouRoute() + ForYouRoute(onBrowseTopic = onBrowseTopic) } } diff --git a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt b/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt index 0f20a5e5e..f042a431d 100644 --- a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt +++ b/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt @@ -62,6 +62,7 @@ class TopicScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -80,6 +81,7 @@ class TopicScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -110,6 +112,7 @@ class TopicScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } @@ -136,6 +139,7 @@ class TopicScreenTest { onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt index 61bd13aa0..e12d93aaf 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt @@ -66,6 +66,7 @@ import com.google.samples.apps.nowinandroid.feature.topic.TopicUiState.Loading @Composable internal fun TopicRoute( onBackClick: () -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier, viewModel: TopicViewModel = hiltViewModel(), ) { @@ -79,6 +80,7 @@ internal fun TopicRoute( onBackClick = onBackClick, onFollowClick = viewModel::followTopicToggle, onBookmarkChanged = viewModel::bookmarkNews, + onBrowseTopic = onBrowseTopic ) } @@ -90,6 +92,7 @@ internal fun TopicScreen( onBackClick: () -> Unit, onFollowClick: (Boolean) -> Unit, onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, modifier: Modifier = Modifier, ) { val state = rememberLazyListState() @@ -124,7 +127,8 @@ internal fun TopicScreen( description = topicUiState.followableTopic.topic.longDescription, news = newsUiState, imageUrl = topicUiState.followableTopic.topic.imageUrl, - onBookmarkChanged = onBookmarkChanged + onBookmarkChanged = onBookmarkChanged, + onBrowseTopic = onBrowseTopic ) } } @@ -139,14 +143,15 @@ private fun LazyListScope.TopicBody( description: String, news: NewsUiState, imageUrl: String, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, ) { // TODO: Show icon if available item { TopicHeader(name, description, imageUrl) } - TopicCards(news, onBookmarkChanged) + TopicCards(news, onBookmarkChanged, onBrowseTopic) } @Composable @@ -176,7 +181,8 @@ private fun TopicHeader(name: String, description: String, imageUrl: String) { private fun LazyListScope.TopicCards( news: NewsUiState, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, + onBrowseTopic: (String) -> Unit, ) { when (news) { is NewsUiState.Success -> { @@ -185,6 +191,7 @@ private fun LazyListScope.TopicCards( newsResourceMapper = { it.newsResource }, isBookmarkedMapper = { it.isSaved }, onToggleBookmark = { onBookmarkChanged(it.newsResource.id, !it.isSaved) }, + onBrowseTopic = onBrowseTopic, itemModifier = Modifier.padding(24.dp) ) } @@ -206,7 +213,8 @@ private fun TopicBodyPreview() { LazyColumn { TopicBody( "Jetpack Compose", "Lorem ipsum maximum", - NewsUiState.Success(emptyList()), "", { _, _ -> } + NewsUiState.Success(emptyList()), "", { _, _ -> }, + onBrowseTopic = {} ) } } @@ -267,6 +275,7 @@ fun TopicScreenPopulated() { onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } } @@ -283,6 +292,7 @@ fun TopicScreenLoading() { onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, + onBrowseTopic = {} ) } } diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt index 808143275..3aebca8b6 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt @@ -41,7 +41,8 @@ fun NavController.navigateToTopic(topicId: String) { } fun NavGraphBuilder.topicScreen( - onBackClick: () -> Unit + onBackClick: () -> Unit, + onBrowseTopic: (String) -> Unit, ) { composable( route = "topic_route/{$topicIdArg}", @@ -49,6 +50,6 @@ fun NavGraphBuilder.topicScreen( navArgument(topicIdArg) { type = NavType.StringType } ) ) { - TopicRoute(onBackClick = onBackClick) + TopicRoute(onBackClick = onBackClick, onBrowseTopic = onBrowseTopic) } }