From a4c52e6485b7de29700c9d6db36cb5a073d718c9 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 11 Mar 2024 20:54:13 +0000 Subject: [PATCH 1/5] Remove the search module's dependency on other feature modules Change-Id: I17df9948fed04ddc7ba507b437d39536b8b180bb --- .../nowinandroid/core/ui}/InterestsItem.kt | 10 ++++----- core/ui/src/main/res/values/strings.xml | 3 +++ .../feature/foryou/ForYouViewModelTest.kt | 20 ++++++++++++++++++ .../feature/interests/TabContent.kt | 1 + .../interests/src/main/res/values/strings.xml | 2 -- feature/search/build.gradle.kts | 4 +--- .../feature/search/SearchScreen.kt | 14 ++++--------- .../feature/search/SearchViewModel.kt | 20 ++++++++++++++++++ .../feature/search/SearchViewModelTest.kt | 21 +++++++++++++++++++ 9 files changed, 75 insertions(+), 20 deletions(-) rename {feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui}/InterestsItem.kt (95%) diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt similarity index 95% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt index 6ac0340ee..28cd8d938 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -38,7 +38,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicA import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.feature.interests.R.string +import com.google.samples.apps.nowinandroid.core.ui.R.string @Composable fun InterestsItem( @@ -70,7 +70,7 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Add, contentDescription = stringResource( - id = string.feature_interests_card_follow_button_content_desc, + id = string.core_ui_interests_card_follow_button_content_desc, ), ) }, @@ -78,7 +78,7 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Check, contentDescription = stringResource( - id = string.feature_interests_card_unfollow_button_content_desc, + id = string.core_ui_interests_card_unfollow_button_content_desc, ), ) }, diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index 65a855fc9..ab76748ef 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -26,4 +26,7 @@ %1$s is followed %1$s is not followed + + Follow interest + Unfollow interest diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index b75573975..2fbdf0a79 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -36,6 +36,7 @@ import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncManager import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.feature.foryou.navigation.LINKED_NEWS_RESOURCE_ID import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle @@ -70,6 +71,7 @@ class ForYouViewModelTest { topicsRepository = topicsRepository, userDataRepository = userDataRepository, ) + private val savedStateHandle = SavedStateHandle() private lateinit var viewModel: ForYouViewModel @@ -504,6 +506,24 @@ class ForYouViewModelTest { collectJob.cancel() } + + @Test + fun whenUpdateNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.updateNewsResourceSaved(newsResourceId, true) + + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.updateNewsResourceSaved(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + } } private val sampleTopics = listOf( diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index 4a48645c5..83058c12e 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -39,6 +39,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollba import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberDraggableScroller import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem @Composable fun TopicsTabContent( diff --git a/feature/interests/src/main/res/values/strings.xml b/feature/interests/src/main/res/values/strings.xml index 2dd1c18a9..8d5322859 100644 --- a/feature/interests/src/main/res/values/strings.xml +++ b/feature/interests/src/main/res/values/strings.xml @@ -18,6 +18,4 @@ Interests Loading data "No available data" - Follow interest - Unfollow interest diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index 206f4c0f9..98052e9ab 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -27,9 +27,7 @@ android { dependencies { implementation(projects.core.data) implementation(projects.core.domain) - implementation(projects.feature.bookmarks) - implementation(projects.feature.foryou) - implementation(projects.feature.interests) + implementation(projects.core.ui) testImplementation(projects.core.testing) diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt index ca159c80b..1e4711016 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt @@ -88,14 +88,11 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.R.string import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.core.ui.newsFeed -import com.google.samples.apps.nowinandroid.feature.bookmarks.BookmarksViewModel -import com.google.samples.apps.nowinandroid.feature.foryou.ForYouViewModel -import com.google.samples.apps.nowinandroid.feature.interests.InterestsItem -import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel import com.google.samples.apps.nowinandroid.feature.search.R as searchR @Composable @@ -104,10 +101,7 @@ internal fun SearchRoute( onInterestsClick: () -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, - bookmarksViewModel: BookmarksViewModel = hiltViewModel(), - interestsViewModel: InterestsViewModel = hiltViewModel(), searchViewModel: SearchViewModel = hiltViewModel(), - forYouViewModel: ForYouViewModel = hiltViewModel(), ) { val recentSearchQueriesUiState by searchViewModel.recentSearchQueriesUiState.collectAsStateWithLifecycle() val searchResultUiState by searchViewModel.searchResultUiState.collectAsStateWithLifecycle() @@ -120,9 +114,9 @@ internal fun SearchRoute( onSearchQueryChanged = searchViewModel::onSearchQueryChanged, onSearchTriggered = searchViewModel::onSearchTriggered, onClearRecentSearches = searchViewModel::clearRecentSearches, - onNewsResourcesCheckedChanged = forYouViewModel::updateNewsResourceSaved, - onNewsResourceViewed = { bookmarksViewModel.setNewsResourceViewed(it, true) }, - onFollowButtonClick = interestsViewModel::followTopic, + onNewsResourcesCheckedChanged = searchViewModel::setNewsResourceBookmarked, + onNewsResourceViewed = { searchViewModel.setNewsResourceViewed(it, true) }, + onFollowButtonClick = searchViewModel::followTopic, onBackClick = onBackClick, onInterestsClick = onInterestsClick, onTopicClick = onTopicClick, diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 7c05f81c5..43d5b9405 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -23,6 +23,7 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase @@ -44,6 +45,7 @@ class SearchViewModel @Inject constructor( getSearchContentsCountUseCase: GetSearchContentsCountUseCase, recentSearchQueriesUseCase: GetRecentSearchQueriesUseCase, private val recentSearchRepository: RecentSearchRepository, + private val userDataRepository: UserDataRepository, private val savedStateHandle: SavedStateHandle, private val analyticsHelper: AnalyticsHelper, ) : ViewModel() { @@ -111,6 +113,24 @@ class SearchViewModel @Inject constructor( recentSearchRepository.clearRecentSearches() } } + + fun setNewsResourceBookmarked(newsResourceId: String, isChecked: Boolean) { + viewModelScope.launch { + userDataRepository.updateNewsResourceBookmark(newsResourceId, isChecked) + } + } + + fun followTopic(followedTopicId: String, followed: Boolean) { + viewModelScope.launch { + userDataRepository.setTopicIdFollowed(followedTopicId, followed) + } + } + + fun setNewsResourceViewed(newsResourceId: String, viewed: Boolean) { + viewModelScope.launch { + userDataRepository.setNewsResourceViewed(newsResourceId, viewed) + } + } } private fun AnalyticsHelper.logEventSearchTriggered(query: String) = diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index da0d5654e..662afca7d 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -33,6 +33,7 @@ import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.E import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest @@ -60,6 +61,7 @@ class SearchViewModelTest { private val recentSearchRepository = TestRecentSearchRepository() private val getRecentQueryUseCase = GetRecentSearchQueriesUseCase(recentSearchRepository) private val getSearchContentsCountUseCase = GetSearchContentsCountUseCase(searchContentsRepository) + private lateinit var viewModel: SearchViewModel @Before @@ -70,6 +72,7 @@ class SearchViewModelTest { recentSearchQueriesUseCase = getRecentQueryUseCase, savedStateHandle = SavedStateHandle(), recentSearchRepository = recentSearchRepository, + userDataRepository = userDataRepository, analyticsHelper = NoOpAnalyticsHelper(), ) userDataRepository.setUserData(emptyUserData) @@ -128,4 +131,22 @@ class SearchViewModelTest { collectJob.cancel() } + + @Test + fun whenToggleNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.setNewsResourceBookmarked(newsResourceId, true) + + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.setNewsResourceBookmarked(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + } } From 5084fca4dd14cc987391342cfb2e8e419a892768 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 11 Mar 2024 21:26:42 +0000 Subject: [PATCH 2/5] Fix InterestScreenTest resources Change-Id: Ib6aa372a1ab3b13b5c69c1d3feec2c31e5dca3ce --- .../nowinandroid/interests/InterestsScreenTest.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt index 1584662b8..a441f5a9d 100644 --- a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt @@ -27,10 +27,11 @@ import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.feature.interests.InterestsScreen import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState -import com.google.samples.apps.nowinandroid.feature.interests.R import org.junit.Before import org.junit.Rule import org.junit.Test +import com.google.samples.apps.nowinandroid.core.ui.R as CoreUiR +import com.google.samples.apps.nowinandroid.feature.interests.R as InterestsR /** * UI test for checking the correct behaviour of the Interests screen; @@ -50,12 +51,12 @@ class InterestsScreenTest { @Before fun setup() { composeTestRule.activity.apply { - interestsLoading = getString(R.string.feature_interests_loading) - interestsEmptyHeader = getString(R.string.feature_interests_empty_header) + interestsLoading = getString(InterestsR.string.feature_interests_loading) + interestsEmptyHeader = getString(InterestsR.string.feature_interests_empty_header) interestsTopicCardFollowButton = - getString(R.string.feature_interests_card_follow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_follow_button_content_desc) interestsTopicCardUnfollowButton = - getString(R.string.feature_interests_card_unfollow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_unfollow_button_content_desc) } } From ce9e82622dabeecb4abd2a5cf12184102c541e25 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 15:26:55 +0000 Subject: [PATCH 3/5] Fix broken reference to string resources Change-Id: Ide4cb90abc2ae7ca78488909a37df685c2e71ec6 --- .../apps/nowinandroid/feature/search/SearchScreenTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index 8a0532e1b..fe01bf4d2 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -38,7 +38,7 @@ import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestD import org.junit.Before import org.junit.Rule import org.junit.Test -import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR +import com.google.samples.apps.nowinandroid.core.ui.R.string /** * UI test for checking the correct behaviour of the Search screen. @@ -73,9 +73,9 @@ class SearchScreenTest { clearSearchContentDesc = getString(R.string.feature_search_clear_search_text_content_desc) clearRecentSearchesContentDesc = getString(R.string.feature_search_clear_recent_searches_content_desc) followButtonContentDesc = - getString(interestsR.string.feature_interests_card_follow_button_content_desc) + getString(string.core_ui_interests_card_follow_button_content_desc) unfollowButtonContentDesc = - getString(interestsR.string.feature_interests_card_unfollow_button_content_desc) + getString(string.core_ui_interests_card_unfollow_button_content_desc) topicsString = getString(R.string.feature_search_topics) updatesString = getString(R.string.feature_search_updates) tryAnotherSearchString = getString(R.string.feature_search_try_another_search) + From b5bfe44bf305fa791eb883b1d6a3636d219293d3 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 16:04:10 +0000 Subject: [PATCH 4/5] Fix spotless Change-Id: I5b08ce68522c59cdd7f7ec56a14a7ebc8b3868cd --- .../apps/nowinandroid/feature/search/SearchScreenTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index fe01bf4d2..a9e2fa98f 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -35,10 +35,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserData import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData +import com.google.samples.apps.nowinandroid.core.ui.R.string import org.junit.Before import org.junit.Rule import org.junit.Test -import com.google.samples.apps.nowinandroid.core.ui.R.string /** * UI test for checking the correct behaviour of the Search screen. From 1d769f13a3e06bd56a8146ef6526a51b844b537f Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 17:40:54 +0000 Subject: [PATCH 5/5] Update module dependency graphs Change-Id: Ia2fe3f339b26bf64dd965fc1aa58a957cb7c7f93 --- docs/images/graphs/dep_graph_app.svg | 336 +++++++++--------- .../graphs/dep_graph_feature_search.svg | 308 ++++++---------- 2 files changed, 262 insertions(+), 382 deletions(-) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg index f305eff13..57a592a8e 100644 --- a/docs/images/graphs/dep_graph_app.svg +++ b/docs/images/graphs/dep_graph_app.svg @@ -4,478 +4,460 @@ - - + + G - + :app - -:app + +:app :feature:interests - -:feature:interests + +:feature:interests :app->:feature:interests - - + + :feature:foryou - -:feature:foryou + +:feature:foryou :app->:feature:foryou - - + + :feature:bookmarks - -:feature:bookmarks + +:feature:bookmarks :app->:feature:bookmarks - - + + :feature:topic - -:feature:topic + +:feature:topic :app->:feature:topic - - + + :feature:search - -:feature:search + +:feature:search :app->:feature:search - - + + :feature:settings - -:feature:settings + +:feature:settings :app->:feature:settings - - + + :core:common - -:core:common + +:core:common :app->:core:common - - + + :core:ui - -:core:ui + +:core:ui :app->:core:ui - - + + :core:designsystem - -:core:designsystem + +:core:designsystem :app->:core:designsystem - - + + :core:data - -:core:data + +:core:data :app->:core:data - - + + :core:model - -:core:model + +:core:model :app->:core:model - - + + :core:analytics - -:core:analytics + +:core:analytics :app->:core:analytics - - + + :sync:work - -:sync:work + +:sync:work :app->:sync:work - - + + :feature:interests->:core:ui - - + + :feature:interests->:core:designsystem - - + + :feature:interests->:core:data - - + + :core:domain - -:core:domain + +:core:domain :feature:interests->:core:domain - - + + :feature:foryou->:core:ui - - + + :feature:foryou->:core:designsystem - - + + :feature:foryou->:core:data - - + + :feature:foryou->:core:domain - - + + :feature:bookmarks->:core:ui - - + + :feature:bookmarks->:core:designsystem - - + + :feature:bookmarks->:core:data - - + + :feature:topic->:core:ui - - + + :feature:topic->:core:designsystem - - + + :feature:topic->:core:data - - - - - -:feature:search->:feature:interests - - - - - -:feature:search->:feature:foryou - - - - - -:feature:search->:feature:bookmarks - - + + :feature:search->:core:ui - - + + :feature:search->:core:designsystem - - + + :feature:search->:core:data - - + + :feature:search->:core:domain - - + + - + :feature:settings->:core:ui - - + + - + :feature:settings->:core:designsystem - - + + - + :feature:settings->:core:data - - + + :core:ui->:core:designsystem - - + + :core:ui->:core:model - - + + :core:ui->:core:analytics - - + + :core:data->:core:common - - + + :core:data->:core:analytics - - + + :core:database - -:core:database + +:core:database :core:data->:core:database - - + + :core:datastore - -:core:datastore + +:core:datastore :core:data->:core:datastore - - + + :core:network - -:core:network + +:core:network :core:data->:core:network - - + + :core:notifications - -:core:notifications + +:core:notifications :core:data->:core:notifications - - + + - + :sync:work->:core:data - - + + - + :sync:work->:core:analytics - - + + :core:domain->:core:data - - + + :core:domain->:core:model - - + + :core:database->:core:model - - + + :core:datastore->:core:common - - + + :core:datastore->:core:model - - + + :core:datastore-proto - -:core:datastore-proto + +:core:datastore-proto :core:datastore->:core:datastore-proto - - + + :core:network->:core:common - - + + :core:network->:core:model - - + + :core:notifications->:core:common - - + + :core:notifications->:core:model - - + + diff --git a/docs/images/graphs/dep_graph_feature_search.svg b/docs/images/graphs/dep_graph_feature_search.svg index b9a3c36c4..24c90cb0c 100644 --- a/docs/images/graphs/dep_graph_feature_search.svg +++ b/docs/images/graphs/dep_graph_feature_search.svg @@ -4,328 +4,226 @@ - - + + G - + :feature:search - -:feature:search + +:feature:search :core:ui - -:core:ui + +:core:ui :feature:search->:core:ui - - + + :core:designsystem - -:core:designsystem + +:core:designsystem :feature:search->:core:designsystem - - + + :core:data - -:core:data + +:core:data :feature:search->:core:data - - + + :core:domain - -:core:domain + +:core:domain :feature:search->:core:domain - - - - - -:feature:bookmarks - -:feature:bookmarks - - - -:feature:search->:feature:bookmarks - - - - - -:feature:foryou - -:feature:foryou - - - -:feature:search->:feature:foryou - - - - - -:feature:interests - -:feature:interests - - - -:feature:search->:feature:interests - - + + - + :core:ui->:core:designsystem - - + + - + :core:analytics - -:core:analytics + +:core:analytics - + :core:ui->:core:analytics - - + + - + :core:model - -:core:model + +:core:model - + :core:ui->:core:model - - + + - + :core:data->:core:analytics - - + + - + :core:common - -:core:common + +:core:common - + :core:data->:core:common - - + + - + :core:database - -:core:database + +:core:database - + :core:data->:core:database - - + + - + :core:datastore - -:core:datastore + +:core:datastore - + :core:data->:core:datastore - - + + - + :core:network - -:core:network + +:core:network - + :core:data->:core:network - - + + - + :core:notifications - -:core:notifications + +:core:notifications - + :core:data->:core:notifications - - + + - + :core:domain->:core:data - - + + - + :core:domain->:core:model - - - - - -:feature:bookmarks->:core:ui - - - - - -:feature:bookmarks->:core:designsystem - - - - - -:feature:bookmarks->:core:data - - - - - -:feature:foryou->:core:ui - - - - - -:feature:foryou->:core:designsystem - - - - - -:feature:foryou->:core:data - - - - - -:feature:foryou->:core:domain - - - - - -:feature:interests->:core:ui - - - - - -:feature:interests->:core:designsystem - - - - - -:feature:interests->:core:data - - - - - -:feature:interests->:core:domain - - + + - + :core:database->:core:model - - + + - + :core:datastore->:core:model - - + + - + :core:datastore->:core:common - - + + - + :core:datastore-proto - -:core:datastore-proto + +:core:datastore-proto - + :core:datastore->:core:datastore-proto - - + + - + :core:network->:core:model - - + + - + :core:network->:core:common - - + + - + :core:notifications->:core:model - - + + - + :core:notifications->:core:common - - + +