From 068d8cc93c523967bd00e66ffd257217acd1d07e Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Wed, 11 Jun 2025 20:44:13 -0700 Subject: [PATCH 01/33] Split feature modules into api and impl modules Source code is still left in api module. impl module is empty at this point. --- app/build.gradle.kts | 12 +++---- .../apps/nowinandroid/ui/NavigationTest.kt | 12 +++---- .../nowinandroid/navigation/NiaNavHost.kt | 14 ++++---- .../navigation/TopLevelDestination.kt | 24 +++++++------- .../samples/apps/nowinandroid/ui/NiaApp.kt | 4 +-- .../apps/nowinandroid/ui/NiaAppState.kt | 8 ++--- .../interests2pane/Interests2PaneViewModel.kt | 2 +- .../InterestsListDetailScreen.kt | 12 +++---- .../ui/InterestsListDetailScreenTest.kt | 2 +- feature/bookmarks/{ => api}/.gitignore | 0 feature/bookmarks/{ => api}/build.gradle.kts | 2 +- .../bookmarks/api}/BookmarksScreenTest.kt | 3 +- .../{ => api}/src/main/AndroidManifest.xml | 0 .../feature/bookmarks/api}/BookmarksScreen.kt | 14 ++++---- .../bookmarks/api}/BookmarksViewModel.kt | 2 +- .../api}/navigation/BookmarksNavigation.kt | 4 +-- ...ture_bookmarks_api_mg_empty_bookmarks.xml} | 0 .../{ => api}/src/main/res/values/strings.xml | 12 +++---- .../bookmarks/api}/BookmarksViewModelTest.kt | 3 +- feature/{foryou => bookmarks/impl}/.gitignore | 0 feature/bookmarks/impl/build.gradle.kts | 26 +++++++++++++++ feature/{interests => foryou/api}/.gitignore | 0 feature/foryou/{ => api}/build.gradle.kts | 2 +- .../feature/foryou/api}/ForYouScreenTest.kt | 12 +++---- .../{ => api}/src/main/AndroidManifest.xml | 0 .../feature/foryou/api}/ForYouScreen.kt | 12 +++---- .../feature/foryou/api}/ForYouViewModel.kt | 2 +- .../feature/foryou/api}/OnboardingUiState.kt | 2 +- .../api}/navigation/ForYouNavigation.kt | 4 +-- ...eature_foryou_api_ic_icon_placeholder.xml} | 0 .../{ => api}/src/main/res/values/strings.xml | 12 +++---- .../api}/ForYouScreenScreenshotTests.kt | 8 ++--- .../foryou/api}/ForYouViewModelTest.kt | 2 +- feature/{search => foryou/impl}/.gitignore | 0 feature/foryou/impl/build.gradle.kts | 26 +++++++++++++++ .../ForYouScreenLoading_foldable.png | Bin 14885 -> 0 bytes .../screenshots/ForYouScreenLoading_phone.png | Bin 10310 -> 0 bytes .../ForYouScreenLoading_tablet.png | Bin 19160 -> 0 bytes .../ForYouScreenPopulatedAndLoading_phone.png | Bin 65816 -> 0 bytes ...ouScreenPopulatedAndLoading_phone_dark.png | Bin 65378 -> 0 bytes .../ForYouScreenPopulatedFeed_phone.png | Bin 57192 -> 0 bytes .../{settings => interests/api}/.gitignore | 0 feature/interests/{ => api}/build.gradle.kts | 2 +- .../interests/api}/InterestsScreenTest.kt | 10 +++--- .../{ => api}/src/main/AndroidManifest.xml | 0 .../feature/interests/api}/InterestsScreen.kt | 6 ++-- .../interests/api}/InterestsViewModel.kt | 4 +-- .../feature/interests/api}/TabContent.kt | 2 +- .../api}/navigation/InterestsNavigation.kt | 2 +- .../{ => api}/src/main/res/values/strings.xml | 6 ++-- .../interests/api}/InterestsViewModelTest.kt | 2 +- feature/{topic => interests/impl}/.gitignore | 0 feature/interests/impl/build.gradle.kts | 24 ++++++++++++++ feature/search/api/.gitignore | 1 + feature/search/{ => api}/build.gradle.kts | 2 +- .../feature/search/api}/SearchScreenTest.kt | 2 +- .../{ => api}/src/main/AndroidManifest.xml | 0 .../search/api}/RecentSearchQueriesUiState.kt | 2 +- .../search/api}/SearchResultUiState.kt | 2 +- .../feature/search/api}/SearchScreen.kt | 26 +++++++-------- .../SearchUiStatePreviewParameterProvider.kt | 7 ++-- .../feature/search/api}/SearchViewModel.kt | 2 +- .../api}/navigation/SearchNavigation.kt | 6 ++-- .../api/src/main/res/values/strings.xml | 29 +++++++++++++++++ .../search/api}/SearchViewModelTest.kt | 12 +++---- feature/search/impl/.gitignore | 1 + feature/search/impl/build.gradle.kts | 25 +++++++++++++++ .../search/src/main/res/values/strings.xml | 29 ----------------- feature/settings/api/.gitignore | 1 + feature/settings/{ => api}/build.gradle.kts | 2 +- .../settings/api}/SettingsDialogTest.kt | 6 ++-- .../settings/api/src/main/AndroidManifest.xml | 27 ++++++++++++++++ .../feature/settings/api}/SettingsDialog.kt | 8 ++--- .../settings/api}/SettingsViewModel.kt | 6 ++-- .../{ => api}/src/main/res/values/strings.xml | 0 .../settings/api}/SettingsViewModelTest.kt | 6 ++-- feature/settings/src/main/AndroidManifest.xml | 27 ---------------- feature/topic/api/.gitignore | 1 + feature/topic/{ => api}/build.gradle.kts | 2 +- .../feature/topic/api}/TopicScreenTest.kt | 4 +-- .../{ => api}/src/main/AndroidManifest.xml | 0 .../topic/api}/TopicDetailPlaceholder.kt | 6 ++-- .../feature/topic/api}/TopicScreen.kt | 6 ++-- .../feature/topic/api}/TopicViewModel.kt | 2 +- .../topic/api}/navigation/TopicNavigation.kt | 6 ++-- ...eature_topic_api_ic_topic_placeholder.xml} | 30 +++++++++--------- .../{ => api}/src/main/res/values/strings.xml | 4 +-- .../feature/topic/api}/TopicViewModelTest.kt | 2 +- feature/topic/impl/.gitignore | 1 + feature/topic/impl/build.gradle.kts | 25 +++++++++++++++ gradle/libs.versions.toml | 3 +- settings.gradle.kts | 17 ++++++---- 92 files changed, 386 insertions(+), 248 deletions(-) rename feature/bookmarks/{ => api}/.gitignore (100%) rename feature/bookmarks/{ => api}/build.gradle.kts (98%) rename feature/bookmarks/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api}/BookmarksScreenTest.kt (98%) rename feature/bookmarks/{ => api}/src/main/AndroidManifest.xml (100%) rename feature/bookmarks/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api}/BookmarksScreen.kt (98%) rename feature/bookmarks/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api}/BookmarksViewModel.kt (97%) rename feature/bookmarks/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api}/navigation/BookmarksNavigation.kt (88%) rename feature/bookmarks/{src/main/res/drawable/feature_bookmarks_img_empty_bookmarks.xml => api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml} (100%) rename feature/bookmarks/{ => api}/src/main/res/values/strings.xml (59%) rename feature/bookmarks/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api}/BookmarksViewModelTest.kt (97%) rename feature/{foryou => bookmarks/impl}/.gitignore (100%) create mode 100644 feature/bookmarks/impl/build.gradle.kts rename feature/{interests => foryou/api}/.gitignore (100%) rename feature/foryou/{ => api}/build.gradle.kts (99%) rename feature/foryou/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/ForYouScreenTest.kt (97%) rename feature/foryou/{ => api}/src/main/AndroidManifest.xml (100%) rename feature/foryou/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/ForYouScreen.kt (99%) rename feature/foryou/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/ForYouViewModel.kt (98%) rename feature/foryou/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/OnboardingUiState.kt (95%) rename feature/foryou/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/navigation/ForYouNavigation.kt (94%) rename feature/foryou/{src/main/res/drawable/feature_foryou_ic_icon_placeholder.xml => api/src/main/res/drawable/feature_foryou_api_ic_icon_placeholder.xml} (100%) rename feature/foryou/{ => api}/src/main/res/values/strings.xml (57%) rename feature/foryou/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/ForYouScreenScreenshotTests.kt (95%) rename feature/foryou/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api}/ForYouViewModelTest.kt (99%) rename feature/{search => foryou/impl}/.gitignore (100%) create mode 100644 feature/foryou/impl/build.gradle.kts delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenLoading_foldable.png delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenLoading_phone.png delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenLoading_tablet.png delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png delete mode 100644 feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png rename feature/{settings => interests/api}/.gitignore (100%) rename feature/interests/{ => api}/build.gradle.kts (98%) rename feature/interests/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api}/InterestsScreenTest.kt (93%) rename feature/interests/{ => api}/src/main/AndroidManifest.xml (100%) rename feature/interests/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api}/InterestsScreen.kt (96%) rename feature/interests/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api}/InterestsViewModel.kt (94%) rename feature/interests/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api}/TabContent.kt (98%) rename feature/interests/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api}/navigation/InterestsNavigation.kt (93%) rename feature/interests/{ => api}/src/main/res/values/strings.xml (75%) rename feature/interests/{src/test/kotlin/com/google/samples/apps/nowinandroid/interests => api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api}/InterestsViewModelTest.kt (99%) rename feature/{topic => interests/impl}/.gitignore (100%) create mode 100644 feature/interests/impl/build.gradle.kts create mode 100644 feature/search/api/.gitignore rename feature/search/{ => api}/build.gradle.kts (99%) rename feature/search/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchScreenTest.kt (99%) rename feature/search/{ => api}/src/main/AndroidManifest.xml (100%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/RecentSearchQueriesUiState.kt (93%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchResultUiState.kt (96%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchScreen.kt (97%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchUiStatePreviewParameterProvider.kt (87%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchViewModel.kt (99%) rename feature/search/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/navigation/SearchNavigation.kt (86%) create mode 100644 feature/search/api/src/main/res/values/strings.xml rename feature/search/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api}/SearchViewModelTest.kt (93%) create mode 100644 feature/search/impl/.gitignore create mode 100644 feature/search/impl/build.gradle.kts delete mode 100644 feature/search/src/main/res/values/strings.xml create mode 100644 feature/settings/api/.gitignore rename feature/settings/{ => api}/build.gradle.kts (98%) rename feature/settings/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api}/SettingsDialogTest.kt (96%) create mode 100644 feature/settings/api/src/main/AndroidManifest.xml rename feature/settings/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api}/SettingsDialog.kt (97%) rename feature/settings/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api}/SettingsViewModel.kt (92%) rename feature/settings/{ => api}/src/main/res/values/strings.xml (100%) rename feature/settings/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api}/SettingsViewModelTest.kt (90%) delete mode 100644 feature/settings/src/main/AndroidManifest.xml create mode 100644 feature/topic/api/.gitignore rename feature/topic/{ => api}/build.gradle.kts (99%) rename feature/topic/{src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/TopicScreenTest.kt (97%) rename feature/topic/{ => api}/src/main/AndroidManifest.xml (100%) rename feature/topic/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/TopicDetailPlaceholder.kt (95%) rename feature/topic/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/TopicScreen.kt (98%) rename feature/topic/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/TopicViewModel.kt (98%) rename feature/topic/{src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/navigation/TopicNavigation.kt (88%) rename feature/topic/{src/main/res/drawable/feature_topic_ic_topic_placeholder.xml => api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml} (75%) rename feature/topic/{ => api}/src/main/res/values/strings.xml (82%) rename feature/topic/{src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic => api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api}/TopicViewModelTest.kt (99%) create mode 100644 feature/topic/impl/.gitignore create mode 100644 feature/topic/impl/build.gradle.kts diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 09005606b..627be6727 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -68,12 +68,12 @@ android { } dependencies { - implementation(projects.feature.interests) - implementation(projects.feature.foryou) - implementation(projects.feature.bookmarks) - implementation(projects.feature.topic) - implementation(projects.feature.search) - implementation(projects.feature.settings) + implementation(projects.feature.interests.api) + implementation(projects.feature.foryou.api) + implementation(projects.feature.bookmarks.api) + implementation(projects.feature.topic.api) + implementation(projects.feature.search.api) + implementation(projects.feature.settings.api) implementation(projects.core.common) implementation(projects.core.ui) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 54053a1bb..8d479e3b1 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -47,10 +47,10 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import javax.inject.Inject -import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR -import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR -import com.google.samples.apps.nowinandroid.feature.search.R as FeatureSearchR -import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R as BookmarksR +import com.google.samples.apps.nowinandroid.feature.foryou.api.R as FeatureForyouR +import com.google.samples.apps.nowinandroid.feature.search.api.R as FeatureSearchR +import com.google.samples.apps.nowinandroid.feature.settings.api.R as SettingsR /** * Tests all the navigation flows that are handled by the navigation library. @@ -83,8 +83,8 @@ class NavigationTest { lateinit var newsRepository: NewsRepository // The strings used for matching in these tests - private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_navigate_up) - private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_title) + private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_api_navigate_up) + private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_api_title) private val interests by composeTestRule.stringResource(FeatureSearchR.string.feature_search_interests) private val sampleTopic = "Headlines" private val appName by composeTestRule.stringResource(R.string.app_name) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index e079c98f4..1f8f88686 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -19,13 +19,13 @@ package com.google.samples.apps.nowinandroid.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost -import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.bookmarksScreen -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection -import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests -import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen -import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic -import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.bookmarksScreen +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.forYouSection +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests +import com.google.samples.apps.nowinandroid.feature.search.api.navigation.searchScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.topicScreen import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.ui.NiaAppState import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetailScreen diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 429e626ff..d43101078 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -20,14 +20,14 @@ import androidx.annotation.StringRes import androidx.compose.ui.graphics.vector.ImageVector import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons -import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.BookmarksRoute -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouRoute -import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import kotlin.reflect.KClass -import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR -import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR -import com.google.samples.apps.nowinandroid.feature.search.R as searchR +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R as bookmarksR +import com.google.samples.apps.nowinandroid.feature.foryou.api.R as forYouR +import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR /** * Type for the top level destinations in the application. Contains metadata about the destination @@ -54,7 +54,7 @@ enum class TopLevelDestination( FOR_YOU( selectedIcon = NiaIcons.Upcoming, unselectedIcon = NiaIcons.UpcomingBorder, - iconTextId = forYouR.string.feature_foryou_title, + iconTextId = forYouR.string.feature_foryou_api_title, titleTextId = R.string.app_name, route = ForYouRoute::class, baseRoute = ForYouBaseRoute::class, @@ -62,15 +62,15 @@ enum class TopLevelDestination( BOOKMARKS( selectedIcon = NiaIcons.Bookmarks, unselectedIcon = NiaIcons.BookmarksBorder, - iconTextId = bookmarksR.string.feature_bookmarks_title, - titleTextId = bookmarksR.string.feature_bookmarks_title, + iconTextId = bookmarksR.string.feature_bookmarks_api_title, + titleTextId = bookmarksR.string.feature_bookmarks_api_title, route = BookmarksRoute::class, ), INTERESTS( selectedIcon = NiaIcons.Grid3x3, unselectedIcon = NiaIcons.Grid3x3, - iconTextId = searchR.string.feature_search_interests, - titleTextId = searchR.string.feature_search_interests, + iconTextId = searchR.string.feature_search_api_interests, + titleTextId = searchR.string.feature_search_api_interests, route = InterestsRoute::class, ), } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index b237684ef..fe2d758ee 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -71,11 +71,11 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors -import com.google.samples.apps.nowinandroid.feature.settings.SettingsDialog +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog import com.google.samples.apps.nowinandroid.navigation.NiaNavHost import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import kotlin.reflect.KClass -import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR +import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @Composable fun NiaApp( diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 7c892c854..4c1d23318 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -34,10 +34,10 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourc import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank -import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.navigateToBookmarks -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou -import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests -import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.navigateToBookmarks +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.navigateToForYou +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests +import com.google.samples.apps.nowinandroid.feature.search.api.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt index 3d37f3417..83978a6f4 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.ui.interests2pane import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.navigation.toRoute -import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.StateFlow import javax.inject.Inject diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt index c0f425c65..07e93eee1 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt @@ -52,12 +52,12 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute -import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute -import com.google.samples.apps.nowinandroid.feature.topic.TopicDetailPlaceholder -import com.google.samples.apps.nowinandroid.feature.topic.TopicScreen -import com.google.samples.apps.nowinandroid.feature.topic.TopicViewModel -import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicDetailPlaceholder +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.TopicRoute import kotlinx.coroutines.launch import kotlinx.serialization.Serializable import kotlin.math.max diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt index 1062c7e56..682f4983f 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt @@ -45,7 +45,7 @@ import org.robolectric.annotation.Config import javax.inject.Inject import kotlin.properties.ReadOnlyProperty import kotlin.test.assertTrue -import com.google.samples.apps.nowinandroid.feature.topic.R as FeatureTopicR +import com.google.samples.apps.nowinandroid.feature.topic.api.R as FeatureTopicR private const val EXPANDED_WIDTH = "w1200dp-h840dp" private const val COMPACT_WIDTH = "w412dp-h915dp" diff --git a/feature/bookmarks/.gitignore b/feature/bookmarks/api/.gitignore similarity index 100% rename from feature/bookmarks/.gitignore rename to feature/bookmarks/api/.gitignore diff --git a/feature/bookmarks/build.gradle.kts b/feature/bookmarks/api/build.gradle.kts similarity index 98% rename from feature/bookmarks/build.gradle.kts rename to feature/bookmarks/api/build.gradle.kts index 51a15ce7a..f12a39f7d 100644 --- a/feature/bookmarks/build.gradle.kts +++ b/feature/bookmarks/api/build.gradle.kts @@ -21,7 +21,7 @@ plugins { } android { - namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks" + namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.api" } dependencies { diff --git a/feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt similarity index 98% rename from feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt rename to feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt index dd01b84c9..78f29f92a 100644 --- a/feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt +++ b/feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks +package com.google.samples.apps.nowinandroid.feature.bookmarks.api import androidx.activity.ComponentActivity import androidx.compose.runtime.CompositionLocalProvider @@ -35,7 +35,6 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.testing.TestLifecycleOwner import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData -import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test diff --git a/feature/bookmarks/src/main/AndroidManifest.xml b/feature/bookmarks/api/src/main/AndroidManifest.xml similarity index 100% rename from feature/bookmarks/src/main/AndroidManifest.xml rename to feature/bookmarks/api/src/main/AndroidManifest.xml diff --git a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt similarity index 98% rename from feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt rename to feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt index 7c229c5ea..019fb4609 100644 --- a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks +package com.google.samples.apps.nowinandroid.feature.bookmarks.api import androidx.annotation.VisibleForTesting import androidx.compose.foundation.Image @@ -112,8 +112,8 @@ internal fun BookmarksScreen( undoBookmarkRemoval: () -> Unit = {}, clearUndoState: () -> Unit = {}, ) { - val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_removed) - val undoText = stringResource(id = R.string.feature_bookmarks_undo) + val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_api_removed) + val undoText = stringResource(id = R.string.feature_bookmarks_api_undo) LaunchedEffect(shouldDisplayUndoBookmark) { if (shouldDisplayUndoBookmark) { @@ -155,7 +155,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { .fillMaxWidth() .wrapContentSize() .testTag("forYou:loading"), - contentDesc = stringResource(id = R.string.feature_bookmarks_loading), + contentDesc = stringResource(id = R.string.feature_bookmarks_api_loading), ) } @@ -228,7 +228,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { val iconTint = LocalTintTheme.current.iconTint Image( modifier = Modifier.fillMaxWidth(), - painter = painterResource(id = R.drawable.feature_bookmarks_img_empty_bookmarks), + painter = painterResource(id = R.drawable.feature_bookmarks_api_mg_empty_bookmarks), colorFilter = if (iconTint != Color.Unspecified) ColorFilter.tint(iconTint) else null, contentDescription = null, ) @@ -236,7 +236,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(48.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_empty_error), + text = stringResource(id = R.string.feature_bookmarks_api_empty_error), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, @@ -246,7 +246,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(8.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_empty_description), + text = stringResource(id = R.string.feature_bookmarks_api_empty_description), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium, diff --git a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt similarity index 97% rename from feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt rename to feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt index f93602485..7b8945eb2 100644 --- a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks +package com.google.samples.apps.nowinandroid.feature.bookmarks.api import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt similarity index 88% rename from feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt rename to feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt index ea8d525ab..23b48b17a 100644 --- a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks.navigation +package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.bookmarks.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.BookmarksRoute import kotlinx.serialization.Serializable @Serializable object BookmarksRoute diff --git a/feature/bookmarks/src/main/res/drawable/feature_bookmarks_img_empty_bookmarks.xml b/feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml similarity index 100% rename from feature/bookmarks/src/main/res/drawable/feature_bookmarks_img_empty_bookmarks.xml rename to feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml diff --git a/feature/bookmarks/src/main/res/values/strings.xml b/feature/bookmarks/api/src/main/res/values/strings.xml similarity index 59% rename from feature/bookmarks/src/main/res/values/strings.xml rename to feature/bookmarks/api/src/main/res/values/strings.xml index 6e2b23043..98f4b4a8d 100644 --- a/feature/bookmarks/src/main/res/values/strings.xml +++ b/feature/bookmarks/api/src/main/res/values/strings.xml @@ -15,10 +15,10 @@ limitations under the License. --> - Saved - Loading saved… - No saved updates - Updates you save will be stored here\nto read later - Bookmark removed - UNDO + Saved + Loading saved… + No saved updates + Updates you save will be stored here\nto read later + Bookmark removed + UNDO diff --git a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt similarity index 97% rename from feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt rename to feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt index aa42adae2..ae3b488c7 100644 --- a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks +package com.google.samples.apps.nowinandroid.feature.bookmarks.api import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData @@ -23,6 +23,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.BookmarksViewModel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher diff --git a/feature/foryou/.gitignore b/feature/bookmarks/impl/.gitignore similarity index 100% rename from feature/foryou/.gitignore rename to feature/bookmarks/impl/.gitignore diff --git a/feature/bookmarks/impl/build.gradle.kts b/feature/bookmarks/impl/build.gradle.kts new file mode 100644 index 000000000..f46554044 --- /dev/null +++ b/feature/bookmarks/impl/build.gradle.kts @@ -0,0 +1,26 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.impl" +} + +dependencies { } diff --git a/feature/interests/.gitignore b/feature/foryou/api/.gitignore similarity index 100% rename from feature/interests/.gitignore rename to feature/foryou/api/.gitignore diff --git a/feature/foryou/build.gradle.kts b/feature/foryou/api/build.gradle.kts similarity index 99% rename from feature/foryou/build.gradle.kts rename to feature/foryou/api/build.gradle.kts index de1af7540..2ee38bfae 100644 --- a/feature/foryou/build.gradle.kts +++ b/feature/foryou/api/build.gradle.kts @@ -22,7 +22,7 @@ plugins { } android { - namespace = "com.google.samples.apps.nowinandroid.feature.foryou" + namespace = "com.google.samples.apps.nowinandroid.feature.foryou.api" testOptions.unitTests.isIncludeAndroidResources = true } diff --git a/feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt b/feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt similarity index 97% rename from feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt rename to feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt index c3ec5c560..46905fd8b 100644 --- a/feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt +++ b/feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import androidx.activity.ComponentActivity import androidx.compose.foundation.layout.Box @@ -45,7 +45,7 @@ class ForYouScreenTest { private val doneButtonMatcher by lazy { hasText( - composeTestRule.activity.resources.getString(R.string.feature_foryou_done), + composeTestRule.activity.resources.getString(R.string.feature_foryou_api_done), ) } @@ -70,7 +70,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_api_loading), ) .assertExists() } @@ -96,7 +96,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_api_loading), ) .assertExists() } @@ -215,7 +215,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_api_loading), ) .assertExists() } @@ -241,7 +241,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_api_loading), ) .assertExists() } diff --git a/feature/foryou/src/main/AndroidManifest.xml b/feature/foryou/api/src/main/AndroidManifest.xml similarity index 100% rename from feature/foryou/src/main/AndroidManifest.xml rename to feature/foryou/api/src/main/AndroidManifest.xml diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt similarity index 99% rename from feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt rename to feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt index 1a3325996..0b32cc6a6 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import android.net.Uri import android.os.Build.VERSION @@ -215,7 +215,7 @@ internal fun ForYouScreen( targetOffsetY = { fullHeight -> -fullHeight }, ) + fadeOut(), ) { - val loadingContentDescription = stringResource(id = R.string.feature_foryou_loading) + val loadingContentDescription = stringResource(id = R.string.feature_foryou_api_loading) Box( modifier = Modifier .fillMaxWidth() @@ -270,7 +270,7 @@ private fun LazyStaggeredGridScope.onboarding( item(span = StaggeredGridItemSpan.FullLine, contentType = "onboarding") { Column(modifier = interestsItemModifier) { Text( - text = stringResource(R.string.feature_foryou_onboarding_guidance_title), + text = stringResource(R.string.feature_foryou_api_onboarding_guidance_title), textAlign = TextAlign.Center, modifier = Modifier .fillMaxWidth() @@ -278,7 +278,7 @@ private fun LazyStaggeredGridScope.onboarding( style = MaterialTheme.typography.titleMedium, ) Text( - text = stringResource(R.string.feature_foryou_onboarding_guidance_subtitle), + text = stringResource(R.string.feature_foryou_api_onboarding_guidance_subtitle), modifier = Modifier .fillMaxWidth() .padding(top = 8.dp, start = 24.dp, end = 24.dp), @@ -304,7 +304,7 @@ private fun LazyStaggeredGridScope.onboarding( .fillMaxWidth(), ) { Text( - text = stringResource(R.string.feature_foryou_done), + text = stringResource(R.string.feature_foryou_api_done), ) } } @@ -433,7 +433,7 @@ fun TopicIcon( modifier: Modifier = Modifier, ) { DynamicAsyncImage( - placeholder = painterResource(R.drawable.feature_foryou_ic_icon_placeholder), + placeholder = painterResource(R.drawable.feature_foryou_api_ic_icon_placeholder), imageUrl = imageUrl, // decorative contentDescription = null, diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt similarity index 98% rename from feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt rename to feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt index 4b6cd39c9..6fb44a5f5 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt similarity index 95% rename from feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt rename to feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt index 70634b4c5..cd2197bcb 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt similarity index 94% rename from feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt rename to feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt index b77ce72a0..a4b276983 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.navigation +package com.google.samples.apps.nowinandroid.feature.foryou.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder @@ -23,7 +23,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.navigation import androidx.navigation.navDeepLink import com.google.samples.apps.nowinandroid.core.notifications.DEEP_LINK_URI_PATTERN -import com.google.samples.apps.nowinandroid.feature.foryou.ForYouScreen +import com.google.samples.apps.nowinandroid.feature.foryou.api.ForYouScreen import kotlinx.serialization.Serializable @Serializable data object ForYouRoute // route to ForYou screen diff --git a/feature/foryou/src/main/res/drawable/feature_foryou_ic_icon_placeholder.xml b/feature/foryou/api/src/main/res/drawable/feature_foryou_api_ic_icon_placeholder.xml similarity index 100% rename from feature/foryou/src/main/res/drawable/feature_foryou_ic_icon_placeholder.xml rename to feature/foryou/api/src/main/res/drawable/feature_foryou_api_ic_icon_placeholder.xml diff --git a/feature/foryou/src/main/res/values/strings.xml b/feature/foryou/api/src/main/res/values/strings.xml similarity index 57% rename from feature/foryou/src/main/res/values/strings.xml rename to feature/foryou/api/src/main/res/values/strings.xml index 166749664..4694eb444 100644 --- a/feature/foryou/src/main/res/values/strings.xml +++ b/feature/foryou/api/src/main/res/values/strings.xml @@ -15,11 +15,11 @@ limitations under the License. --> - For you - Done - Loading for you… - Navigate up - What are you interested in? - Updates from topics you follow will appear here. Follow some things to get started. + For you + Done + Loading for you… + Navigate up + What are you interested in? + Updates from topics you follow will appear here. Follow some things to get started. diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt b/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt similarity index 95% rename from feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt rename to feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt index 29fc6f536..447472d1c 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import androidx.activity.ComponentActivity import androidx.compose.runtime.Composable @@ -31,9 +31,9 @@ import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiDevice import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider -import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Loading -import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.NotShown -import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Shown +import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.Loading +import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.NotShown +import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.Shown import dagger.hilt.android.testing.HiltTestApplication import org.hamcrest.Matchers import org.junit.Before diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt similarity index 99% rename from feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt rename to feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt index 812544c0c..b8a4ef86b 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou +package com.google.samples.apps.nowinandroid.feature.foryou.api import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent diff --git a/feature/search/.gitignore b/feature/foryou/impl/.gitignore similarity index 100% rename from feature/search/.gitignore rename to feature/foryou/impl/.gitignore diff --git a/feature/foryou/impl/build.gradle.kts b/feature/foryou/impl/build.gradle.kts new file mode 100644 index 000000000..37f49d304 --- /dev/null +++ b/feature/foryou/impl/build.gradle.kts @@ -0,0 +1,26 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.feature.foryou.impl" +} + +dependencies { } \ No newline at end of file diff --git a/feature/foryou/src/test/screenshots/ForYouScreenLoading_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenLoading_foldable.png deleted file mode 100644 index 538c9032c6dd714a86a54fe3051262c8bf39fad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14885 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

B1dwR=(rG}LkZRC-jaamVg8VD9Txv?@-n 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 P`)_^s?I_uP^!)z;;Wx4Z diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png deleted file mode 100644 index a86a8232fcb22b4aae50e03eee2b17b8afab3147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65816 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 diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png deleted file mode 100644 index d500394ef740e3657532920e0653e367474ba523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65378 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 b?25EL=UrG!)57(x09f)bRb&dKjD!Cd`Xz(K diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png deleted file mode 100644 index 1498f9b7b0c65ccfdabd2cf29b591d7b8f6a3944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57192 zcmd43cQ~7G7%v_jC~6cXX0=62?Y-Ngs%8-i)&;=%9 zLf|hFur?nMC=jHq@Ic4Ycx}SNXRei&_ZLoa6CTMdrOqVfel1RXFk*eZ-qvR-rt)Ai zsnV_jQsCf1C-s%%d$Q1U;51lRx1=uMgvCI1!nKv>e7NhvhTo{w$^D2Ew zE2Vr}cWB$sM%Ezv9Nf1&d-%b3Q%a=Tdj7X(D0Mq*&5em@U@Xn1%-F4 z8*zl$o!=E~^9Vb{2xQg|3R;oBSw7mlvNdsD*5#|Fx&fx7o;w$++!NedtwHU8YB z6Fr00n;4y^BG+@V4Mmfw?D3vBW>Jx)q1I?DwjG{5 zVC~qCT-!7n*)2MD^p)bHo}232EHi*ztfxRzBxw75{nFXtVHa|k$$8WDS==4enbtfa zmVTYdB5UNpB_`pHRQ8;Wz}+$(Hf&Ux_kE4a)AoYgvvTb3k_-ykF>TM|Vbe_)ON5A} zE^OUALyz2|*`YLYqR(ksrG9hwaD~!nuS4Fs-Yot?vB`}^wh?wRXz(+ZK+Gkx#`|6J z{G=FnV)xfG?9!KTmuJ#|zc}BgcSo2WB~E#C|9(zp#bh4tphZt&ln|Nr(jZ%WBLhM8 zRWr}40WrgwHiq(lVXush0>&s;)VMs8^KB>AyelydUDTgN>4W*_qb z{1%IH96BWsH_?nSM*iAn)Gf{*EYJhF&$5kx5q|V+)uU!3oWx=kf~uaB?u5_y?vafR z8AxUe+J~64yuw@pZZjh>Mi8Vyu|{^vY7*!uu(eAEKDo1G%r!?KeusFN3bBeL+X0P# z;UC}cC{Y3J7m#~6Scu=DtWA=}1#Nx0AbgWY9_BI;u%@}FW3UDNAXBG*`;k(3PsPKN z$%|l)Mv-nduhX#7qPVqmwU{2DX0s4{^kbAr@s;)MF)Xy=sW`Qe@lyvHGVV>eO1WrR z*Czid9#C!%%jc?W+aiAx2yEG}Cg4m7QAhUqSZLHd2;yL{{ZkS0a%fDAMbF88j@`>u z@1w52L5=LSi$T{lR{K2g|c25^G)-2{rdHV+m#G~yU zf3b)534rymLfxRXFY+Zy^p7m!&Dg4!WB!yFRu>U1#vQv2yC9$(7yh+N^G7fl9XEtGdqYHkE4ro%VaO!D?0( zZr*3LE2rb#*{%L0t6T))Rdxw`M_!E;Q<+c7$cvA@3l&6Q3wh~=0w9ByPOfKq3zOeK z$+8v0Bduy{GkP^+6|^gRr>e#dew+1QzA+z-+f!5Q+$&1M$_D4NuWF(MGe7$ss%7rcL^ z#ZMO;A@jhA(VB-L?g_0b1C-0M-s}<`gSk|VQ~2X?w4-mOK8NwiO`u1HF4t`8MDX+k zKlF?*Mdf$qa$|Wh8HS26=%4C*o+b`LGFTp}Mw5h|+b%nae&g@v%7VkE@(!MG%NEsP zuLY`HOf}qeIQ;3)=W73L(rUZ4Ss9kZIl5W=eNj_XJ2q(1brDMR4t>Ur1Ose8h6$$ARS z?kIkF=Q2#mE#g{%hrk^J8j8=|kSX;7vV)oUnUT4rGYny`>K0D!+k2npW~$c(4+SXx zRMgeiGZ84VI7|sQ%d6F^7}*Ea`S>NfX3=$#0=S*k*WT=ej6p>RoHLr@(4JcJRo{yk zLTp3IjyCgA%`~%#Ff-M0W~#67bEG88WgVpGwnMV@XJr11n7H|>?jn+!=P%9;YLi=X z{HI2F640#uKJ5kA^@BU6{XWtlse-nAZmUk5v!*v#1o*KH34PsytaXSNq6~ zavXe4@;+u|hYm6v+Fe|7X6GZ9ZIPO%Tz%-#zl6gQ(LvD4{iW9fZd|l>hAx*ZohR>bR&mAQiH{7o_Gf*_|ASTX zto@}bXv19(-RvM0n-&((4q6EdB~ z--X9wxXaI2Ucp+Np*o0DjI)hUD}lUI{7<)p%hQrAC59FwO&6U>TS}f@`Q4Q)L(E9( zBksQwz;x+VP{x?OyNFO%RJqAf4AYu(pFp=7%ssFYwUD-6+p0#2>q2DWeDjcBd<`F( z@owr_+So2DK~!jJzJE~_y1$c<1h1OU{~DlkzDS@4&D$AU)Eip`XInfT7J4FOm8PET zT1b5_$WyuavMTQ5nAd4vAlEMlwOae?ee87~VMlvIQoHd3fv0H+nalytdzTuthOLmM zVzmW6Qco>2*IIXsa+eQ5Oy{K{Wiqu1#^@4B5cF<{$#93WRLlRV-L%BdSQst@?5 z^3EILz|F%Js791)sq&o!QDv=xU-mHV7CIvy%mu>f%)^I1X1ic~4Ojd>xfWKbbTY6z zPJJFrw%gL$i#}{cxGk!q=uS9&2ax_l2pyMuuo~_!*o=Ip|{_*f@wN$A> z%QvXC9S9`UopiYTQxx-tWn(rnVOKW1zJj|%$Ruv&kb|_8d*GlqHJhtY2-N=*jSff4 zYIOAGovF>}Z-j8Bh$L-tMBDi2!Xhdb@VB-wUmr{0$KwavO26&oimrs zn^F>~gpHQ1sXdmeKZHD2-^fq#3>#9IY(&`#7V|H8|ERcwI*nsqNnY~r^Ek*+L;Ba($$7taO6Z;%x{De>naGSxwFzx!XtLwty79RGNF%*=SY zYpW1xuNnz%o=*-qu{*>-g|obp`P~j^DVo*DF~|#rCY@~b=KuSrc&diV@z*}O;C5>T zDSbC+?xT5*WfIxz?7;wSYMH)6y)%8jatE`{!WHMLHR=ycsFcEJ4$mL7`jXe-PB{n3 zLK6Mr<}1d9=W5u8u!v=#KhCr~;s$9~J!eMPMDZm4dJ=%(=tXWA%j8AKn^j$FF@c(m zc=_vq-MdYTB5EuwzYpK^QBB!d;VWoWv2&Z?q;PcG6rAL|)4An4d{+{$A2<}9MYT-3 zgLSP)gf0z(@sN~5npo;$DbcM&oI@hOyp9FM+~oIjHJmLlDAm z8sTY=mi!WD#9cO1w)Dl?SD^|vUrh=w&gVESxNw#6a?XoFCL%jmw;e9`SWDCg_PBSrg){6WEw`Tt?m5?@7&k>saTL&d*Q zJxibj{#iQ{=^}EW`r0QK-7-V5jU=?b(AbO4gWMEN-8YOh@bvr^SuF$s;|2h2)gAod zn5g9lJLQ3mh3ED=k)(U~i?w1@U=GP)Hm%H85N$*M{MbH4hA0%7>mrroE{|< z7i@j=CUZ2}z)09tB&r>4Rg=`}-p{s(tsGkqzG?#P&XlGW;_-Q2CB>1ir6MX3r{{g5 zqvo7FW;4s32vSMrhR@`f76R~{S6&4EGH0{7F-d!NgBjAkSD4kgs%OVupQ@QNCs9ld zT)Xpk_b8f*h%u6QAcf*zBW`hghwtU&Bwvg>W~%zRFpr4INiYvy0w6q) z|DHU*DLEq!i5}2t0le!HW@=2%xPj0z?S^xx5dm*<;LD zUU}Wv*CKD^DI~*2>aBjfup0!3Js)IbZ-?2PIU;H|3n?W5u9HZW7@(V(5aBAES>}4} zE?8E`s*s&&j)DamuAK8;CE95Dm)b<)-fhF~uu{eeS@w&3kib1$xk7Z==fc=$-ljZX z6{7VaJk0Dp(U!&$GFvHo$*ok{ra7m-TyMD5FQNPP=2C-gKQ4QAuU<-~3*5OpH(Oz_ zwnYklWK})QR^4u<2YIz;CjrV7G&1{NXMvH2MYV*PxPM~VR=d=3=)s2*N{)2dH0=?XoHBW!T4JFoe6l?P=n zg;SgJY+xG0!$qE91zbe9Ok7*NF*R+Kz)6+L&sSyaZxs7_a9GD_}w_^;02ynVc~gMa412>6W* zpps1fTfVtKJ&Rk4!%rKw)-JdObt!^*byHqUvyE_)4a2~T1l7&_cu=4lY)14BYzfrO zm6)0QqP(U1>m*4HLh{jMHabW5P`EgQxY*d~^!79@I*pDgsp5i!pd+%5 zI>D9Q^*chikifbg6jVBq%0i_GS*CY8C1tku=t6AbeDCC7>+RNRuMeCWc*JnHHEiJy z7Pb~4@XZ_tEoirHGAG$s^LxmTLRztT*Y+lb^%%4PG>W; zu~LLgn>e=E&k#&b{N<5iwIMf##v4QQ>|XGt3ES;2uHugx-V7Mgg0+zDsA0mR+R zVg`(a&O5v4OS8uLWW_$W1M-Da%|LQT4zA(vsXE?4A@NyAcC~H=vv(Z&8IH9yywsTo z3WcrgUWq)SXL4S$M1!}X-2&wdYI=%70@_WVJRPqNCVFm_ePd#ca&UrH#yqg!o+kV- zB{?>tB-Fb$AiP>3^y_Kd@>*$ghgUn4WJyN^WpMU5dMdJk)6e91^2DH=dcp&JzRT2m z)a&}7he(EVw=U0df;Z-ve_LvivCS@9{nPKtn2pPFnK9sTT`8yaoygM!lnqTvM@#x4 zd>e2FU<1CvPkUoZOm4VeY4(GFD_flR=V|9gFE0_+$P4lpN$a;>bbiAR&<1Df-;j~v z)#)o|A%NOa?f}|QNnVv8lh3T&UGhN2L;?w~)2PR(QW+f985=FZMP&nm5=g@$6?PF} z@O)0J-@UNa^P*Ua3=s<MsMx@AjlP`N^VFkTT zUks{FtUvr$IT7ddV!TELYAiB0qP>Y3TZ0Q#}=hc0_^16x1nBJ$_@y?!|?`I3%dkvqA-yPQo&ZV+Uc+c5K&uBYErE zt-av9P^?_&z(PMVY}vpf2CFicMatNC<x$h1mSy_^{)syGyx$YF(K-?SY^p81 zj;dJ)U4@DPaO7Wu0YrUAE&7c-0nGMbk>I$EIii3I03HCIX9-MxF!H;?a5v#X zKLz4IX1!e;n z68iUG|L1|TM)wBx&>3j1uR{O=W+ZP>UG32Ld+6kc3tFS3dAlgrzFc&^XjW~`joIz^ zpZXFWZvuoo?#B4bn3-MY)i#0)AR0Uq z*x_um{u!vOfzFz>lw_V1URU)(0)Va~NJ{K3Wm zVM`OhEOYmDpON%Bmgb(jc8U9bOLXz{@M<*^ao;;dTQTJ%#N=KN$V0XZ6U6pSDwGGn znY^T{zyL6u=|cU6-@B$S&^Iu8h9bc-z%3GqmB0B(1=wY!x9D}zpc%g{gAxEJUSfC?+{bCkvAcT0RxXq3XnBjW`j4ZD% z0-6q$yAHw+cxYMtfS_YR;|;q|YG_f-ZjMk=Tzt40*?!TQ){f)3!L^kqUaITvcFK1W zL2tR5_H?6yK5|#NeHu?8fE$Te>ZcGT_k0mL5a{e>`CSngFS zkG#tA$7G#@FI%!2O55+1e8;%6O1;*r%-lAx=*7GbNtSi@8gVc{nH+eIteT}pp0bc1 zid*Z?ctXg%#MkEDgk&N@t>}p^gL>cUSR8&BLsu?z{Q9i%+Bpe~j+x(Ds&@00q^N>N zKV5d6#!(q8DtwO8tjvpY@6Pa33 zx?g%GbxEq_mmtgQ)hj>=NCn{)LBuo?m`On`{1i=}$eQ@NuwW2KGD$?#Q|ERFtd)?$ z*D?HR%4kNIW5M^Vur1t*Pj%!TGh`~&ggTF+$LFa$h;Zo|b&o%<#|QUijtNbR>dR*F zc7UwLNvVA}s0l_{zMkgLML=0ZQY=8AH{?85bVQ_fU1X$o>vFotc`WOm@tg~3>Ys5o zTEzNp`nisAWSsW9EP1*a*-7M0?&c?0Ys;?mf8t-}mzQ!!Ma~ zUI#=!-Z=vLm>JENBRphcT43W~ARW-l8?*PaC$uZ!)OKQ2x`?7~ixEsL=in=m!4P{6 zI38>q2Sv2nDzbtH{SV!wC3%6SnCUH%7roK>;JeL@Uja%pI2pL#TgFDnuwl^wcX5DR z(ZOoS@6~nDjf#7Gi2tRosRe#XgT`O;uU!ud2aUJl`NN~XONH40>V0a5x?ouQiF&Lg%1%G2n=WPzLGdK(B z=Bx6E86RftGVk(NQSCVjKk}zm?F31!YgOdzr0t~d%wjwG4hjs&SBT+9#xr{4D+l3f zv)OU4qYmC~Fiyy!Bi-bdPi84t@^M`~1$4ja=tM4=2J#BZl$0_BCVLX^6Jyf3FnfSM z`br*Qrh`bBEF{x#khG9)1A#QDd`?tvZ;W39ya0v80b>C#=b&#CJl6qN?d^~4#y87e zjUpHwp51M^7Xjam&q9y|!jHtOT=NGf;+c~!IQfqmfjO!|XMYBO*S{+?M?K_*FQlaG zRQ9Q3m4N13P%u!jZ9=}n4Nqo-k%w)FO&rW3&XL%_6e4flrK88=HAN|O{>I687|#Z} z==R~q@%p`!7kFKJrU?+Z8ks1XuOiG)4l!n_c)fP=9pxGf&@<$$@aKMdV}Fh4L$!y= z?PA!qWmhE~VjbGAMP&*$gK^Ki`&e}rVu;duEwvQ4A~ULwRcd-h9f11|*hk2>aDV3y z@$OfAc3CdB48)Y(6x~-<-Oz{Z$>bY!%Jsho7weo=Nt5%`DzsgdZBw*mJeEC?5)DJu z)-VkOqBYzamm2y`=diR4khO&!ZLI_USYMPb68ko#Y<^E=r6$R9Khwqd>5LbjEs#rr zWmQ8EtiyYV3BW<4LdZi9r@tu2O#zE`1Tc9ffT~_=c#glE`q#)8LqFt56DxOnc27JM z0aZoO?oGRVlEUJyEG-xHEf0mYcGo#+gV3RaY>U^{<7?%e9!V+ZDc{zOa?ljo z@R&uObR@eUg^v{Y@D9B;JUXC(3gDHLm%WldZ9b)qL6*6(AfNcHM}1p2STxR#oeF87 z^J{buX&o7Hh085B{5VaPu2!CKLT|dA7obdJkg=}~(o(b~S>z&h=l)*M?M4*@$t{qb zGzf6iFLM7;83-{YhId3SI5T2OP-Kk1t$IF64`+)Ji!SGl>5?s`i=f@8*_FnmW=ven%QoyEAd$** z&}3L%^l)*l zbt<}n&(G=j>?Bd)WeO1kt16y5jhf4^03bNGdY^UZw)u9=?9^9MI4!o#TI6rfRpg*Z zjcs-_@Lwr|gFiA`9EBt7}Go`8(=f4-L5 zAO|B#q{S?F>n#XEfWk|g5kiSsVL_Y}c;Eiqo+%nd3S&j9pEhJYmH7=6`0vvxUyb|* zLO*65a8&-qj1xSy*?fk5SS z!4C{Pbi?&|p_<(38?@;K`NESQ17b5#m~JlKbj^5raA}ot>bNe(fU@Det=a#xXQ@%B^zjALc_U z;Flg4{NRM4s%-}b^{V>cb6V~6#)Rx2F%FLDsnUKKSYs1D2IVnPabVffnQ zox^`W9+trw^?b5}!}yumeWBJJQV^&prdlc^R*kF3S>Mrm(T+>!$2G-rUEcFTy2Q}< zSLLpv*2hyc`y46IA%+}*#u{eQHHSM)tNigEs(OmB+ zz8#rcLEbG&Hykm&45bA@{gGU)1CQ*sR}St@|M2mana=;pid=W|S^T2zBNq%me`@Xk zXN1`9d1Q6)ueV9C#3RdgS%S5(hp^)_-*6L>#odO?Y^E=v)a1WLT+wUcPj<8J!_B2gp=*vJ;*Kmu)IbyRCX%R^$wdc1J#+GCo+{O{zSwq1{_ z%Y{G4^bJNu4&cglA}3=X+I2h~RU1be(+1uZUa1_&)`pl#dMy+t4%TD^HIm`BsO*kp zyi;X2r9GdIxwe5v?U0#U|HlCb$RUp)7^g z()ZM86emKxD$1_YTyw3Bg@(IiC#2Z;nKtmGx2HZ)DRM#I<_ltlC*)KD3R!5Bu`W=b z?w55uTyhqomW;}XL`TLn#hzP%a{QJ-MX>@=xGa~i=;ZylYF8EiefSHf8QkY4P2pJ~WFPOTG#xWN^%3V$Q}3=31+p2gqk}0S(Z9C{k!^ zx9!DW+ilng>`rI`NE(2Viho#7nKwRmIE#gYSw{E*;*;=&_gbm>o`|pUd`PU0+QxID zJg?0><$OTp9Z4@UMzQgmu8$ukj|sjz@19I~wNuQ;{eTw$lM}HLm6+qMr97F?Apj1n z)VCZL4>Z2LXrg!Se#!K>3dO5!k#Lqg(KtEjRA-d`ooPy6A~O9e1S?VFW3iCfzB34U z*3EO$|Ffms2`%f3Gw3~4hDmU52fbYbZ7LkZZMd$iczG4JZdm0017&&T#t2@(Dgz_J z!+@!t3ELIrL0?56R9S4B+mTz(2X@}W(WnpNgiNSQLo^0_j(yaTAO}KIX47TQ zT_=WsLe7+qtGwk0>r6qa)Xyb)LSnf-$5}+-(sw*6rJh!;XJq1p(;a^dz!IGdDbP;k z_SB~@n~sPsg`6XFZB|BauIV*v_?0d@;%5Yc6`RDL5@fT$2t|7{CW)vwK9 zV9|$vBsfuSOf+Ygz%vkN+HrQ2;-=qLHIUxPj3pMl(AP3mfa+;ygeLxk#9FHAQj1AM zK!Eh)l=EXi@Xy<-ToDp7powyN0y*@*$I;$#n}Y1vQd>f z&`$^MXFXeJ$?Gb-wGH($DGnP?iP;`M*M#5OlbPSS-=kIL;gHE50jO!>%i;OJi~E-iSiU)Y&iWcagE#k;(+{l} z6{$t~8uqI7Y0DSu3u2W>NJf^UYq?`|ye8YZvB;_qsnFH=AN~vO?FBJNoBdywIL}b2 zs-n~O-h!$A<|ralk`-^p#P5ldD(}Wir#gYiCTkE^!SP90L1Ur81?38p`m}DtRFmWR zl$9N;foqydRnW+p7`DV%tqk^kq@$V51tQtvs2tbTY?AyV}jphGCKw;tM zcQC9JP10nz8NAQ!VQ*1w#4L(z@qbXAU{;Oc#!!WWQ&>jm4oPW1_vJE3ERJ^x?5^EW zIvl_&?i?2J{WB$_c|YSn5JaJ$LW6%N>%493d-^<0PbC=IR<3uKg;W9^<8gW9=?N#U z`m4x!;hO6KiCuu}RO!?lLHv?S8DPY$9qis49C#FM4(WDvSYTqB(Nh_3cq&33*FZOg z$m9|VpBkJoV21jqb}gT-ptskP*aTh}rkoR+$J$zO@Hp+6c*#*zcRNlf|Gls{F2~pz ztC?ru$097R44D9EXX&XJ-?&XVz6JV!N6B2*72Ubzp$q@H?s~_v1zrqrG4_Z-h&WBSCyO1XdiAI=a~>_}DvjxgUq@j^h~6a@h90CWfNN zJ{hz;W;x#3J#BfHp99W)Yjvt~B_l$rPSF1K^de%W>vG{aDd?2v z%vtq$0~w#s>y7h8G^c5#!Zti^2E&N z?XQRg+8o`&ZdqU8n{e>5o!R{Qg}SUoZ7Qgx;LOo&yhP=3U%b(&A5ZZcAXUFIx#N(; zb2gps>+hb2{kDFTf#vnF&*Q;fBm6tLwYK^=AKo*%9fZx;UVWxZ1-Q&K-m5@x_EH>} z77!OsxiLxH#VCMgh~cBwvmL*-lW&S%--rVsq_I3kj)bwXi2SzX$HE*pFrfV5{7yF$dejb>CN~ zR?D9&D!w#55aYUE8JaY_c3?C9c}({4@rgifcx$)hm@or{+LVeDl;QB?eSKm#Y&a7q^w2q;e=P*>o{yKt z%)Ee)t7nHZ5K^(ME z1DAQFZeTwmtTdL@Nbl%V+iU1p*cK}5YaK61j zj_MZTu4Z36)d@hy%G<}ZA_7`n*_{pree?RrYfHq>b~g<;2g4%A^9@o(p~k7hS9w&j zuiI`*{6CF;^F%PrqM4#>W~Z=RDTG06=*z>*R@(-q{tG zhPSesF{TX;lq9M#>;cA9K&s4JAMkSECw=oZyMC>G~v z9;oa;#!yA!0>jBNxrLZ#Qu1)oCg+?Ch}pT7yYeY z@c!5Xy~((f2t|j@E4_FBbv$l|_cJy#7vdJKq?_FDLI3ri7IEHm~ z8q;N5!MasF3Pn1_@$E}LYoSGE$5d+XyeUmdJv!=u>u=302wL&QTr8mmlqmx+K27pl zF96PW`Whkzz=5x)2L^GiJ68bC^a1@M$MzixDd?DFr=yQ~k~$8{ztKslrb4#m@Trjf zP2qa73cZ8{g;Qluqz6XbSjNPrR={X*kv7m~oBK3je$W--u=RnemS^?zez9xgZFu{6 zWTkSVn@S`$b~qSCF~vc~paL5a?3d+DFxdX^7$)mrKUVPX{=Nl9r92hH6$otn_H6_# z^)5jHzXGUmAo^;2Wf2Gh0VX66<+$<%P}z5p6CZj6uYh_ftW_P%PKO~c!z^vxyWbfV zwENku`Kk5bitv$r`#BmPVN|8|SWiGt#q5)b%>3}myQtILK9r?~?#wpCy!Cl8NEH^h zCy5!APkQI~y+t@d=W8!`A-l=F!#W*Kwyp+S9_30qIRlIGp z()|>x-tbRhU@tpL$5tHDqwrEQ(UwUf`&o z8elK`nQ!Ht1NRIUjRdJa;g&1=DS9?+U55NIB+#F`4_>!TvZGsnQbn>z5Kx!B`XJhE z`E=3!p5}146CL4cdc5W3)Rc2ny&O7qAZFYldDgi3-z7YoPyY{!g_WpSi0jZhzOVos za1U>bzx$u?P7inU36Rvi{(8n@O!4Hwp58qW$eLVASc2<=FmDX9(zkWNKy$F7Bwb56 zXXQB%x-Df^ihj1-qq+gJD7ONvZ`8uidx1A`_h;?cL zQHV68^Edu3@SpJH43Ltw!e`TcX4vpXHWn~+dCy&R0FgX(zM?ZmKNf!Yb2s_TRDd;* z+g%|sGTKwLNVPl9e+Zt6$mDI7ET<)s-TBmYSHib>vTE#SZ7EUYnmdwa$Gs7xO6|Jb zgNB8ao2xx5cInb-=2=+?12!$Zd*Ch)WPPG1#b9y&Tf<`$D|pP=rs2I zZ@EW4zB&~(b1x6vzyp}4bZj-$1)s`f&^ee0GF1<(+gO>?pJa|Uw8xH*hq$T;r%!yhARt&tLk&yR6o~3`v7d(oT=eW7CK=5Akp_JlyJ_&ag17VD}3-?X_Rh=g4aArn5Af z&UsKQ^0R$@l3=yA9n>-Q#stJ6S*^YS=Ko3j{X$VsjAh8;y1^4d>w1`f=e^8{iQ*OX z=z&%9<^Wuzs^BUlTd2(gi7PsQEw7vfmHLVOWrZ@g{ao}2dutxvd;bpae%}3c{9k7D z|5n?k=lq}08!+G+0)JVrkLF+Agtqj&gDN@>ZzF0)ZQJeQkVB;1ETgu-1~0!wQ}#QK zsaEAu3xsrrV?Vs>BFE#NbD@rEf96#0n>=E?Lek`Y4K=&M7cTm+OiSA{%i)F8b)bWL zjiMS27kB+LCrDv(rxIwCo8OV>-WwS&$8gu7Rm%Re1=kNBdWfbf4gXSi7D2X{p>Mww z*{VtK>1co&4pSnMW6U(9iGhC3ir;l`$^}@2NoLj6w1Xy~z(?$k#&qm$o<_85Lw(!g zmc!HD*}P0~FFQzH(-hwA-FB$!6(3yQ_O1r}wB2M+ZqfZN@|2_XopASsuYCK*fVeW7 z1}a3(@4_tW)A!rPlpRZ$?C-v*z1N@h6h3IIp`StrDLE1~9$+Qx=oIYRQ-evH*=rYn znV=dB9y>A;Mvp^u{?)rOtbzB-D~SxP-;ErINRZUwHF!Xq1U89mgbDmH9T+gqrvEL0 zoL{wlB#ms`nD(UbNS_O!C1`o9BOn&~D6=s0PsEbhDja`7bqG8+RfV~y(sx`{d!ZN& zTfUJ{?bkoj+HO1sed6gxnscxxny-@k&ixuq;IeDX+_>P+D{#LdSZThBu#-oI-;x~V zM_peATh;PM!~OWx;(9#qXrA<_7oe)aXAN#-$QB>SuoTr_wEQ4@&#s8l9x!f$xG*B{ z=zY?btFHkB0P}<(iujGjC+lIQAW(+FOc=Un1<94Joc&p;(x)3~#K$0K%WA$MB?6_e zc~^AiySPN2IT6|r$6~TJSdq{hrS6@&s|1=yv% zA}B_2S#U3}T2?fwyR^2v>)KQf)vghsQ$Tw{WeFh#Wg%k2G((v!e|x#+_Rt;DCIYi+ zAUc}f;tcH8dZZ|xhYvpejy9OnZ^U;vOOQ!%w+MpTHf4lT05$tpT%G@5in4yDK%PI$ zZS?^)*Ft4aRU{DEqPXcV<~wX0h4!9AG0_bNu)pHy?D!;W%E|{Htqn_NG8~Ap0;v#=~Pr<6#l1yt{?1LXzh32FxK*Q6KQ1`l*J|B$YgIW1WqtDz}58cDl zu(wSb{9}A@FAaF#I*t8fn2{ZuOi|75?s%+=&+jp7g7+(x=gEimRe)uw7j`jqtU0^< zxU-4(>t32b5k8k2QFhWJ;t`jfmR(S@%fOM=@1k?V@VK;Zv67i*=gU|*KY<<}HN;>) zv~Mvhj*di<@8RmL{=)7RpB|s#vWM%zsIoKv6{!v!|5o9Vkhpf-x|Y{X0r*v2Ut9bB z|4u7R#+wcELt2TL9LVJ>Rs(KXvZ$pe)t?M@GaNDVh6~frT@^Y~U6XSQ1iGY>DsdyM zpn(#wGv8HOrh%Y8%-!$aM;(QnIPI&L*WS?C8pNeN;djDDVd&P@Pq~U{y5SHBpXW(^ zC|Xf}YWl$Z&T7e=@zkj=MhX2mt|@i}h?v*mL0F2LfBNYLSBDtwDY8o&yji1tpx|{!x33b`g*@=VL7ckr!A2#cFrnW1D%#vc zR)wAG-|hSx3RdB{ncd+Y6#*#CFHfa#4;c$nA#dy=J(u9?epnP&8hz87ly_MNz4@VYt}%rPj@?KxOw%g6!h$L?KIc)%v& zV;bb=aP8KuM^Z}W9(XA-HGQ<$2_{x~<#qs3=T)A{NRB_L7IdE|gSWQd)!&?mClMU)L``_P zBcGjB-^`)g(Du}%Av|f^RARo*yOzM*GM`Ir?1#Aik*3^VY2!>%QOJKh(GI zn`I__=PtH|qgY>kLLH~}&WFfd&P{HO^4~|bks-{<7Sx9cXTow}UE>+|EdyD)`XGeQ7${!(0E(>-3j-bC)ph_{COc^kVYH5WjEOIaFg zpE*BXE1RUu@3ea7(DEeN^-{gVOpx(@F9*&w^n=u+TJ6D~^|I6!A4&+Sz17Ul6HoQ4);ZRJjsS9eNWbwrxW_B7RabR>6R2{YXXZVMHq$##4q-bU0s?10Mo`y< zeacznjf^xN2%Q*FROo7P&NnF5B#8t&0?$g+fM7(DuWX{7eCx%z8`EUB1otqImI-&4 z^R72XJGK|lz1s&I2kxRXpM{hToXSCh(=h2@9K-tLoopD^Y}~~X|03@H zYr&yp$TW(_?>viSzi1%>ulGy(bJ`!>Vw1U^@+udO4z8WLm2xdzSHP8 za-P=q!|Q)fGW7|JCHBEi?F%4WhmWJ;cOVCc0Q+(ASzZ7wdU#oQwljP{KRv(13Ig>? zhmKXPl{|VO|MqLKT6~NNk!nGd*QE7vJlbQCZ*4>5#UU&G?mNMJ4uo|c|^-p z_noQst_>Q!sMeCmmAmw7Kd~KW!`G)nKC~66+=Bk+ahfMY=N3(`>UhxOHz#xe;l7Qg z4(GOTFd+6rL#B7L4O?A-SH`R>!9M05_YFGB`K_ z-~D=DWvt)DGbstkjmPZ0^|;6XGe{>qSyp#!#D*`LNL1%xNga@JITD@t*Ar^S&*}x2 z{0$eW5x~n3@cVCHm1xj!%maB}F`M7737~FqR*Ny) z{eiW8C8~G$v;T|t{~vo_85UL7{XGa0QX(Q9f`W*2cPOBwNH?f-=g@;7A*s?`(%szx z3eufJH#2n4@E*YX`QQKRdcVHc`{kK$XXc!<_g-u5mA|zID4T9JDc`sL*t?+c*Krgp z6jh(7`u!9Qh%EqU6Mz>brt@_g&AMpXOp}KpZKR}-=;K2g5 z%9hxLws{fu!OvK#0Q(&HO=N&Rl@ApG3pygtG~4&Z<39L~tr<5waNEez>H;Z-Tq&-9 zsa(y&_yYYKfR-cSv<#}@(3vQ$ zUj3~Itfqe8e)eJ>YvH|>KjW_!)jVg-lcI*S7?$I;E~SrZXTr{;5@Ou$lob7Z_iN3{ zYbYCk0?O>V5;91IF7G25VK^vaYX71R=8@p_7c|r&_PD0RukPhlHHF*k?zK-NWmMCa zgZ|Gc8E3N?gF8U>5?>CmDFO9=2G3)*(vGZE{T$}%xkIB=%cZuKQYNe_+;bT~CJNhS z;oR)UGo~l+L#@2}?-g5ISyco?@$-D7hS)>NG8$8Ei<%%?N!$Fz; zzw#3Bu4?Y3wkr6CyW!LCjp8URUa)xCsDTmEe+`E?Y9~| z@5GPL=6@EFAD6!44pE{9(s$3-NbQ|1c+c_gI?lSAQ9`BuPGOhZb=^A$$PTdqz4-vd z7&x4v9XM?U=!qL7nHG=SC_<4!o!dI@2ByOe1X z$pi;Hf#d&-9QkuciM>$={pXoJHYZvD?oU05>v)wZ#JmJdlB`v(_Y*#PCqDv zqGd#-)6pvZNl_JCeDzczqY-+WuK-~(AD{X?v(}<3xJIZ`&;w2Vi^kWz5kOJxAE5Vt zHZvaJ!Lrq8%LyR{Yr+Ael(0w#-VU+?eEax1N{7DRY4^4)u+yJ-!J8=W46lWe?09YB zwrn^A?0o2i3j?NL9XN98!b(2E)6Q{r<2>IX?yL?#qZ(NbE8ZGK(8x!LZYojwc4|Kz z6Cl_C@(mNgiX_e*e}P^=lhp4hLn5D;!0q1$osFmf6V%8~XYSdSLsd{BtH*t!1&0hd zTq}>QM^p_fIxFq4$qQ+;3fNtg*9&uQ(yR z^|C-tX)J@vOh&JPI@H_i9q{GaOMaxBuNM5Xu+wV;1>_BT*)uKAj8Nvkq~w{hxQ0`}Y*O$v|z0s8=Ad#vOPXK8_$+YTZv4*#DtlIQL!~vlffYo@5FYM0Aoc8L& zCs+5cQqfOnkHS#sk60Ri@OOz2j}M*yUgdd9{+D#}1n&Edzu;4?61EsXZ!ciV=>haM z1uYJ6aFhkVHD8DkeXCW&3^Wu)7#ujyR z+VM9i5M%{R{X?<3FEPzQeGp1$lD*x~>iuqC*yVNl^0MXqIecO$O&%S47< z24&md&}@LC!e8(B6xjP8{fRy|w%ICQ<9hjCk-#dt+3rG(f>$bqn2XJJmf`@iwWYH3 z*V)VJrn$OnxbbXWR@F*rlZ2wrUl))MGL4SJ5zcg4tomo)HbBz@LSDsI-~<1nyh*md1-QNgFUFP?;aaT@2z4oU zjnciCD3)JcV6q)UE)Hz2-xTB({f3KXh=Y&o2dSBf>*41Olx=_WxC1Lm+dhq@3#sTpwvz-T=nC^ZH&zRb+4QnK$ z78Y0KX`NOCI#2I_#I!RNcT~lTEB2K$3LhQgbaU$GTVOpMG6f|A5OD#K9Xj`q`Gb1F zLoI9OqFklKHomrhwa=^Pt`@JBF;?(FqPcU7}F3_F)^7Fz#l;Me(P@_lbFG`^& zizl5STfixY11uHGira5?%6SBdcswocnvqhtYHNg|8@$un%bk)o90p5iGq1ZDF#hQL zD_QH96=Alkhm1;E^?z_$dHxqKDqM=5;ot_1?8>XS10ki!y4_Cz6B1HYLY9OUyzI=P zdJ(I)E0}>h75sNUbbWzB(v8E_wy*%;cQ8|XuyJtPu@!(ZdQM*ng!0LR?z=f0#>d-_ z0a6;H%^$|09@qY)N)J$t{JUJoiiss+S_fFeGaTzj!?Gsv*GrZL!t&1xxt}s=t8Kzx z>(=@Y0Oeg_X5b_`N&z#{$8%I_oOjrmmwxm=1(FPdcsuQXr7Zs^T=-F3xydW*6FeoY z@>e7u0%qH6>z}t{n*tI}3OieKy3JXyr=3K}%yC%7QXUx&=7m&+(p%`gRNj|G~!$2|p#=<1}&dLsG{d5ei_ zQ7=|XS-TxvQv3W;fLKYaIW^D5aH$&C2}0kC+4975H8nmm|C>1%*WZo@F~#)E=tcZ4 z$^BKzZ%r;r@+DEi&aeEJJ%MuH>t(Ptp&w;}q~Wv_Y5X{VF;qjsaW{p{dv+!n?d_+x zOEYMJPT#zBdYc(F)mZ?|OVS0%g7@k#o0Q@^wq9G78Mt+S+jp)H!t@R!Xa?)c!L;cX zGfqNy)oYWK%l=G$Y|OMVlLBaUOz{ML~0PCSm97?etmxa6SMYYGWwU|n2XZ~!#EQTPgEE9H%7!>iJ4 z-5U*N89rLMor%AEk3;`(t8U8slR`>_prC(7d30(#?G)5Tj(FP$3X!>v<}>Ki%X~Y=%5N} zgzD8#mv@Le2kNAb`sD18Nx;*?3`QCV9JKzJV0^i^V}i98+|y6Bd+TP^qp7+nR}ZDz zR;2o55r_!BHG{nITbSTf@kdGJ_WE{ZC3MBb7%lQAC|vqr@v8Q6A8@Y+Uf6^`?0~@6 zRA{ImpL`TaZnSkxdj~bc&*jO)SgP$*8Joh72HED^p_Hpod{8P?b@J1n-O`$SbF)5s zJpdd?OmKiLzL;7rs9o_LiSoAZjcWkT`PukGb;oMhWzIPbt8$2UDAtG!WG)3Ug9=0| zMd=}BUklGsFb08*ypdw(`stY~Sg)#B+Ih9SPn_hv7T$yL6XSQ?xEU&PoTFk444=pHXNA5NlYa8pwBhZj?)| z5IWHV@L4dPr&pJTRwAil5JtZl4l!~XFqlMK3!}TkpZRv5JRKA23xZQEtGr$nRc|}Z zznmG|d+0S5d6O5I$NNU{trZM`W9Ww&fA7OFx&IlZMJyupj~5%GUhd=5CeC+Xn=9mk z()K?-^+*9^w{jqYsmLW#wb9Q!&SJ5B&?jE$yh{YX?S{5|@4p0mY05c8Poqg}`o>;_ z4?0Yl?k8N_!l)f+{`hv>2u%+_$pox%+)s)8Hf^e{?I)um4&zBKf88iUxMCq2lX+uN&yWin@bj zU_1)YKst2yrmQ%tCm%!mnQvc(5|8U@J|0PcOtnn7AJ?Nfw; z7@hAtp-I4r+ydALac3kT_~wD4i+%2~M2Z)tSWjJWvkh3Mne^ut$FVmOhmfIp(JuYs<;*?TA@b|2aMT727mh+6jZ{&j2BJkJ}U z*Fm|$Ip<^MZWk4=^}8kvy!9L{g^2jPHnB-PSl_<^L~fmf%XKVXIUBc{Q>SkFRWW1&6E@i*{+{as+><{ z)N!?o0rWhqKVD0w??{nqT&qh>flPM|b*{PHHo91Un<$TcM)h-Fs#mJ#=~GyS;1e-k zf&C{dg7lm46Z^%vgE<8D^*pLm^g4g?klG{YyU#bhiq?>re{Q^4ZSTCu%*Lm54dM<1 zHS<58NwA6WPBKE~-3zxaf+}EkQkRSS`~WHS9F{aCJl2(Qk&axf$wzN7Z&xAz$ep$w zZv7b=Jx%{=AFmSwI0cBCV`iTkHU)=0`k6^Zb%F+T1o-DQICylTL!P|c%~)$>KMcRw zyu1X=lbn@=oWj+;YNS3kbZDrK&-2#L<((yG8{9TnXRbwDV4hPb5cyhYzu@8}+b!w8 zPbjN+(LH|2R`(LsF9OMIcWePiH><>T_tS_to}f+v8+`PpkSJF9$~f9Gxe z36N^%P^>V~b=Vaf=rG=oDoURWLue$UTnA87BU=jxHK!3>&#{`L7Ebku!2!3+ z#7(a>!;anIw;%T9Kns5iOw{Ly>Vua)Ib+b0#x&48)H3Q2$0X9cM&)BxIKRh2$#a`% zBaamP#@j~nDx)I%N8a8g6_C)~_WI7_Wf}qfwd;Py=+6Yq`1EYSNY3Mc#^jRXDTJ~& zI7XMm=O%Gti&_>_CWYy1N`&V$&WSc48y3o-8zbPR>krM3-2gi5X(CfHuV%n0(n~2P z4vSqevqXO%OnO&6Bw@*pO7e;oEMPLj3NmGmPxYPLq*Mcis2fuEg==8I3M8d4pe*cc{07OVHTqNNvcjH~g@YprNNg;D|Y^%;EkNssUY zSvpYra}4a|fv?j2OGUCz8u{OC$H%4J zt}K)zh8cCd4M*s1K6z)>h8}H?9fNR0OsHwGl_;xjz8mzv+N2Ta{Wg(CoBvPZ%)crB)2L(Gm)M|7r-$-Pzm<3{?Yf zDa27S|K4Z{V5m)EtN>D^a^nfv>HC)uGW=Y;QBxxC6&E#*bGi&PpLm}qktvdin&y(p zsTwvh1Ej7PgThuqQhKhw!uNL4Z?pQIspr$~GWAM#(R0R$Swv0OoK3-ilzZ!eFXApr zp2R;3wjsaODjh8^geFG5g}h-D-pjG@_P&qBJx=kBXgCLR@)Ak2I3UrH)H6#q&e6vd+U5Dhz! zsB|D9)c|Fqk#~be^>eL5FMkB*MVzHGZ$1BHyB_`=E1%#S9?vxydO`sn3gkjbdE=L7 zGuW~-_01hqljsBlO1Y<2JJxF_q{KOE#mvd|EgbNtp(uPUVMl@^-&n)=TEB!**2nBO zw!E4=r;1L!*L0`iGuRxgF!;Af?iK zZg87^S_?hNSFcp^jM0R$MrO*L5eg;~PkuGTaG}qG0y?jD(C7uKC=i!9Q%X-5?xw## zUh_}dMBatXLNzTWf_wr4b2J=rT;vysnN9@SpNg+G{$K}T3#!B4nSUmaU7t7@Ph8|< zyiZiVmp^-gQ>E+pi!=;wcAJbFxI2kHkx+G=J9XDTC<)JsHj?wp<2UZTZ z!tb;ZP+lO<=_d2vzv?hu?r!YEUw7|05o{*_2(_nCX`Ov=ff#68=6H0=L*PJ*m4oKY z%@!^Z47n#qI4($V_oi^4?JHnHI#VnH%a{HPXA~tjG-UxBoQpG%D4CtE)k6{ypK>A> z&Y%~P3}nDV!YNk(NuRsfJeqX4mB5-A=!Y{T^qrIAvXTje=DAUg%nJyg;O?0|K%(b{ zmMsn~>lCth>Y5+tWXVu%Yw7eUoqPzQ!jhOGEFMXySPqP6B5j+J=kXbUsT%k-Kxj>;@X`b7n~ITD|<2kW{=9se;!<8xODVhWFzN9%aZL!%yk3oIl@^ zU${PI+wKlQRJ3Qg3pn@}rkk_rqPgA^T3Xt?=T!QUQ!yBpayhK{H{#atNmwl69fp_O zF~am!$8xPVRq9&d><*4JK$eaTKX2&1=!0|Sm>a4mdp5%yuHXBTaIzKu+upiFHO6`` zmM%BIr1Y6a%7J(b4~fFsn^l&qwS=H5(4-I9p9Zw|d5Np!#k0Ofv|1+3JG=y59a-P6 zR)cW$_%@LL_3!=j%P+6*-|x?%yS_h&$7W*V(m` zqqT%SkL>w=Cj6Hm&0Q4Es02|Iwfgs?()Gt{P-<9F*#Pm2@=>Sy4LwjNJpZ3N_wj(& zwu0o)I8pEHdVh|WyOvWf?6KPBHCFn=*AX{@H`ij~{iYO)OR1J0MLk4cc0Gt4xJ~lF zy#?+H|LoOobS*)<=*M^Dx6y)sX^`yto=HfkhkOYPd={T_CmF>{IPH<{&8Brhg`&!N z;6C_PN;}W}TKAL;;D7paBYQE{0pDm&5GpFbp>T{uu~(TZDK<#EW9;;I63JXJTHL(@_Jmu=P)kgp1&C`R`h*QEUo)r5Z5e-+5Zl$`KERu&8EP;muYOV8 zRuGOPvG>*48Z{tmz()Z6X6pfOyZ!|E-7FE{5AaFX`0r2Gw&=gqxDki{x3cm4D_uZ% z4xRgzl5{ntnl$fa#zNw7dPAuU;Tx z7`u)MKj!X?AAzBc4ViQ`#n^BpRGH}awR3PQ-RYQN+h@|bqptpQj%>Z$0Y~6p@Isjz z)dna8;G=}+xZ5$SN2;|{R|MM=r3td0o(5GM-nH?llFCpltFW)p7rOZ>ujTSqc1nJwu;o9%*Tc<Z#n16aGq`oQC(sh;AT3$2+9 zf84Vc#&Fs&kVo%IOnwxT8s8&UtsnIAi8%=`Q|$H`8MoZ0A{qO*f;F!R(tF&t-HtDm zlk9THUTM9fl|7RK-f==A_j||n1y`iLqmZn%xhL={o*{X{E7Y)8`xVXT!x0#T)bU)F zksRCEDISY*5rDJ%oDZP?yZpSjr`&1_ar1P2`%mO=rz_*Ki0wZjBW(_TM|%nw=)~2S$jc zoZSm2e4Zcw-d*zhjo4LfPn5n)@*4VGx9B|eg<+%Fy>UNCKhFKkFS(CzBX!YyA_YEO zt$2bb=(VlE?X>@pRfRQpWQ!%a_hKhT-!Z&HnOGEeG195YZPeT(mS(!zX1rH=Fo7%D0@>hdeuYHz*-lQ>I%MlH7;7CMWAjgV`4b;H zX&X@gY!WiObm6vZLql9WYo)%R4)dkXmRDZt3{e&Bk4+mZ)?UMjVdCn=o$B(P0J;PA zVqp`X9HETkrIg;y=Zmse4k0#*_$ir!(MPq*CzEbTD-JAJ`!H>r3#cX{Qh785g51D~ zP*@8~y0j~<-!#t_!i*+lW~6stBS=&S&T`%(+~E~Z*N3kjceoHu}|G=))jt7r-Bk z+*7-+X(nm(VZ2Xw({C*qd;85%o-C_sMw1ML_*d0%{s7SN;|Uv4;gJqMr_Tpnb_cVb zttbj3KNpoannT5t9B1s1Yl>B7OCcDT^e&xYJ9&gPK3f z{GcSm(aABrQW31|$j6~4^;SZuSi>fMvdqS#V^EVJ{?h5P8M*UC4?UM6S#^k(VzuWGV|C-fY67wZ-Yocwv0C`(bO~89p}x&= zcxlsrKGJ-Giu=RwwBVfERtM}w0^w$PtL zv*CBEjN3Zi*kZ!&hp$~fxA>olxkN5a+QQ1Z&Mf+=Djk16IGS%f$x7_UNtC9Sk6jNB z9|#hmDrz|7Fqt5{I?!({Ug`zyyNAXkLt3ekM_!1dvy;M4HaXa+$6MtJg1U`|68#0J z?;nqaGeaHxaC^L$cuo0xvW{Y_=h|4)9}o}$CtBrM51VYPPqpbhWJSBNjh3~DXzfdC zTNRDoHC*dlI7H+(_IrDwH)>jTnZh|An9U5XQ2Ht?*HzZ`gIS$BBitN!qW8gBpb!Q3 zcEbzn(fa&NVl4dTyj2unsiB;+vTSK@h}B z43ZDif8%-01h0V8`urcrR|f^rm(Y!G!zG?Pu*}`C;>mESE8hP@lyW&2(?b znz%uESL@+Pd!ft_Yb9PC<#AG0%qpYE`bAE!0+(d!u9O$m+-3s<)Q^fQzOPjEu+&XZ zA6M&p$ukBEg0AKZhb0na+vfX_Z>|a_vYW^eg`9FETq&@LrbeJQ%AkfW9<~@Tg3Qex z(({N!aXIax#?Ygwcnk`oV3!COc;cvE?9leXXZM8ip6{bsT;I5Uzw?#}M-E=2#;RqbfM3Yf?8hoJrD z!ITB#lH=A4zfm0ttUc{zPkd1rWjPD#s|^)DWvA98Yyu{{ZHMUHk^ z+;l48d3Hv8&Z5uE$~Dn0W`u6Qbs_0D7UFxalA_b)I4%rnTXPW{jSdZ^D)fCApWM8^ z7%XraZ)htmJWI)?6H*#eYlt{^b5A8U=aT%HL~p669F|oe4mK{IeI%-o6#XECrGA}u zv{{kblh-bm&LJs(2K9(6EeInsFQzrXhk48%f9mZ^03JExQ8hXCt+Dcnb83S%gl6AQK0T z(CTqLFU{(q){67v%}j0CIQztuLHjof0f3>-iL&+%dH=2%Yjak5t`|G&aW?ty?!_AH z7dM%qo;268vsNj>5A`@GXq4n>I9H3XC<-V&Q{k>@e!xhwHyDd9FcUSd5nawf`2?QK25h3MYF2uZ$mkN@kka?Wsyxb^4tRRW(qjgDdV9bQ3>3m|<&3s5ywu)W4nQRfi59YESeF zd92o)x7~*GfPZ=t;Ch%AfEu2{t!Gfqlo2kx?SEidbyotJsaDfiEE(KVKjT6_jaOXL z!;~Fhq9%Wq%aE7@cl^DPs`>o+s4?H?ctGs=+l}6z$XxCPPz$W=ZtN~F_Tam)sN-Rz zgr1I2)0^sMVYj>+Q7EB-I=rEGp&vnt%n(GkFQZlQ3)bm2k;xF)BuMm;0 zt$wWhAvi6jX>6+(^J5q;hb>L>7&UJ>o%TPPXt*pLjVt@(x=B}2dZ*1fjo)R#*J7{m zERgRmQKqkjYOf!m`U$Ad*HlnLS{(<8KU3fle=Ta-wukU>Ek(EACm@QTgAlF4Y%VO4 zmAJ1`1nv%QocHw|X0(+3UMaM^NhO@7lqqDGkL4^}X<(@SqBhkeC>anBc~O16`O_j< zH15FWVhstXKJvE(cseyXbcOY?Rk4a(yjZy?$7NvY$E+$KDaD!`HW|#BaeYtuZjRKh-PC(!gFBN!g6oE0 z2nhV~Pf5)%OHZ}+Wc>cDY|M}5=>VBh(xUU+(Zr<}30CaezG+_k@kWbr&io;tf*&3u z1uRzoMDF*E>F$o{#YQZV$Kty;yKjZ^CK_^xE5hQMurKa)_w#4eK?2Cb@BUht|I$Tu zkWKuMXA!UEELpbf(<3ZnvYNNbIboGJXEh)J`1kgSfrfFM@JHzTKJhp$aq$q*^WApF z_T~*g9bib$5`{u+gkb=B1H&|4i|J0e>w&Qe32NbkZC>noiSHCy16$c&*Mdq#L-u;? zVgw6Pd`Lx+>-fP3rjdC2K%%;5ko!#ZLU1RPQ6aE*{LhJ(eG`L;gOlJkDFDW0?pp0+76ExYXWKK#_`vbu4M+^vbQh`Ek+yfm|d z8Tokrcr2Z%YbO6bcOu%tT6mTG!IpuDSpDrB>`N80eAkqUT*a{YhY-#JA5Pr?5g62W zqVpa1Pk0>Q04X|lA2?-?I`Sqgk%2{b>Z_cuaA;83w2Xe4O>76#nreP6s;&Q|Q1WNj z<Q{AmQkF*$m8wLgjwSIef z^{nz44d1HiKn9#2g-73a8pj!+?Od55>59EN{f%F7skk|-duYzsgF=Kd^O&O@!9Lw6 zYxzsY;w`9hVf2ylL@-OvMx-dTG2PX9Y1$gxovDLrnMQsXd#xYb$@;@h?V$heV*Pd&qGp|Kx$)$(c~7TY z_(k#(w~^^FOEU%_ui{;0%)_-$$nDS#4h^hCrKt`>T)qN<+)0;smzJ|;5eiB1D~@(O zt@!6u^Sda|D;&GH4`D*KorZ4Gmc6Ox6JzY#q zXVc3 z$4i8;-?L}oz=)SYy4Phu$-y`+NH;$*Tetkv}kMJi96{Q%zyvH85#W^^IX>-J``)Pg09WT_6t^mn5 z_4Mpa9)f@LuGtl&l8T3dsRL1J7evfC6~F9r2T)E|w`_I;>%6S zY$rHz-*F(Kj1<2ZTH2HM9wa48#);RKdnObHSSddB)GkwgYZjOVOaw0XDzc^-d-#$x zNC4#C6KLcV-TWO$TUC6=YjKeRIyjgF6wK!;G`sU<3!8EXLk($8vPvCos|Z>l0MA<5`P>dI3yZdlC{+ z>qP5g3)YLt?35zw`ZHsM2jv~Ic^lXwmlZ~WK)*)?lFaBXLUf#^c~^N zc#ant6r#`3h;{f%1n+(ays7+i*G?Rh8J&3-u151ERq>0S6pNpZy(bf090HOYDIaF% zITM-8-501+bY1k!*{Ue9QAp(Nci=M(W)YlnDo`)w!PZ9t-y&8vCJ;0uxtdIw1<%n9 zE=tKmY(&C8ASU+t)qnA#EI*&_G65{c@V8mN4a5zRN($`Hn1X@K1=9xT1rxH?JUT08 zR6<>APdH15X94HkI>-`=g1j95rr;`YHiIH%BAT^*7@^>tMfv162xmQMI%K@U?n5>O zkwd*E-yPPmmjhlY8>I7e0Whv}wJ;FsSzpdp7V5 zYcAq|<9Y{O*mds1b*fCw6kzYRJq z9rkF|#;-Ao@072R5(q4zi^i2NzJw~|>|LOPx+qy&$0vV>{1QQxyS&N+>#Femmj zD#061;fDl36yo*kOyr8Vt#p5KfaujFXQq(yy2Ki*b9jaey@ppnq$3D6SePJ66%Uy< z!qhoN(z9Z|_QP!H{6&zGRbb(2!Z2Lb(t%Mg4J!dtl56P6Vfg4VMdLck`1QH{IiU^w zWms0(F?}W1U%&pw6WI`i=jq>Y(!|-|$&Lz!^iqEO{NQYgY`XM;_YU6Gz_xIV!$G}` z`r&?P^572Q&9VI@kn<8)!l*6o5JvJP3H)#t(-^(OrbRx{H4JY?uEunfdf5{=7fk@t zDnsga9}?X^Cnqwm~rOK1nh zM00cAiWTZ5H5@CteJU&p^y1`;jdZxPKbHN(bn`H+z=1-vB}Vq)?2?<+hrZz`L$=URJ>wNnqcmA&kGxtKiIk3!`#ZeQQ=|2_znd=+6i(C=BiKH%T|el;qQ=w63}lI%!qzNS*w9%j^gbMgdUw$-1OMkE>L;X*QwD>5 z;Hx+U5OQ`Ew}HGF(FZTxMPcEl4zgDNdfyYb-@-|!s8ffiZW zMmTNjJ6m9Jl`4$qeGD9(LcfoNxn7)X7GfaH+Un%O~^w)~1H$!gT9SixW^TA$#fbEnnr=eZCOV|4^CRh0U0x zxJp6AJ9OWuyxxKTafD;RT9bC70oh3u3cqx=`J;b)eNZY2#x(v$0%CG6!V+ zRo+Q{aUKve4nilV1&g+^AMvpaBvdEj`Ro8mv%`RPH`D1=JI`?sASq=&5~H81p!b%q ze9DXw`ZOVE_1+rsjC^&BlhSLA^Y+cJn6@Z1!?m>2pqX-Md4o;bWABc-~! znJ&!X4a-1Xhjs5KSI^zKi;)%-)Wd^xxO!o=JO|6FN$QC1iqKSi?V!^<82DGl^)}sBcGv= zZ1us`8F65?NTjyp8q2$?G;G_hHftX89}0z9o3qt(`&WI=*R10suAwP;?Qns(yqlfeMlaEXd4KUIjZPy-Ay8hk^)i>$gPs#6H z{;oy58J4rmm2NtnwFo9u))s6lu)FBZLeWE}iM=`l_|+tfg-D#9(dHxZ>cv`v?)K#&64 z`2gC~=q5PK-sy4GShsYH{%IODDY_B}834yvvCl=SX!`x+Q08W705u*?n@Nh7f79!- zmHs~{>;1h6qu8@4%4^!-I?J5PrP^5!_~n!>Mz0+80b|coOMK3TZJlSYt58UcFZpya z*lK5-zkWH;`Ho#7=JKIs>zuOO-V22?I8EPgP(QqTLnzGPGq!VOpA)Np>I#NHTl*eu zS2<9R?sUbFN0t`t_F2}-)i6yJD^jnOdOO}L^|CxmX0imzgagIDBsfj^nQLI1`J;j1 zqJ3r%8rnR|ZM1y*n+OEErR$zhu%AiZKm%Se=Dp3|Jk~D4c(DEVR9W&#dC|<8@$5n? z7KPP`qHZV@@Gl*@N;6+#+Es|ic`OIgD0_VF$J-E!t3;P7$|Z3~$|rEB7N^L8)dX zjLWqW)Xhw4>%oz+yxZg($y-3ypT`6D-OAUS$|?XGAjrgS0ZQVRVMVM-|Kn1V-GG~3 z;Q&9Wjt?>eZf7+ci2VBU6#+X4aKm(^ov)VAI&uI{?1SdYzWSqozzh!wfJc>xj=>9h zekvnCE<)^F(BO>ew!RNwV1fcsVgqx`nN*}TBq_bs8OATKRr7@ybZ)H6SiOqMatxZ76;So!NMCy8VVcpjjn8X`^L(yv0+GlzR6U?hhmn8yT^7OZt z*N?M+pu1PI>2p@XudPzfvpM^Ya}yfNz>S91&YesepyO!Vo@X)j9RC7#Jl8b0LiVN_ zfvjD}5Ssz&P3i$_FtC3V+aLU5k8IdpC!-5UFTwJ_40+R2%~{Zq!u)pnPCUP~AN_D_)};_b{`ck! z?3?^+EPxXY43yD&47)>|@V@4Me>*pLbT)gJg(~PO z2BVg;Un{afH)ZWx#L+&*q~=kA1oh+!i~9F}NPP`csm&nIvsPZuAP>&oD8E*_H{=Ay z4`~N-Xm$7e4Q!Ix;Xt)t?xxy*vjPImu*)64c_P(kXzm9=uF*Y8IRAR(w^YH7ynByH z7EZnjUUf+P>#@57U>|iNJ4`**2Cx_IKeBQSiRoKd+$O<3PzmY3l=&A8p800DNDjT{ z4OA1bp<-jTM+QaxYfargUMw!UK49N*s<8u_wfxwBu`!*3Vsh#3LR1vV=SFxNxce;U z-oK`(geHJl{DmE}IJd5K{9lZG2>#dlm0tY!r)!w>tq}cxrbg69 zkY2NOl2*A}h@*`u!`H}gmqG`h@&%bRtgOJ|0&))o!PN_2)Md7a(drVu=m>PU1X-w{`PCN#KkrykWTl^4N2}ghCiZ1XA%N`h zI?L@!NuBdr3Qf#nKgdoQ@mouR$E57SuX3nn>sFk^4Gyw;^UN|j8KK%2m)IjCzax?i z9oS8dErknX+>af*eHso{wcSoPfJ#N=-Hox@aw@Nm{S^h$Yt==N$#CtM34l^OX0Aq7 zdlQtqk9VfC`wG3Xs0S8tT7VGs-CClOE<~{k#RVwKyPc}*yJ;3`*Qo|qP!&AbTVG!5UobHO1I@t7)N}~SI63F!xNPjF#_;{a@8a);ynK5{;}5Lvn2T= zKElpWhgC*$jqszQdWEFT-tn&|bLz4&F9usr%BF~OITZ`D#@r4bcl~~JZL(dW0^_7*Bmv(Sm6L&9d8xq^;;C@s=GDiWXZ=ZLUAcC+DVQ!b_q6H zkO(ADN|PT;K^%?i_nnYqW{vB)MhTQ_RTiMy0x-4>Z!Z9jbyZ%UFq6ARBp(fi&lSSQ zM7HIpBU$yUbYeuuD}jZ?@_G3nuiW7cOEFghTf~S-S=Nul98W)6hCsKX)Rjf3FWT|X z4}iMrKp~%+d{3{p}09kPGgsYeIGKOkAd;*o^^!YrL2z&KE#3> zTP%3>@$TKkgYBY7jU$hu05T!dujj*cZ13;vQah~X;Lkzy6*;GOZ{UV1-GI)~`i(v> zNXGTHmkgR_U6W-kGuhayox{Xht0H{7OUH;(Q%yXxd*Y<7TlkU*dF|rYZJ$}sD&HAR z^Til-HA&9g)U)$DnC*;(H;;=S#l&%{hHj3QViu7{YU!>{T#C(|%SlMuX200qBgUBfbV=|Q?|jhRniQ1clLEaW=7d7RBKv)rG* za|gz?WP`Sw71|U3Mqg>|fs` z>JFlS9ohF3Bugh9G5|e7*83hpF=J0JI;i?D+G*}DmIEala3_Ae|L3n-CqYc39eS@{ zVHlQC+^1p3)hPAwQ$~vQxI1ZP^;PT^aQI&Uh&crB7=l|}C#{bkfn(FS^KQD@N;x~p z<$Dw6r>v<7s^XKK>@Ic`mtA-GM)MvkvU7HZ%tS?4$3zwDRm#LXrb(aVYGZF>=#FM)uJ?WBv~gGfGq|^a z2a(2YY5o(RsUW)X(J7pl)p)iyAwdL`!LVeRW%$zJBUg4OaGa%J^a?ucXFRCE-jCcH zZZRkklScPK)7ZjedgmN3e>U;55j;1#6h_UfAfL?j=IV+$Uzzm`hb`VA1psXc46x`` zytZ(bCY&WD8S}$w@!s)Y*wxt|*Z0cpnHCw7in%L{YN>^m8e>(919%;P(PG#8(5P%`nz6u?1 zLX3{D3wG|iqsS){lxd^1sy0AvXGVI>gA z`)L)P!uu2bCD|HR;4Y7*!%ADY9fyd{b(Y08=pzcG=!8-aC79bi<$ zPXnrDGR|Romp(jC*)h$R@n;R@HjRNil3L-8u#3IGWFh1Cladf!epLZ1lj*D^A+O1~ z8e82PHZrsUy0uohDi?77%l?{j>DR#B^@OpajTm%(#+&%iKRNU9pCXOC#b}2n8&P<9 ze!LFf!V1rWp2~P#$n1 zv$ilQE>b;akMyI1u+24gm`89l7a^Bwi8Fjuxn^H9efzg$#M#DXasCISKEKMm0VK8J zVY$-Uz{W-o&+rF^jI8#e&>jCL{_v_t>PP0j-f^>vqO!DQxow+C{bJ}lK%lUjEi}vx zN-yS@4xv3fo(5vBe}?qgbsU<$@;jU&JB5J4IE2)Q2t~4YCe@nMAD%2&Ks9zZIbzU{_83jysDs&&WYiE0^xp zK|c6lgi|bw-vQp-E=R5R^^Me`p-r>?^c~pxc|~%C>f_w*hLMG4n20$2>ch31rr7xbI9*X_K9|cq#q5kXMpcIY_0(&D9RS(nUsvzm zTq?ciWh27)uJw~@$R@m366kHq9i8Bir_*8%Q1By=v05ZkW}lcx9#yMFr}r*so|d35 zSHTAusEB?POIIL!$9z51f{GGJR0*_aO^V>KuATt2@PplWGeNRS>5stw4i!|b*9M>= z-9UbsU1Y=)x{=R!cFGZ+^O4)rn+}raC-Z5>d(CFCC!50x^S?Wqk{UY$RxW*(UyS~E zMmP#_rWUrflB12k)oxYfB{_06$TS7{llmCE9{ zeNe6MwA&FZReS@;y@Mz(056-#pxl>ib!#P7_}Zr@)%->u zBuIceu5(bkn9g77yd)pZIHXpFacQ+J3aKF7tm%tjTZ>YJ3P{YEJ?k98{4 znF!LiYg34X&uR4oB(hpwNbIQ`r^GS15VYcb5qleGXlOcN)0EcLsZ5fed{`~;CE)~-(cW(^?D2+t2KiyJ` z>fzbp#!BpOeD{oU49m;C&MM3!jR}#`mzz%K$J-mOuGI2d`H-Z8AFVcV8r9g_lnQBU3|wx-_1Vv^}sr+23CmXZic!?gl^u&_rs=sM}80 z^gWV^58}2KL9W&LA)7G=uddnWYnF%|U7!vA1KHrBQNnDK%d5GF3OTX|6Xj_GFB{A# zq9A8n(j;>C2BrQ8SWLpwG1#IBP?sZX zS^YJUtIh$uZ6VEbM|%{NmqCdCVYE7d*s+M+%$g4q2ZO?@SlB^(wB@CGVY#hd+}MMi z8^#8_0F2J((xM+L)8fD&p&Q``H(Yb3?VLk?aH-*do7;{*D`oeV5w`&QTYG?!TY)r< zrShh<~a-Xe@j!i+c<4XgF~2=@lM&f3ACXp3Z9TSD0XWgyt8)OGrx}}J4r6#4zmEm0 z=xDTHr54`7ai|0(uX&u->1(Pray-0V`Egzf6}9B9&B3l-GO z5*0>Oq%e51kDtd=-fjD-?f&w*+sD~;4c%@)5DPbQwtNsdS?%4ApGz5zV4w6_jiwr( z9j)htdNv*9^jBdsej&X&H32M8-Sr5Za1JM1@Lnl5UcKbk@`usm8jQoKBxh?%nn4lB zsFiXLl`NC<<7+k7_}%(=_xTcO^jc0!|2;tIQm;f_zAf*2RBh!t@9V|1Y2cYFs^WaK z&e1*`iEGile@t)h!I1`4^x=Gft9=N)$TIHbWbJ&oTi)O%z{{YO@H$itObTl=&%p%;FSQjY9HWKs9UF?IYV zu9HEIh*W`M=UB)x{yiOnS5&;fEhL1#N^Ak>o;v4zK^t~6rk@62+M0+-mE$)V zn){I_fpYxrfnO#+??esm`HAW@zu|yLznT72#capq)BG3AHyI0e_K$715JVcMn2bDC z_YgTgxye~~kx`TvPzGPP9-=#=`}dMEQJj@C9)71s7_jkaF4E8;q&f*bdxHTxk1thR;j5!hjDHeYWW}GY>)YW#DsL^B~uJ{E^>}Hphw(S4Z|z zeRo-1*?Ttu3jJ97r3in8wG%%i(W@j*z>5b?ZM05OA`Rpn@B_9}ac9^h< zofuq?`WanzhlI=B7i7%fgTv2fosf}?29Qk+$nMhVuhVwvQx=51S1C;Rd5P}bLJS>y zcTE@aL?FdEKh}2k(b_40MF|MpSmGqk6Bhl~L&DRljy;i^X@pWnQ(*Er?=lPni0-k- zsmzYpMElHmcCq3wSi7`KUIe8c5IcugIG9glc1>ODCC;mckLEp8jO079d9t+B!$Wb8 z0UpG$`)T8DlOVW`7lPX(L|y2qLgoqvBx=kQGp+GbK4v#s>Q(HaT8n;};8*&Qd5eHL zL@Q&YSL}Mg%^``F0(yv}agRv@&3zr-i(M60Uat7`fLJ>nvwN8rf=tr++smt)V(4nf zF?K%QxR>@d*ry>4t{MP+_AsRtVR+%Y=!wiFHGfP{04U{!y^0~HACnup9!SGZuEc~- z3q51Oq#v1SdQ;Y)FE3wRs$P*zX!SW5p9ksO)Z^ouCfGvq4!R8bzyO_8zUq?MrJkQ7 zV|AC6nYh=8C`K~TG6`DgNgxb3LF6nTgdC>5YCd3Bo-hYbg6x}fd-j@=xSr*r+0oo)-B0Z9aSmJswG?rMNNl}GTvYpULn48| z7GX1%8{H$)PY}NuPj5ehFln$DvUp4%a3e}T>l8f3C1sz_U^s>nj3lg_Z`zx2?mrYn z=U%8B0DR^l{~T&nCDha1TGp*o0a&}WK_ciVh_X_;^e0yy>Ny`gV(}_rtoeoLddC$w zv-jAYrTf|gmO)Ts0emALjvB%c&y$kcG^e)*4vV-e)E-E=Eg9kdg3_xFw9}j9mqw-M zJB4vY7c22`?^<$HU9CokRwgiF@z$|rDOPjR{2M)Gsg6!*p)Tba?^7!wwp=H}_0E_* z48Z5^OhOQhvZv@MGq3jvUnO@bOn1t51k!*1bqL?|~o9R*`~nZ!1aN z5PAh^xE7P<``{*Aaq)Su!G^p)Dndf9`KDIMyOsG_8p$N^HAfdLkl--Tno zP3QUUxePlnMrTv6RC7MS6+%wy`+=P{e{u90vKn~d@VT*xj4 zvuS_UPo2D&>2p*#+AtK@&EU7y=iyO9p%ukHcTELU5}h}bG~Q&E>dGdC?@nYORKk9E zWD2llOnWY*$2Ta=F{YzY@P?yU5(N)4)o+EnD+GpMJaK_P@a@OjrPEjhRUxrZ zvetWvU2?i*f3xKI5XhTH8;%hmtcTC!Zo{&E>@6{N0PYngqfGm-63zIj!9Qf1QVl7p zq>UwSE?;)&^V3J1SLugoTfEHGA@AYB$**2=p3>$$J@QNOr}a8+Y~9WDnm>M@B>QIe zv6WoT^Y~!)%ZK_RjJw_V; z!9^SUU;C}+d`uXE2z25jeEPZBu`*VIr4Mh~AM;DnnIC)F!01Mcihj)b*^g0gJi-We z%{5!74&xcs0WCm(=o83ZrK-#*HQDPBP^*()Hq*G;hUV+eGwZKDHOkGn({PH(wPbts(ovSIDQMdM;C0cNx`><=jxtr)u<-q(=#mcLYu zU0)2PmsyfkP8(Q$S!&*{M|SBN@BP%;b^fxU*uHG;QHDYi)E+{iQ`6VK@1JUWd44#$ z;)uVnlh!B(4x{E70#8642xoc1D#DXYB|e94Q<{l4xOt5|3WQ5D{^;4YTQbnluQSTx zd6p|XSJHWMpQ#3;=Gh^K#{fEJBc1m@Ph)~f?pkWe^ZOT^W%73Ep@NlJvEC#_E~)Je_51zzS1CK;bkp)ur>*H+u^4p zd}qYjk`;%qAGdDev+uGhuXYlAzmp)3Q4<~Mq=(S{Z9@If+d6aFdjF6NS- zbZ>uL4G`4u>8iS;qZF`rg0e4uGu=(IkxvTcv%raTBsf%_ovRxT{`yg&)JBL%J)X;q|}qjAlv_5Pg?9OFL(KQL}SP`!odIcFgk)oF7zjrj;?$UCs;ELU;D|~9u;a}kn4}7)bgoULwCDz2p%-{eJ{VJ-UCs8pk#-qU( zr!5}0_w3nk&Nb8UZK4B|kLps=7*uEVno1$GwPM@#QxWvI+1gVomCrhZU3)3NmEMGk{OqRv(nM< zix6UO^70R!sREDAE$KWC2@pA-3okumeMO7kgw5Ogr0sL zVuN1iKyiJ>>P-|bw;p5cp}9Ec64I3!SHb1rKA=)r@gNFxrU)V5#Nt$vMp97*_>)@5 z1|n_yD)5d{G1I)z4FMtZS{YGnvDy7bKr?l<&(7e!it>rv)Z5g2z4kX`FhCO~JKwtB z0Qt2=lCgEybpNa3GzIvcn==RIPnDgCE&{Th!t+38V#AAfB|O^Z0ZH_ms|Xc~Wg&Y` z`+KN8T=K%XvgXy6sC(Ux50oS6?+>?zaV|ZCRhAqyhEJ`)Ehpi2--`~Pr=@?$W3(sp zc?Q+J-SY*sZgCd0=on{sGivqW>Mwuuc6qCT>D{%W#r5OB0+jhqfnP#iPQra0zT{h3 zq$0M(9%c_W1kApz-%q#82q<5{5_%vS2S@cwyb3MbH-Uk-k_6{tJo1jBe1F;`8I1ZP zcy1-X7I`FtaR?>ZoV=)OQk#3X2uwB%z9tYN&~s&-4AZ)W{7h&18>?x6a_(F^S%vx^1EGb`)^-BM_%ZB z_&}fg{*~+sQh+oHv{iuWWMBH5Q-BcA0mWtDw^(tuBPMC7Qxpng$(5AWwFgC5FsjGk( z&yzY_;?fI-+coB3O*cM0dPZoXEia_iSaIR{Mi!vvZxL+Hq>K1H0VJ*~GuROl{;QCF z58ICyeh>4o7+e9U;c{EGR`tn*6HTMr&X5#Gjyi>)f5ES84u>WYrJLmF^k0G{{(4_! z(TrqtYtZ}zs0c2j{-Ql)Av$-116Lq^(hfdFSg+*vX+Tv8fJIVK{l~tYu#NfgV7ZtE+;)A5YrIj zc%BS#)x&QHnspp-o^3iDlVq3CY3|n^1Pr+{Ih;uYNfIh-Qr%1Ci@0MEYWRA;+IC47 zbih75xO~eEyCE7@%G%NHZv?wsnFK6n3**v5h?VOK0x_>B+#KzG2jjWKhE@P2*I0Wt zet4?NM1`4iWTca1knBX;o^0A3Gqw!pS8uQ>T+IRCMa!Brm&0W@ba!3JX zP{gvvTRynb;^^(Q&WCB4dklcjp3kmTyu6Wq6g|&6**7r+08ABfnL-+Jh*ZxwRi+73 zEI?l)NIqYnP3D-E+;MmLh}7F=P6j+RJtj$rwJvnv{f!p21pXK$j(wMNyddt-AoHaG zyq_o5Ww|b~ChkI}f15P>CPB=4lE}}i)@d2*1)-v8Uo(H)!*nnb`i3r#Se=P;iKp!< z3t~d-1pRPJM)ofM(unqQ9K z*qR{vw*B7`_d9O6=PEe|4doJ5zu^K&Xn$R(7Y$-jZpM z(_v~tPs1y%_0IxQL3}fctx@&^9};b`;)k0`FH{<5W5BU!+@|+fh_1+c;s0?e3hW;C z{2gQ)j^cl!C3%{J%Ru{rcANF9*Pg;)Fm`?939h=rd|#`BKCVO&pDZn-GoJn_&Wv0K z-&(LHhA7X(z;~~wS4Tx>g!!(Im__#2K6VQuZ&^O8W2-K5-uIL4_}J?N6chT!LpG^#%qM>94-dH8(ep` z!f_|@j2_Ki18>MxdWE^A44uSCQaUS)IL3}ifFB+?=LJl=G{h4Lyr7~h>?}ERA8VOA zVU6Mcogcoqz2JFWxyy?e^-ivO{@=dziKFQkp+Tc z9gbb;?JUbgF2W0}E>Fcj2d1tg>s*z2GO;*oYBoEWkuy04uI7CM^t?C1ao3J05R+O} zIlatHCp(Q^3^RR1Q_Xpy{qKqXhi4I1HJnI8xH-baE^#y>u3=Ga%-WZs*5 z4YBRnt!g@UvfAyGYKT*Ampq|8Y<`)_p#)4lUYUv~Mvm=S-O!0w3DoUQhAiHT<`RrD z?R1Sbpifo7&Znd`IlT04QXN*a_$y5AcmY;N)G9W)z#w3b_*%m+3Olup!KS-wQROE~IVGqf zE?llC{o$A8Mfn0)>0OywaVmudMlr_ zO~udnZs5bez;;6VRt-bI>(5Ru9_)r00eOB8pFNNx_#8MF1raZe=haQPIP=811wUcJh8UgQ0ZKoaIFvgyBJb0Q4a~CABpTr zfmCco;^IW;Q@Ke7F^*dte1Q*E4f`G4_Tw<{!Fc*h(gIM(nTEmfigcPIyWc*s94mZ1 zdy>OoKiGJ=$WUq6b%wZ&jcnEVaOScz5DahsNXn~rJX`*f+iO`EiZb-Wc)py>i=ZF9 zYv7=eq^}kwKt8#4WHpJ}2pD+SlOkFo7IjEc=YaLElA3~GJ{ZN{@ytBrATEY8o_k!j z(x(2+CedG`;Irxc8Y^%Z9&u8iLkf#cU0oo8xsEhw#GY~TJiTsv+CrXo|3_pFD42en zf~cSYH~>}O$Xjr`=dnqQ({3bzUU*<0a(QH$zi?iXcka1f+@_!5s|lsQnX&lTwMNUc zQryGwcRASe6Rar0m&87El5TYVA!^4oJs5BYAzE&(om4){(T!Ub2_fqAu?s@_vlnUsANNVE1 zVD?s`FAgaP9jrl`&0~@Xq}_7gdp6=&TEUy~G8yWqRJsOg7_w0&pUHBx8!C3-_JsP% zNaCtxmPxO##t_I@c}Mm$(@phEH{*zOBAp{AF~(`7Mq*s#A?=J_O*sekz}gj#K}^vK&qC2F z$IcZsN7~;Scnf^ThGPH zKYHm3?mfOs>aNuiw)Nm*K*)Yf$^D73n~lrdha10El_#%=OuhH+@hw^<|LCNzyB)E> z5lRl!Pf1M4?MJ)QBH+U6p+E9z0Sp)-i-ae0=13X zz-FgKHOq~WMcS)S&T*{pq9HNQ=@Q&6vjt-gsM6g)pmt2o9LQ2hBD>2y6Y+H#udkk6 zwHFijP()}@L|Ktc4<9D}i%W|~W=##(L1a^4L*!`DDc$d_-;2KaSe2UBDd zEVKr8Cy!-M7I2YNxb?k*ezSzC3U7IIy6ELBg=5$U&dY#X?HHR*#tt_)udTxF`J_zy zF)=U?Hy(lz(tIF*uOWC=-3{tu?<(TL*+uup0;PB`>8Nv?Sw~Wge15!BlimpsQ%XLB z$=Am2k`O#D^4Q|ANYz8K(u>ItDsn{Xp7TI{b`{xYZndHMRdu1=RmDmDgJ=fwB(A-u zevs1CHGbq2RM`PxFKBSoxJ2@5p>xjB`gVNn?)<4 zGDA`lF)FdPxWO1muY6vE`oun^o6SVFO_9>SusL%8A}CLXD8Rxjh5Ev zwI-atBvYN{Y%Y^;<>U*HDQ#w1YRQiagnmD2rS`m%T^M(QK099$4o;i)(LtcyTB^@K z*nSBJUdPuceyk20Ot(ls9umL>TBUllQ*Eo-AIz%O7R(_QW7}TG>`M&y~=;cGB>y$Vlk5pDABsx?yq5g zEau|)H~ECx2gV}o)3E4_^_4bVAyZm4ivJchyfuPZVTI&|C5UC*%4GwHJ^u(RZjkQA zE7)%w=$Agvy`~@jA3}%!|NJ++-L|K4skrqD;(7E7k9X&HWB;M>?_BrbfOVG;?~}rQ zxXau8i(QW+=+$|Gh~tHax!672bHd{ofH~mWU9cBfedG(U>#NP-OujqO;J9^Qp~b+a zYxi=OijE%UY?D_QAfdbNEy(6`#XLlLFSKAoN^P}wCkUJ-3RgcXFb{9$jB}QWf!|hh z8`dZRT*NW7Bt0Mr&OZsWRL_$DJ5Fpe4vUp$GYrEXqf%Tql|{wD!43fR#GYBF^m^@J z-?>TYRE=wqAgS8Fs?iM3GfUrW2|zw+5WJ)|y1#yGwf^k^uq3?WCspT{*`GDdPhX&Ia7ai}YBusU)vpQG(hL%Bx94l&v}KQt zu%tz@9!wEmVWK3qf5nUd9LdxJrNPW1kPRcQ z1;>wyZant(g>7GxbUC@%q|v_~mHpvK0JIXf)}N|n1}Zx2YOCXT3#fj{SHiY4+SWej z+Z#hu)t9yo*DPQK!{xf)k=S*6Ul#T1-=lB1o&myd=c0@sHMY~MvF6FJLZ$#gZbJ=V zam(EHr~?}w73q7 zcYErc{)++f)sm^m3qX@Tz^+*A(=HL)L!q*!<=fToe}9P;kQ~|{YY}xpCjrMuFKXk^ zk-xm6n*h4rCSL`}=q-3YGTw5>GNp|xRpR*Z&qpsb$ST-6V$2^0_FwcI9FRzjR%;pL zUO~CC8lwPe$~R!%u8kG)3=nD%?m|?_hpYA(RXq7kuy~pZ9ZGwJqDWi1I9;%S#IWn- zmCxY+@m;e^lDgfDqc^UU9-K)kRp6yTvunM{hwH(0Jy!S)B%*{_!+l=I?dYo5Dt{fi zh>B)Y57|CC;5>77dAa}FJmUwTFD+~^Ffyn!lI?a_!+H-a3)}?V&@yzZm)_5^?0)H( z%QNrTmZ^yUc*3Km1Xw&)plesB=4vsn!mZOZK|2<55IJ|UbneKX31~#TB!FI*O9+0d zUY|rX*kZ|eEVt=n+IB{RyIQYK8O6mUIUf+!;L_|X6&Wqa-qCn4qPAu1+vQswk!xHrH=1z7E=jSN)TTTzodVX-~U$-8Hf6?$qX zt$bJh-sTuv4ab#zneW~u_cc?}z%ze9W6N3~OM&nY`Hq;Y`%+@> zm#*{5+2)dTMV(i0>O$SpqOZ$1_8fywvpGpf`f=YJgq>`nb?P8~kiCUD=}h%t3`**Q zCst;FEMfMIJq(TKD!JIZJc-84n{^Ouk$Y7iwh~evJ>7GT)M=WIgH(G~K9ad~AMa1& z_q>fk9B}rY^Q4LKvseCHidN`#_7|%*R3i8?h3A5g&aM$rzY=$!F@7O(#7sANR)a=y zUa2<<2kTpQf0kx}E?nG-10=^1$11On>8VOW1JLVD=R1NZ!e%M(gZWiu`(NqRYQHe| zWd##BC2HL6)cKT+uDRePc6x?hoQ=l?`e{U5Ton1EwNRpUo*N?}=3u`1wYCkO4=vJy zN`y>+>_+jbkJpd((I#OyKd7@0yg8Tq8r=d^0`?>@vvASI1bl!(GtIXoxslvi0Rs#>jcwBPP9?_Xzwlj9A~)#pW}7&4KEgO40IdyLZFVn z(LpMGiw63I{f)U-{#KfsK9o~j|5FZU!$dV5XM8^_098GEte{-lN^B~^|QX>PrZx` z)#SEg`3kCtm)u8QM=Pgx z6%$a!i_W^<<(I1^Yq2A@bW`DD=2`%qa@u@@>gA9YE_z$WdzB@1` zpPQ)qA>j3k2z7ERI!$b2k8Q*0Ooxt`$7)*mGWS!763+b;AJh(1hP~0@SLZt&-cMbt z^D^U|r438nUQ?xMjT_tV{d1bYv1iXVv?sdMuLL^pwa6Vx*k6v7=vXh~!o}Jr@G((5 z{BAEA^(D=e?un!8VO$AVyB_8WzBBKtjAXamhg#mVcn%Te8UbwGxHwfwHP4MM4ikY0 z4jj21sebhE(2KeKCf z($45W9z>|L8fj}xq?@gD`IWJ&((&DX)BlP?N$CFDp#)xiD*|cKu*Ru6@#IdH922SI zwVV#duZO$P^U~&}PmUFvH@a^xRMpHttZQlY__AqUbitBj32q+%%iwvAQ*>)>_&Yv! zO;*As)zQ%8n*gJ%s5!Z*fcwe_;jA9rO7?`J#EwVj#?%z}BX_4E zR5+yj9NqOkpni>>+8jgI&7s@_r^8Frk1v0ju$OoKq_^`Fs?nb|e8Qxg6jUvo%_niM z(M_V!OyGz4?QJi)h=@b7BnT)~J^;U2ApQrGKnG7dXT150*b}Ecl=Mf`-KLZMyPO+y z3|sf6(C_%oCh-#MRifU_vwf?)q}N$+4|1rVbMnlpCVm>wdiv8OB9w65OzSFZfS#~R#AZ`R>I93#U9)VXCA5>#+$o3KbH^5a@Cq~ z2$YLA{iJOy-*KPQQXm>HBl=rwMBFmm9fpexXBHgmO!Apt=e3)$Ab1YsQAs7CB*|}Z z;kM?3(}k4R7KduO)Dfjt)4J-sB{$Dn?#C|NC(WCGPRXxmxbH9uCMzQnje2rMc1uQo zGIZD9$dtnET!PsJa@CbjGdbhE8?n-!Tjykro@mP9L3E&ZbT$nCBOujae&zl14TXvn#;T@>WF7gLTYh!dcPkePr#(Z6y??blg-qejD{x0(xx#FO5{@` zK(^&FRJ$%%qpy28^B5&9zH850X#A`^M(No9%u$Blju)pGun0>$?V>*x@zQ%Yt)8FfK7^qR-5@NiNC zvGVa_7xeBN+#eTbiDB)Rjq8fRPe-7uisZ!nf9nJiuJ#q>{}fPV(oE9UaY6;;XLxl> z2A+qd8N_4dSLf33Y6j0XEkN0DNw=ziixEaPSvhA#w138Ej05YnelIKT(LOp?D&)i! zops2G=15EG#o=jQZr2!4If;W2&Ie^fj&6M)mCGrbIvyK&l@sX6VqU3t@3@^@=B*$7 zt$QzoL3iw=zmD1ucn*?*pojLF-@qDka#Km~480S6GFpBwQSz+(nt+86>2wanT=s^z zMBMy2+;Q@2bl5F$bw&`r#IAQN`sAJNmwefGEDY?{@7t4RrUh696&naj>o*>=Aw{=b zSX;{2J&Ya9$Y@`D!D>D#;ReigN@aY?P1*m}sSTJaBn|XydG=s6@r1v9M<$|YAgpXso z_Tcb;6w~W}s1c+RBr$#A~k>e$zAo86`oDG|FnPTf=Mtq31 zIblry;Dc84?>>04Ge7E3BXQVz&11#yYze$b&vGf*X&4Ng;Zt{%p?Aaj5u{~VpLvpDW-S~%CSeFoVNGrEo~p2y}zmn zgDN%8NFsnH^sR;bbiE|)crKjYo8$ru4Nq}!wplj4UCKgSN^HjusXxFq&16fnSTo7} zD~mq$Y=3>HySVs7-}IaBywph|lDgNPG;vG`XRGMH{0-enDYia==oM5n!NA4MZYg|t z;&+jesk7v!k4FY-5&s-dQlh+fYr#@flRBfU@oXcJv@`95lgYD+RsWo<`Us0*<<^@% z$H*E_RD_lm9dckQgX?tF3EVLjiIcEfP4@vSfu)5(g&N$8(^00B&h;tF!+Ucqk&Db} z&TeFHkw2-$fIA)q%GAN5xj1c)V!y{O`(|0{>Nw0W@zckYv^bq7zqD&-hrZqk79{p# zi&Lf;BBIrX+Uc*Xy=x)Rn@_y+^Cjv1@*oh_c{d`^{%O{zg7V)4YYX|Zkx71==JTxb zy|(Nt5i#$D_RD zp0`EcY?Y*8oTGF^_V7F&Y{=|XNRo+2R4V${CQ>h#Y#ZhBGVann~P{ z{nPeQ+Xq(Ls#HGC^#Uf=3Lkn--bFkKctv3(UfXfR#E_`kK0ohW_BNf%VHR(9`tV)O zVt?C)#%QHtaZtSgcB#+M;Fh3u-~ASx{;7p8Lf&J=Ay{H=Sghq6lN-O1WG8H8s4Yw5 zczoo$6|O(Kd6+|lY3750K>7!o?9n?|Tbxnk&BVd-%+;=gYlSrs;iHOZEka)kr#M1D zxE;0v-w?H=oQj|~;Iq8#C_()H`p|gq7wdIuh2mcoJ)rK{(ht5d=!p3L95 zW3oZh0TfaV7mM8{Hy1~yf;4Y0dV+&0OpSXB)K-1Txpi*G5YK#gOJMR5zfO%DzxXYRH2T)| z#qF1vlD>1e1Thdf8^5v$+uc_VCtrVlWz9RgPy2{j_63`%lfi1pW@*?8wk2+PnWXe7 z`yD#pk+FZ$1Sg55L?Zqf74mZz4Be%hr>YuM_rfrSBJ)Af{C8!Gq^)TA*G%p(wXgCI zeYf>H+`dQG2(0uyWy0x&>^W`6foOSio-KWWjdH%(-L{8Oi&a6R$Kv&BpLtC;$&bII zSL*g$T?CU0e?KQG$IEXm8U6QfolEW{pDg{WTKp?Vv<9)0AtlYH+2`pg-^y8>SZ*0n zEq6pT^Erwtvw$F62NUbpwhdQE*LL`3Z7qGV5a{K_*-?z}IuU7295CF8d=TLs6xQ(6 znVHM89yAs=sSUJ(a3e&$~Q3 zx^&u+S(l!}{fq^z^lkKv*SEzvu6LSa4O0+N!@fQo)y|kr3GM|S-UBxB&8hOlu`m22 z<5r5#PF6&}?R50DH3HjNptvM%r3{&z+3rp^^)su9``BCLpjkCcse@oWX8yw_ZKfx` zz;j{BaY7}RT_5dvw9IU_A5x^dXR=(o#)KaHmg}2zC6%0HNNXkSsX$7b;ce^r}v2f{mH}ce zl|kQUKe-ho^pw4{d@B=ik7HelOM5cT&6y(_z}kF8@;E%SGOX;l|K?<`iUKW-^1~&4 zaJ9?=Tbt$;HQ+bK`?!ndO_ePiXW7#PZH`A@Rkep(4sW3Ko~~Qlm%p$Ck~;lByeNq! zUgBp0b0P7bFHNfOoCr)kT3F)#f=;~`Zk?7*>}5n%&2#&D1H4Iy^Qus{-&xnhGgB>< zWCqSKiWv+?#>^gB3$8PgmexFJw$dCp-X|v0)tC6EHo4?YhHj-;zkbK}l-^#j8~k1b z_Q9Lb>JT_`$40M>UOq%gHnzCM>UHys!zi{CcV67JIGWOuVO2F+U;0fZa8K7+OH#ll zgxmUeBAC*sC7WjdetA@x!Z9o!{p34%uIp(sJ!u&J(-*u>-5dRoDv_*7yt*~fkuh9- z$*r%?!h0ibMyO=SxD-U!i~IwmYhQ@}(^(?ItHZ-4cphfLhY;6G&(m|Z1$S4ECwr3> zrR6Kwz+S{~kUUSwHKACEe1#;&b6EMVcyyPmZMV_WVw1SK^Sh)%OZ*S@yu<~DCPFU5 z8m{=Lo(b~O?VwA{vU)E*f|R8xuo0NWl-@e7eo)kUX@v~)W*Y3PqflvdEPRx6G1nAC zaZEZyJwnQj^rjKx@11FX6wPR##xEGpOL9BlLmEhPX3Lw`7mqdKt1o&b;iyqboaEOR z{uAhsol^2KdBwi7w9d-DEY5f)GlGXkzuvShXyR94fpq+jS8DpBHKGsS0VNpwqD)R# z^D=rFvE14pQvB38?MqtvsC@-{Rp;`ScI~sqM8DQw0mOGe#C2}0&cwN8kPl-(@D<4f zDy|?bXQl)h!g2HP5(ynnAH>LO>I&2_YF7UC*jhMNgx+@d z*~wLIP*5l0b4vyJ{}ir^T&j6=^uo!~mI`}p!p+tn+Y>N|38A@Gys^Gl(CE&ebKvI9o>Htuuk z$r1CNVj6cN_+w<%Tf}okJPj* zJMYFTw^L{Mt1&M~&qEs1fkXD8d`Cp+9$m4?0_R_VR_*^jtCr-+I;^gJa^3NxABYtt zc^Y8La9i089p7Z%SEy0nk(w=W|7&Lp@`AsSTNt`%-9tWil_}sfu@`b8YeU=?EA$iZ zX#g=+ds`kPWfJkpjy*Fvg-|FAD=@nTqU7IY%~@IQvG_EGH{wpG_#*gK{4diMg#ceL zm->}ZxwDkyJ+fo_r(gDqPfv5U(h9P@wu>@+{qBsv{j7*no<>1c`o(dc#BYb6^D~x- z{aOOhn(#8GIh|53dP4F#8x5D*5jnx!Vh7SnhOsl!>RyWU<#7*LQwPFvP)K=(F4Gx1lGE&Sp#P z4>LCB;t9f~DP4i9^lZ8VKzH2zj+4Z-4mCbnzo%1@YCdfvb)k9fZuA%@d;m7+zL@-_ zszvhM)}>e358WX=7BX;8yOkjHb67NIrP^C&Vb@z0E*fFkM?)J6ABbj7Es*|VJQ~~B z5!-uNNh{oe*%IGny{`y%5&FO?;lqZFdf9RorP$!6nsaN;f%KZ$(59M-I14#i@zo%n zEXti~e(5`-n^k8I@L#v781WwTKa=QAj3aRIR~;eT>u6`38ZXno^OLymiMP+Q%o0Mx z9mHL`PDL2Sw}JFyj$OS{S`+J{MW8zgV84JrkIKyiEJ8d6ix>A)u^CAg>D>&jyX{1H zVl3BBX3X^u;xc}aboB|cpYZ&jzZ&@@0QaT~-oeQJt!86n@Lvdzi*x-*hyw+#b+#$A z8r_%3#j@}OOD%Fx?Y#g0*|mng)(^ba`j8tcYcma52I)kUHpUXO@geCwYGiz`F diff --git a/feature/settings/.gitignore b/feature/interests/api/.gitignore similarity index 100% rename from feature/settings/.gitignore rename to feature/interests/api/.gitignore diff --git a/feature/interests/build.gradle.kts b/feature/interests/api/build.gradle.kts similarity index 98% rename from feature/interests/build.gradle.kts rename to feature/interests/api/build.gradle.kts index 2b84b135f..a3627fac6 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/api/build.gradle.kts @@ -20,7 +20,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library.jacoco) } android { - namespace = "com.google.samples.apps.nowinandroid.feature.interests" + namespace = "com.google.samples.apps.nowinandroid.feature.interests.api" } dependencies { diff --git a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt similarity index 93% rename from feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt rename to feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt index a441f5a9d..2286dadb2 100644 --- a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt @@ -25,13 +25,13 @@ import androidx.compose.ui.test.onAllNodesWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription 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.api.InterestsScreen +import com.google.samples.apps.nowinandroid.feature.interests.api.InterestsUiState 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 +import com.google.samples.apps.nowinandroid.feature.interests.api.R as InterestsR /** * UI test for checking the correct behaviour of the Interests screen; @@ -51,8 +51,8 @@ class InterestsScreenTest { @Before fun setup() { composeTestRule.activity.apply { - interestsLoading = getString(InterestsR.string.feature_interests_loading) - interestsEmptyHeader = getString(InterestsR.string.feature_interests_empty_header) + interestsLoading = getString(InterestsR.string.feature_interests_api_loading) + interestsEmptyHeader = getString(InterestsR.string.feature_interests_api_empty_header) interestsTopicCardFollowButton = getString(CoreUiR.string.core_ui_interests_card_follow_button_content_desc) interestsTopicCardUnfollowButton = diff --git a/feature/interests/src/main/AndroidManifest.xml b/feature/interests/api/src/main/AndroidManifest.xml similarity index 100% rename from feature/interests/src/main/AndroidManifest.xml rename to feature/interests/api/src/main/AndroidManifest.xml diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt similarity index 96% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt rename to feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt index 9b18ac89b..8f50ae638 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.feature.interests.api import androidx.compose.foundation.layout.Column import androidx.compose.material3.Text @@ -70,7 +70,7 @@ internal fun InterestsScreen( when (uiState) { InterestsUiState.Loading -> NiaLoadingWheel( - contentDesc = stringResource(id = R.string.feature_interests_loading), + contentDesc = stringResource(id = R.string.feature_interests_api_loading), ) is InterestsUiState.Interests -> @@ -90,7 +90,7 @@ internal fun InterestsScreen( @Composable private fun InterestsEmptyScreen() { - Text(text = stringResource(id = R.string.feature_interests_empty_header)) + Text(text = stringResource(id = R.string.feature_interests_api_empty_header)) } @DevicePreviews diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt similarity index 94% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt rename to feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt index 67cc8884f..5c7b37c32 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.feature.interests.api import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel @@ -24,7 +24,7 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase import com.google.samples.apps.nowinandroid.core.domain.TopicSortField import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic -import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt similarity index 98% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt rename to feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt index 133c2bedd..5685ec6ab 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.feature.interests.api import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.Box diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt similarity index 93% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt rename to feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt index d83e4a9b2..f509ba6b8 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests.navigation +package com.google.samples.apps.nowinandroid.feature.interests.api.navigation import androidx.navigation.NavController import androidx.navigation.NavOptions diff --git a/feature/interests/src/main/res/values/strings.xml b/feature/interests/api/src/main/res/values/strings.xml similarity index 75% rename from feature/interests/src/main/res/values/strings.xml rename to feature/interests/api/src/main/res/values/strings.xml index 8d5322859..c76bd4915 100644 --- a/feature/interests/src/main/res/values/strings.xml +++ b/feature/interests/api/src/main/res/values/strings.xml @@ -15,7 +15,7 @@ limitations under the License. --> - Interests - Loading data - "No available data" + Interests + Loading data + "No available data" diff --git a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt similarity index 99% rename from feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt rename to feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt index cdf21f325..55a1ded1a 100644 --- a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.interests +package com.google.samples.apps.nowinandroid.interests.api import androidx.lifecycle.SavedStateHandle import androidx.navigation.testing.invoke diff --git a/feature/topic/.gitignore b/feature/interests/impl/.gitignore similarity index 100% rename from feature/topic/.gitignore rename to feature/interests/impl/.gitignore diff --git a/feature/interests/impl/build.gradle.kts b/feature/interests/impl/build.gradle.kts new file mode 100644 index 000000000..a83efdc4a --- /dev/null +++ b/feature/interests/impl/build.gradle.kts @@ -0,0 +1,24 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) +} +android { + namespace = "com.google.samples.apps.nowinandroid.feature.interests.impl" +} \ No newline at end of file diff --git a/feature/search/api/.gitignore b/feature/search/api/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/search/api/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/search/build.gradle.kts b/feature/search/api/build.gradle.kts similarity index 99% rename from feature/search/build.gradle.kts rename to feature/search/api/build.gradle.kts index 5bb659c35..741a87fff 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/api/build.gradle.kts @@ -21,7 +21,7 @@ plugins { } android { - namespace = "com.google.samples.apps.nowinandroid.feature.search" + namespace = "com.google.samples.apps.nowinandroid.feature.search.api" } dependencies { diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt similarity index 99% rename from feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt rename to feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt index a9e2fa98f..a86de6ab3 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import androidx.activity.ComponentActivity import androidx.compose.ui.test.assertCountEquals diff --git a/feature/search/src/main/AndroidManifest.xml b/feature/search/api/src/main/AndroidManifest.xml similarity index 100% rename from feature/search/src/main/AndroidManifest.xml rename to feature/search/api/src/main/AndroidManifest.xml diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt similarity index 93% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt index 8aa5bb3b8..3e5d704a5 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import com.google.samples.apps.nowinandroid.core.data.model.RecentSearchQuery diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt similarity index 96% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt index aaf7dba7d..27b4003bf 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt similarity index 97% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt index b617f98a9..28c7c3bfc 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.Orientation @@ -93,7 +93,7 @@ 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.search.R as searchR +import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR @Composable internal fun SearchRoute( @@ -211,7 +211,7 @@ fun EmptySearchResultBody( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(horizontal = 48.dp), ) { - val message = stringResource(id = searchR.string.feature_search_result_not_found, searchQuery) + val message = stringResource(id = searchR.string.feature_search_api_result_not_found, searchQuery) val start = message.indexOf(searchQuery) Text( text = AnnotatedString( @@ -229,7 +229,7 @@ fun EmptySearchResultBody( modifier = Modifier.padding(vertical = 24.dp), ) val tryAnotherSearchString = buildAnnotatedString { - append(stringResource(id = searchR.string.feature_search_try_another_search)) + append(stringResource(id = searchR.string.feature_search_api_try_another_search)) append(" ") withLink( LinkAnnotation.Clickable( @@ -245,12 +245,12 @@ fun EmptySearchResultBody( fontWeight = FontWeight.Bold, ), ) { - append(stringResource(id = searchR.string.feature_search_interests)) + append(stringResource(id = searchR.string.feature_search_api_interests)) } } append(" ") - append(stringResource(id = searchR.string.feature_search_to_browse_topics)) + append(stringResource(id = searchR.string.feature_search_api_to_browse_topics)) } Text( text = tryAnotherSearchString, @@ -273,7 +273,7 @@ private fun SearchNotReadyBody() { modifier = Modifier.padding(horizontal = 48.dp), ) { Text( - text = stringResource(id = searchR.string.feature_search_not_ready), + text = stringResource(id = searchR.string.feature_search_api_not_ready), style = MaterialTheme.typography.bodyLarge, textAlign = TextAlign.Center, modifier = Modifier.padding(vertical = 24.dp), @@ -314,7 +314,7 @@ private fun SearchResultBody( Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.feature_search_topics)) + append(stringResource(id = searchR.string.feature_search_api_topics)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -350,7 +350,7 @@ private fun SearchResultBody( Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.feature_search_updates)) + append(stringResource(id = searchR.string.feature_search_api_updates)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -402,7 +402,7 @@ private fun RecentSearchesBody( Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.feature_search_recent_searches)) + append(stringResource(id = searchR.string.feature_search_api_recent_searches)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -417,7 +417,7 @@ private fun RecentSearchesBody( Icon( imageVector = NiaIcons.Close, contentDescription = stringResource( - id = searchR.string.feature_search_clear_recent_searches_content_desc, + id = searchR.string.feature_search_api_clear_recent_searches_content_desc, ), tint = MaterialTheme.colorScheme.onSurface, ) @@ -491,7 +491,7 @@ private fun SearchTextField( Icon( imageVector = NiaIcons.Search, contentDescription = stringResource( - id = searchR.string.feature_search_title, + id = searchR.string.feature_search_api_title, ), tint = MaterialTheme.colorScheme.onSurface, ) @@ -506,7 +506,7 @@ private fun SearchTextField( Icon( imageVector = NiaIcons.Close, contentDescription = stringResource( - id = searchR.string.feature_search_clear_search_text_content_desc, + id = searchR.string.feature_search_api_clear_search_text_content_desc, ), tint = MaterialTheme.colorScheme.onSurface, ) diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt similarity index 87% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt index 257d8b68e..cd31ad8ad 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Android Open Source Project + * Copyright 2022 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. @@ -16,12 +16,13 @@ @file:Suppress("ktlint:standard:max-line-length") -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.newsResources import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.topics +import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.Success /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) @@ -29,7 +30,7 @@ import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.topics */ class SearchUiStatePreviewParameterProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( - SearchResultUiState.Success( + Success( topics = topics.mapIndexed { i, topic -> FollowableTopic(topic = topic, isFollowed = i % 2 == 0) }, diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt similarity index 99% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt index 36947880e..ed1ea1171 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search +package com.google.samples.apps.nowinandroid.feature.search.api import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt similarity index 86% rename from feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt rename to feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt index 3b16e5f71..b45956b29 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.navigation +package com.google.samples.apps.nowinandroid.feature.search.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.search.SearchRoute +import com.google.samples.apps.nowinandroid.feature.search.api.SearchRoute import kotlinx.serialization.Serializable @Serializable data object SearchRoute @@ -36,7 +36,7 @@ fun NavGraphBuilder.searchScreen( // TODO: Handle back stack for each top-level destination. At the moment each top-level // destination may have own search screen's back stack. composable { - SearchRoute( + com.google.samples.apps.nowinandroid.feature.search.api.SearchRoute( onBackClick = onBackClick, onInterestsClick = onInterestsClick, onTopicClick = onTopicClick, diff --git a/feature/search/api/src/main/res/values/strings.xml b/feature/search/api/src/main/res/values/strings.xml new file mode 100644 index 000000000..d2d218493 --- /dev/null +++ b/feature/search/api/src/main/res/values/strings.xml @@ -0,0 +1,29 @@ + + + + Search + Clear search text + Sorry, there is no content found for your search \"%1$s\" + Sorry, we are still processing the search index. Please come back later + Try another search or explorer + Interests + to browse topics + Topics + Updates + Recent searches + Clear searches + diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt similarity index 93% rename from feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt rename to feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt index 1b866cec2..7b719b1cc 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Android Open Source Project + * Copyright 2022 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.search +package com.google.samples.apps.nowinandroid.feature.search.api import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.NoOpAnalyticsHelper @@ -27,10 +27,10 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestSearchCo import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUiState.Success -import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery -import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading -import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady +import com.google.samples.apps.nowinandroid.feature.search.api.RecentSearchQueriesUiState.Success +import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.EmptyQuery +import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.Loading +import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.SearchNotReady import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch diff --git a/feature/search/impl/.gitignore b/feature/search/impl/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/search/impl/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/search/impl/build.gradle.kts b/feature/search/impl/build.gradle.kts new file mode 100644 index 000000000..abb0feacd --- /dev/null +++ b/feature/search/impl/build.gradle.kts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.feature.search.impl" +} \ No newline at end of file diff --git a/feature/search/src/main/res/values/strings.xml b/feature/search/src/main/res/values/strings.xml deleted file mode 100644 index e11576747..000000000 --- a/feature/search/src/main/res/values/strings.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - Search - Clear search text - Sorry, there is no content found for your search \"%1$s\" - Sorry, we are still processing the search index. Please come back later - Try another search or explorer - Interests - to browse topics - Topics - Updates - Recent searches - Clear searches - diff --git a/feature/settings/api/.gitignore b/feature/settings/api/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/settings/api/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/settings/build.gradle.kts b/feature/settings/api/build.gradle.kts similarity index 98% rename from feature/settings/build.gradle.kts rename to feature/settings/api/build.gradle.kts index 15d65204d..d29e024b2 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/api/build.gradle.kts @@ -21,7 +21,7 @@ plugins { } android { - namespace = "com.google.samples.apps.nowinandroid.feature.settings" + namespace = "com.google.samples.apps.nowinandroid.feature.settings.api" } dependencies { diff --git a/feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt b/feature/settings/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialogTest.kt similarity index 96% rename from feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt rename to feature/settings/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialogTest.kt index 790b5964d..c92894ee0 100644 --- a/feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt +++ b/feature/settings/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialogTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.settings +package com.google.samples.apps.nowinandroid.feature.settings.api import androidx.activity.ComponentActivity import androidx.compose.ui.test.assertIsSelected @@ -23,8 +23,8 @@ import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.ANDROID import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.DEFAULT -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Loading +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Success import org.junit.Rule import org.junit.Test diff --git a/feature/settings/api/src/main/AndroidManifest.xml b/feature/settings/api/src/main/AndroidManifest.xml new file mode 100644 index 000000000..00b4c35bd --- /dev/null +++ b/feature/settings/api/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt b/feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialog.kt similarity index 97% rename from feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt rename to feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialog.kt index ad7f30f43..0d544598e 100644 --- a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt +++ b/feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsDialog.kt @@ -16,7 +16,7 @@ @file:Suppress("ktlint:standard:max-line-length") -package com.google.samples.apps.nowinandroid.feature.settings +package com.google.samples.apps.nowinandroid.feature.settings.api import android.content.Intent import androidx.compose.animation.AnimatedVisibility @@ -66,9 +66,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.ANDROID import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.DEFAULT import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent -import com.google.samples.apps.nowinandroid.feature.settings.R.string -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success +import com.google.samples.apps.nowinandroid.feature.settings.api.R.string +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Loading +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Success @Composable fun SettingsDialog( diff --git a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt b/feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModel.kt similarity index 92% rename from feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt rename to feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModel.kt index 123c84d1c..f34c72f0c 100644 --- a/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt +++ b/feature/settings/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModel.kt @@ -14,15 +14,15 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.settings +package com.google.samples.apps.nowinandroid.feature.settings.api import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Loading +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed import kotlinx.coroutines.flow.StateFlow diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/api/src/main/res/values/strings.xml similarity index 100% rename from feature/settings/src/main/res/values/strings.xml rename to feature/settings/api/src/main/res/values/strings.xml diff --git a/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModelTest.kt similarity index 90% rename from feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt rename to feature/settings/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModelTest.kt index f977612a1..31b73df5b 100644 --- a/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt +++ b/feature/settings/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/api/SettingsViewModelTest.kt @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.settings +package com.google.samples.apps.nowinandroid.feature.settings.api import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.ANDROID import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading -import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Loading +import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsUiState.Success import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/settings/src/main/AndroidManifest.xml deleted file mode 100644 index 1fd9557d1..000000000 --- a/feature/settings/src/main/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - diff --git a/feature/topic/api/.gitignore b/feature/topic/api/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/topic/api/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/topic/build.gradle.kts b/feature/topic/api/build.gradle.kts similarity index 99% rename from feature/topic/build.gradle.kts rename to feature/topic/api/build.gradle.kts index bd8b59ec8..00678fa35 100644 --- a/feature/topic/build.gradle.kts +++ b/feature/topic/api/build.gradle.kts @@ -21,7 +21,7 @@ plugins { } android { - namespace = "com.google.samples.apps.nowinandroid.feature.topic" + namespace = "com.google.samples.apps.nowinandroid.feature.topic.api" } dependencies { diff --git a/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt b/feature/topic/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreenTest.kt similarity index 97% rename from feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt rename to feature/topic/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreenTest.kt index 2b87baf9e..5c80f67c3 100644 --- a/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt +++ b/feature/topic/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic +package com.google.samples.apps.nowinandroid.feature.topic.api import androidx.activity.ComponentActivity import androidx.compose.ui.test.hasScrollToNodeAction @@ -45,7 +45,7 @@ class TopicScreenTest { @Before fun setup() { composeTestRule.activity.apply { - topicLoading = getString(R.string.feature_topic_loading) + topicLoading = getString(R.string.feature_topic_api_loading) } } diff --git a/feature/topic/src/main/AndroidManifest.xml b/feature/topic/api/src/main/AndroidManifest.xml similarity index 100% rename from feature/topic/src/main/AndroidManifest.xml rename to feature/topic/api/src/main/AndroidManifest.xml diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicDetailPlaceholder.kt similarity index 95% rename from feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt rename to feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicDetailPlaceholder.kt index 627fb8fb3..2519fa78a 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicDetailPlaceholder.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic +package com.google.samples.apps.nowinandroid.feature.topic.api import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -50,12 +50,12 @@ fun TopicDetailPlaceholder(modifier: Modifier = Modifier) { ), ) { Icon( - painter = painterResource(id = R.drawable.feature_topic_ic_topic_placeholder), + painter = painterResource(id = R.drawable.feature_topic_api_ic_topic_placeholder), contentDescription = null, tint = MaterialTheme.colorScheme.primary, ) Text( - text = stringResource(id = R.string.feature_topic_select_an_interest), + text = stringResource(id = R.string.feature_topic_api_select_an_interest), style = MaterialTheme.typography.titleLarge, ) } diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreen.kt similarity index 98% rename from feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt rename to feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreen.kt index 8ef0d786d..4f2d490c9 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic +package com.google.samples.apps.nowinandroid.feature.topic.api import androidx.annotation.VisibleForTesting import androidx.compose.foundation.gestures.Orientation @@ -68,7 +68,7 @@ import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.userNewsResourceCardItems -import com.google.samples.apps.nowinandroid.feature.topic.R.string +import com.google.samples.apps.nowinandroid.feature.topic.api.R.string @Composable fun TopicScreen( @@ -124,7 +124,7 @@ internal fun TopicScreen( TopicUiState.Loading -> item { NiaLoadingWheel( modifier = modifier, - contentDesc = stringResource(id = string.feature_topic_loading), + contentDesc = stringResource(id = string.feature_topic_api_loading), ) } diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModel.kt similarity index 98% rename from feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt rename to feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModel.kt index 8865da463..4a8b107a6 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic +package com.google.samples.apps.nowinandroid.feature.topic.api import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt similarity index 88% rename from feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt rename to feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt index 69059c81d..315389908 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic.navigation +package com.google.samples.apps.nowinandroid.feature.topic.api.navigation import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController @@ -22,8 +22,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.google.samples.apps.nowinandroid.feature.topic.TopicScreen -import com.google.samples.apps.nowinandroid.feature.topic.TopicViewModel +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel import kotlinx.serialization.Serializable @Serializable data class TopicRoute(val id: String) diff --git a/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml b/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml similarity index 75% rename from feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml rename to feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml index 0518401da..49975a008 100644 --- a/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml +++ b/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml @@ -1,19 +1,19 @@ + ~ 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. + ~ You may obtain a copy of the License at + ~ + ~ https://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> - + \ No newline at end of file diff --git a/feature/topic/src/main/res/values/strings.xml b/feature/topic/api/src/main/res/values/strings.xml similarity index 82% rename from feature/topic/src/main/res/values/strings.xml rename to feature/topic/api/src/main/res/values/strings.xml index fe4a6dc29..25f8a7126 100644 --- a/feature/topic/src/main/res/values/strings.xml +++ b/feature/topic/api/src/main/res/values/strings.xml @@ -15,6 +15,6 @@ limitations under the License. --> - Loading topic - Select an Interest + Loading topic + Select an Interest diff --git a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModelTest.kt similarity index 99% rename from feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt rename to feature/topic/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModelTest.kt index 58242110d..152e582d6 100644 --- a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.topic +package com.google.samples.apps.nowinandroid.feature.topic.api import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic diff --git a/feature/topic/impl/.gitignore b/feature/topic/impl/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/topic/impl/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/topic/impl/build.gradle.kts b/feature/topic/impl/build.gradle.kts new file mode 100644 index 000000000..528ec4e4a --- /dev/null +++ b/feature/topic/impl/build.gradle.kts @@ -0,0 +1,25 @@ +/* +* Copyright 2022 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. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +plugins { + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.feature.topic.impl" +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a6132d7d..1fa507a84 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ androidTools = "31.13.1" androidxActivity = "1.9.3" androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" -androidxComposeBom = "2025.08.01" +androidxComposeBom = "2025.09.01" androidxComposeFoundation = "1.8.0-alpha07" androidxComposeMaterial3Adaptive = "1.1.0-rc01" androidxComposeRuntimeTracing = "1.7.6" @@ -18,6 +18,7 @@ androidxEspresso = "3.6.1" androidxHiltNavigationCompose = "1.2.0" androidxLifecycle = "2.8.7" androidxLintGradle = "1.0.0-alpha03" +androidxLifecycleViewModelNavigation3 = "2.10.0-alpha05" androidxMacroBenchmark = "1.4.1" androidxMetrics = "1.0.0-beta01" androidxNavigation = "2.8.5" diff --git a/settings.gradle.kts b/settings.gradle.kts index 2b8c6e45c..1d19c11c8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -65,12 +65,17 @@ include(":core:screenshot-testing") include(":core:testing") include(":core:ui") -include(":feature:foryou") -include(":feature:interests") -include(":feature:bookmarks") -include(":feature:topic") -include(":feature:search") -include(":feature:settings") +include(":feature:foryou:api") +include(":feature:foryou:impl") +include(":feature:interests:api") +include(":feature:interests:impl") +include(":feature:bookmarks:api") +include(":feature:bookmarks:impl") +include(":feature:topic:api") +include(":feature:topic:impl") +include(":feature:search:api") +include(":feature:search:impl") +include(":feature:settings:api") include(":lint") include(":sync:work") include(":sync:sync-test") From af3ca67f64ded2bf8f0512cb574889628baf546d Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Fri, 11 Jul 2025 14:30:27 -0700 Subject: [PATCH 02/33] Add NiaBackStack and BackStack providers Bump agp versions and add navigation 3 dependency --- app/build.gradle.kts | 1 + .../apps/nowinandroid/di/BackStackProvider.kt | 34 ++++++++ .../AndroidApplicationConventionPlugin.kt | 2 +- .../kotlin/AndroidLibraryConventionPlugin.kt | 5 +- .../kotlin/AndroidTestConventionPlugin.kt | 2 +- .../apps/nowinandroid/KotlinAndroid.kt | 2 +- core/navigation/.gitignore | 1 + core/navigation/build.gradle.kts | 8 ++ .../core/navigation/NiaBackStack.kt | 77 +++++++++++++++++++ gradle/libs.versions.toml | 3 + settings.gradle.kts | 1 + 11 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt create mode 100644 core/navigation/.gitignore create mode 100644 core/navigation/build.gradle.kts create mode 100644 core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 627be6727..91a4fb0a2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -80,6 +80,7 @@ dependencies { implementation(projects.core.designsystem) implementation(projects.core.data) implementation(projects.core.model) + implementation(projects.core.navigation) implementation(projects.core.analytics) implementation(projects.sync.work) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt new file mode 100644 index 000000000..877e93910 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.di + +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import javax.inject.Singleton +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +object NiaAppNavigation { + @Provides + @Singleton + fun provideNiaBackStack(): NiaBackStack = + NiaBackStack(startKey = TopLevelDestination.FOR_YOU) +} diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index f45d664b7..93fe307e8 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -36,7 +36,7 @@ class AndroidApplicationConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) - defaultConfig.targetSdk = 35 + defaultConfig.targetSdk = 36 @Suppress("UnstableApiUsage") testOptions.animationsDisabled = true configureGradleManagedDevices(this) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 0f6fde884..a3f6e0a2e 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -37,8 +37,9 @@ class AndroidLibraryConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) - testOptions.targetSdk = 35 - lint.targetSdk = 35 + testOptions.targetSdk = 36 + lint.targetSdk = 36 + defaultConfig.targetSdk = 36 defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testOptions.animationsDisabled = true configureFlavors(this) diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt index 49c2eecec..9fd446eac 100644 --- a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -30,7 +30,7 @@ class AndroidTestConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) - defaultConfig.targetSdk = 35 + defaultConfig.targetSdk = 36 configureGradleManagedDevices(this) } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 2ac96e556..81f26e9db 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -35,7 +35,7 @@ internal fun Project.configureKotlinAndroid( commonExtension: CommonExtension<*, *, *, *, *, *>, ) { commonExtension.apply { - compileSdk = 35 + compileSdk = 36 defaultConfig { minSdk = 23 diff --git a/core/navigation/.gitignore b/core/navigation/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/core/navigation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts new file mode 100644 index 000000000..3ee05ccb8 --- /dev/null +++ b/core/navigation/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + alias(libs.plugins.nowinandroid.jvm.library) + alias(libs.plugins.nowinandroid.hilt) +} + +dependencies { + implementation(libs.androidx.navigation3.runtime) +} diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt new file mode 100644 index 000000000..824ee3205 --- /dev/null +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt @@ -0,0 +1,77 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.navigation + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshots.SnapshotStateList +import javax.inject.Inject +import kotlin.collections.remove + +class NiaBackStack @Inject constructor( + startKey: Any, +) { + val backStack = mutableStateListOf(startKey) + + // Maintain a stack for each top level route + private var topLevelStacks : LinkedHashMap> = linkedMapOf( + startKey to mutableStateListOf(startKey) + ) + + // Expose the current top level route for consumers + var topLevelKey by mutableStateOf(startKey) + private set + + private fun updateBackStack() = + backStack.apply { + clear() + addAll(topLevelStacks.flatMap { it.value }) + } + + fun navigateToTopLevelDestination(key: Any){ + // If the top level doesn't exist, add it + if (topLevelStacks[key] == null){ + topLevelStacks.put(key, mutableStateListOf(key)) + } else { + // Otherwise just move it to the end of the stacks + topLevelStacks.apply { + remove(key)?.let { + put(key, it) + } + } + } + topLevelKey = key + updateBackStack() + } + + fun navigate(key: Any){ + println("cfok navigate $key") + topLevelStacks[topLevelKey]?.add(key) + updateBackStack() + } + + fun removeLast(){ + val removedKey = topLevelStacks[topLevelKey]?.removeLastOrNull() + // If the removed key was a top level key, remove the associated top level stack + topLevelStacks.remove(removedKey) + topLevelKey = topLevelStacks.keys.last() + updateBackStack() + } + +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1fa507a84..544154330 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,7 @@ androidxLifecycleViewModelNavigation3 = "2.10.0-alpha05" androidxMacroBenchmark = "1.4.1" androidxMetrics = "1.0.0-beta01" androidxNavigation = "2.8.5" +androidxNavigation3 = "1.0.0-alpha03" androidxProfileinstaller = "1.4.1" androidxTestCore = "1.7.0-rc01" androidxTestExt = "1.3.0-rc01" @@ -98,6 +99,8 @@ androidx-lint-gradle = { group = "androidx.lint", name = "lint-gradle", version. androidx-metrics = { group = "androidx.metrics", name = "metrics-performance", version.ref = "androidxMetrics" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" } androidx-navigation-testing = { group = "androidx.navigation", name = "navigation-testing", version.ref = "androidxNavigation" } +androidx-navigation3-runtime = { group = "androidx.navigation3", name = "navigation3-runtime", version.ref = "androidxNavigation3" } +androidx-navigation3-ui = { group = "androidx.navigation3", name = "navigation3-ui", version.ref = "androidxNavigation3" } androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "androidxProfileinstaller" } androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidxTestCore" } androidx-test-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidxEspresso" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 1d19c11c8..03adf46ee 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -59,6 +59,7 @@ include(":core:datastore-test") include(":core:designsystem") include(":core:domain") include(":core:model") +include(":core:navigation") include(":core:network") include(":core:notifications") include(":core:screenshot-testing") From d30083005ead64ca8bf46fe2f556f975c05998a7 Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Fri, 11 Jul 2025 18:16:56 -0700 Subject: [PATCH 03/33] Refactor feature modules to navigation3 --- .../navigation/TopLevelDestination.kt | 6 +- feature/bookmarks/api/build.gradle.kts | 11 - .../api/navigation/BookmarksNavigation.kt | 11 +- ...ature_bookmarks_api_mg_empty_bookmarks.xml | 57 ---- feature/bookmarks/impl/build.gradle.kts | 12 +- .../bookmarks/impl}/BookmarksScreenTest.kt | 8 +- .../src/main/AndroidManifest.xml | 0 .../bookmarks/impl}/BookmarksScreen.kt | 14 +- .../bookmarks/impl}/BookmarksViewModel.kt | 2 +- .../impl/navigation/BookmarksEntryProvider.kt | 62 +++++ ...ture_bookmarks_impl_mg_empty_bookmarks.xml | 57 ++++ .../src/main/res/values/strings.xml | 12 +- .../bookmarks/impl}/BookmarksViewModelTest.kt | 4 +- feature/foryou/api/build.gradle.kts | 3 - .../foryou/api/navigation/ForYouNavigation.kt | 43 ++-- .../api/src/main/res/values/strings.xml | 3 +- feature/foryou/impl/build.gradle.kts | 19 +- .../feature/foryou/impl}/ForYouScreenTest.kt | 19 +- .../feature/foryou/impl}/ForYouScreen.kt | 3 +- .../feature/foryou/impl}/ForYouViewModel.kt | 2 +- .../feature/foryou/impl}/OnboardingUiState.kt | 2 +- .../impl/navigation/ForYouEntryProvider.kt | 46 ++++ .../impl}/ForYouScreenScreenshotTests.kt | 11 +- .../foryou/impl}/ForYouViewModelTest.kt | 2 +- feature/interests/api/build.gradle.kts | 14 +- .../api/navigation/InterestsNavigation.kt | 7 + feature/interests/impl/build.gradle.kts | 23 +- .../interests/impl}/InterestsScreenTest.kt | 4 +- .../interests/impl/Interests2PaneViewModel.kt | 43 ++++ .../interests/impl/InterestsEntryProvider.kt | 41 +++ .../impl/InterestsListDetailScreen.kt | 243 ++++++++++++++++++ .../interests/impl}/InterestsScreen.kt | 3 +- .../interests/impl}/InterestsViewModel.kt | 2 +- .../feature/interests/impl}/TabContent.kt | 2 +- .../impl/InterestsListDetailScreenTest.kt | 203 +++++++++++++++ .../interests/impl}/InterestsViewModelTest.kt | 2 +- feature/search/api/build.gradle.kts | 3 +- .../search/api/navigation/SearchNavigation.kt | 29 ++- feature/search/impl/build.gradle.kts | 13 + .../feature/search/impl}/SearchScreenTest.kt | 17 +- .../impl}/RecentSearchQueriesUiState.kt | 2 +- .../search/impl}/SearchResultUiState.kt | 2 +- .../feature/search/impl}/SearchScreen.kt | 14 +- .../SearchUiStatePreviewParameterProvider.kt | 4 +- .../feature/search/impl}/SearchViewModel.kt | 17 +- .../impl/navigation/SearchEntryProvider.kt | 49 ++++ .../search/impl}/SearchViewModelTest.kt | 12 +- feature/topic/api/build.gradle.kts | 2 +- .../topic/api/navigation/TopicNavigation.kt | 8 +- feature/topic/impl/build.gradle.kts | 12 + .../impl/navigation/TopicEntryProvider.kt | 58 +++++ 51 files changed, 1030 insertions(+), 208 deletions(-) delete mode 100644 feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml rename feature/bookmarks/{api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api => impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl}/BookmarksScreenTest.kt (97%) rename feature/bookmarks/{api => impl}/src/main/AndroidManifest.xml (100%) rename feature/bookmarks/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl}/BookmarksScreen.kt (98%) rename feature/bookmarks/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl}/BookmarksViewModel.kt (97%) create mode 100644 feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt create mode 100644 feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml rename feature/bookmarks/{api => impl}/src/main/res/values/strings.xml (59%) rename feature/bookmarks/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl}/BookmarksViewModelTest.kt (97%) rename feature/foryou/{api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/ForYouScreenTest.kt (94%) rename feature/foryou/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/ForYouScreen.kt (99%) rename feature/foryou/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/ForYouViewModel.kt (98%) rename feature/foryou/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/OnboardingUiState.kt (95%) create mode 100644 feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt rename feature/foryou/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/ForYouScreenScreenshotTests.kt (94%) rename feature/foryou/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl}/ForYouViewModelTest.kt (99%) rename feature/interests/{api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api => impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl}/InterestsScreenTest.kt (95%) create mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/Interests2PaneViewModel.kt create mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt create mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt rename feature/interests/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl}/InterestsScreen.kt (97%) rename feature/interests/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl}/InterestsViewModel.kt (97%) rename feature/interests/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl}/TabContent.kt (98%) create mode 100644 feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt rename feature/interests/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl}/InterestsViewModelTest.kt (99%) rename feature/search/{api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchScreenTest.kt (93%) rename feature/search/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/RecentSearchQueriesUiState.kt (93%) rename feature/search/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchResultUiState.kt (96%) rename feature/search/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchScreen.kt (97%) rename feature/search/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchUiStatePreviewParameterProvider.kt (90%) rename feature/search/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchViewModel.kt (88%) create mode 100644 feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt rename feature/search/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl}/SearchViewModelTest.kt (92%) create mode 100644 feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/navigation/TopicEntryProvider.kt diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index d43101078..68f7c6b1a 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -25,7 +25,7 @@ import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYou import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import kotlin.reflect.KClass -import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R as bookmarksR +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.R as bookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.api.R as forYouR import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR @@ -62,8 +62,8 @@ enum class TopLevelDestination( BOOKMARKS( selectedIcon = NiaIcons.Bookmarks, unselectedIcon = NiaIcons.BookmarksBorder, - iconTextId = bookmarksR.string.feature_bookmarks_api_title, - titleTextId = bookmarksR.string.feature_bookmarks_api_title, + iconTextId = bookmarksR.string.feature_bookmarks_impl_title, + titleTextId = bookmarksR.string.feature_bookmarks_impl_title, route = BookmarksRoute::class, ), INTERESTS( diff --git a/feature/bookmarks/api/build.gradle.kts b/feature/bookmarks/api/build.gradle.kts index f12a39f7d..9ab1fbd05 100644 --- a/feature/bookmarks/api/build.gradle.kts +++ b/feature/bookmarks/api/build.gradle.kts @@ -16,19 +16,8 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) - alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.library.jacoco) } android { namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.api" } - -dependencies { - implementation(projects.core.data) - - testImplementation(projects.core.testing) - - androidTestImplementation(libs.bundles.androidx.compose.ui.test) - androidTestImplementation(projects.core.testing) -} diff --git a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt index 23b48b17a..132424350 100644 --- a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt @@ -19,8 +19,6 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions -import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.bookmarks.api.BookmarksRoute import kotlinx.serialization.Serializable @Serializable object BookmarksRoute @@ -32,7 +30,10 @@ fun NavGraphBuilder.bookmarksScreen( onTopicClick: (String) -> Unit, onShowSnackbar: suspend (String, String?) -> Boolean, ) { - composable { - BookmarksRoute(onTopicClick, onShowSnackbar) - } +// composable { +// BookmarksRoute( +// onTopicClick, +// onShowSnackbar +// ) +// } } diff --git a/feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml b/feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml deleted file mode 100644 index 64bbfbd23..000000000 --- a/feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/feature/bookmarks/impl/build.gradle.kts b/feature/bookmarks/impl/build.gradle.kts index f46554044..2f62df27d 100644 --- a/feature/bookmarks/impl/build.gradle.kts +++ b/feature/bookmarks/impl/build.gradle.kts @@ -23,4 +23,14 @@ android { namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.impl" } -dependencies { } +dependencies { + implementation(projects.core.data) + implementation(projects.feature.bookmarks.api) + implementation(projects.core.navigation) + implementation(projects.feature.topic.api) + + testImplementation(projects.core.testing) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) +} diff --git a/feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt similarity index 97% rename from feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt rename to feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt index 78f29f92a..56577976d 100644 --- a/feature/bookmarks/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreenTest.kt +++ b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks.api +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl import androidx.activity.ComponentActivity import androidx.compose.runtime.CompositionLocalProvider @@ -63,7 +63,7 @@ class BookmarksScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_bookmarks_loading), + composeTestRule.activity.resources.getString(R.string.feature_bookmarks_api_loading), ) .assertExists() } @@ -160,13 +160,13 @@ class BookmarksScreenTest { composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_empty_error), + composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_error), ) .assertExists() composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_empty_description), + composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_description), ) .assertExists() } diff --git a/feature/bookmarks/api/src/main/AndroidManifest.xml b/feature/bookmarks/impl/src/main/AndroidManifest.xml similarity index 100% rename from feature/bookmarks/api/src/main/AndroidManifest.xml rename to feature/bookmarks/impl/src/main/AndroidManifest.xml diff --git a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt similarity index 98% rename from feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt rename to feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt index 019fb4609..e7383be3a 100644 --- a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksScreen.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks.api +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl import androidx.annotation.VisibleForTesting import androidx.compose.foundation.Image @@ -112,8 +112,8 @@ internal fun BookmarksScreen( undoBookmarkRemoval: () -> Unit = {}, clearUndoState: () -> Unit = {}, ) { - val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_api_removed) - val undoText = stringResource(id = R.string.feature_bookmarks_api_undo) + val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_impl_removed) + val undoText = stringResource(id = R.string.feature_bookmarks_impl_undo) LaunchedEffect(shouldDisplayUndoBookmark) { if (shouldDisplayUndoBookmark) { @@ -155,7 +155,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { .fillMaxWidth() .wrapContentSize() .testTag("forYou:loading"), - contentDesc = stringResource(id = R.string.feature_bookmarks_api_loading), + contentDesc = stringResource(id = R.string.feature_bookmarks_impl_loading), ) } @@ -228,7 +228,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { val iconTint = LocalTintTheme.current.iconTint Image( modifier = Modifier.fillMaxWidth(), - painter = painterResource(id = R.drawable.feature_bookmarks_api_mg_empty_bookmarks), + painter = painterResource(id = R.drawable.feature_bookmarks_impl_mg_empty_bookmarks), colorFilter = if (iconTint != Color.Unspecified) ColorFilter.tint(iconTint) else null, contentDescription = null, ) @@ -236,7 +236,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(48.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_api_empty_error), + text = stringResource(id = R.string.feature_bookmarks_impl_empty_error), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, @@ -246,7 +246,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(8.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_api_empty_description), + text = stringResource(id = R.string.feature_bookmarks_impl_empty_description), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium, diff --git a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModel.kt similarity index 97% rename from feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt rename to feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModel.kt index 7b8945eb2..f36c9d31f 100644 --- a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModel.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks.api +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt new file mode 100644 index 000000000..0bfeb3668 --- /dev/null +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation + +import androidx.compose.material3.SnackbarDuration.Short +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.SnackbarResult.ActionPerformed +import androidx.compose.runtime.compositionLocalOf +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.multibindings.IntoSet + +@Module +@InstallIn(ActivityComponent::class) +object BookmarksModule { + + @Provides + @IntoSet + fun provideBookmarksEntryProviderBuilder( + backStack: NiaBackStack, + ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + entry { + val snackbarHostState = LocalSnackbarHostState.current + BookmarksRoute( + onTopicClick = backStack::navigateToTopic, + onShowSnackbar = { message, action -> + snackbarHostState.showSnackbar( + message = message, + actionLabel = action, + duration = Short, + ) == ActionPerformed + } + ) + } + } +} + +val LocalSnackbarHostState = compositionLocalOf { + error("host state should be initialzied at runtime") +} diff --git a/feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml b/feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml new file mode 100644 index 000000000..bc12d4325 --- /dev/null +++ b/feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/feature/bookmarks/api/src/main/res/values/strings.xml b/feature/bookmarks/impl/src/main/res/values/strings.xml similarity index 59% rename from feature/bookmarks/api/src/main/res/values/strings.xml rename to feature/bookmarks/impl/src/main/res/values/strings.xml index 98f4b4a8d..6aa996a1a 100644 --- a/feature/bookmarks/api/src/main/res/values/strings.xml +++ b/feature/bookmarks/impl/src/main/res/values/strings.xml @@ -15,10 +15,10 @@ limitations under the License. --> - Saved - Loading saved… - No saved updates - Updates you save will be stored here\nto read later - Bookmark removed - UNDO + Saved + Loading saved… + No saved updates + Updates you save will be stored here\nto read later + Bookmark removed + UNDO diff --git a/feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt b/feature/bookmarks/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModelTest.kt similarity index 97% rename from feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt rename to feature/bookmarks/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModelTest.kt index ae3b488c7..66ce0744f 100644 --- a/feature/bookmarks/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/BookmarksViewModelTest.kt +++ b/feature/bookmarks/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.bookmarks.api +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData @@ -23,7 +23,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success -import com.google.samples.apps.nowinandroid.feature.bookmarks.api.BookmarksViewModel +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksViewModel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher diff --git a/feature/foryou/api/build.gradle.kts b/feature/foryou/api/build.gradle.kts index 2ee38bfae..45eb87d89 100644 --- a/feature/foryou/api/build.gradle.kts +++ b/feature/foryou/api/build.gradle.kts @@ -16,9 +16,6 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) - alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.roborazzi) } android { diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt index a4b276983..e11b4d26e 100644 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt @@ -19,11 +19,6 @@ package com.google.samples.apps.nowinandroid.feature.foryou.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions -import androidx.navigation.compose.composable -import androidx.navigation.compose.navigation -import androidx.navigation.navDeepLink -import com.google.samples.apps.nowinandroid.core.notifications.DEEP_LINK_URI_PATTERN -import com.google.samples.apps.nowinandroid.feature.foryou.api.ForYouScreen import kotlinx.serialization.Serializable @Serializable data object ForYouRoute // route to ForYou screen @@ -43,23 +38,23 @@ fun NavGraphBuilder.forYouSection( onTopicClick: (String) -> Unit, topicDestination: NavGraphBuilder.() -> Unit, ) { - navigation(startDestination = ForYouRoute) { - composable( - deepLinks = listOf( - navDeepLink { - /** - * This destination has a deep link that enables a specific news resource to be - * opened from a notification (@see SystemTrayNotifier for more). The news resource - * ID is sent in the URI rather than being modelled in the route type because it's - * transient data (stored in SavedStateHandle) that is cleared after the user has - * opened the news resource. - */ - uriPattern = DEEP_LINK_URI_PATTERN - }, - ), - ) { - ForYouScreen(onTopicClick) - } - topicDestination() - } +// navigation(startDestination = ForYouRoute) { +// composable( +// deepLinks = listOf( +// navDeepLink { +// /** +// * This destination has a deep link that enables a specific news resource to be +// * opened from a notification (@see SystemTrayNotifier for more). The news resource +// * ID is sent in the URI rather than being modelled in the route type because it's +// * transient data (stored in SavedStateHandle) that is cleared after the user has +// * opened the news resource. +// */ +// uriPattern = DEEP_LINK_URI_PATTERN +// }, +// ), +// ) { +// com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen(onTopicClick) +// } +// topicDestination() +// } } diff --git a/feature/foryou/api/src/main/res/values/strings.xml b/feature/foryou/api/src/main/res/values/strings.xml index 4694eb444..f0595944f 100644 --- a/feature/foryou/api/src/main/res/values/strings.xml +++ b/feature/foryou/api/src/main/res/values/strings.xml @@ -21,5 +21,4 @@ Navigate up What are you interested in? Updates from topics you follow will appear here. Follow some things to get started. - - + \ No newline at end of file diff --git a/feature/foryou/impl/build.gradle.kts b/feature/foryou/impl/build.gradle.kts index 37f49d304..00a3c1419 100644 --- a/feature/foryou/impl/build.gradle.kts +++ b/feature/foryou/impl/build.gradle.kts @@ -17,10 +17,27 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.roborazzi) } android { namespace = "com.google.samples.apps.nowinandroid.feature.foryou.impl" } -dependencies { } \ No newline at end of file +dependencies { + implementation(libs.accompanist.permissions) + implementation(projects.core.data) + implementation(projects.core.domain) + implementation(projects.core.notifications) + implementation(projects.core.navigation) + implementation(projects.feature.foryou.api) + implementation(projects.feature.topic.api) + + testImplementation(libs.hilt.android.testing) + testImplementation(libs.robolectric) + testImplementation(projects.core.testing) + testDemoImplementation(projects.core.screenshotTesting) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) +} \ No newline at end of file diff --git a/feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt b/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt similarity index 94% rename from feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt rename to feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt index 46905fd8b..74378b699 100644 --- a/feature/foryou/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenTest.kt +++ b/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import androidx.activity.ComponentActivity import androidx.compose.foundation.layout.Box @@ -32,6 +32,7 @@ import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPer import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState +import com.google.samples.apps.nowinandroid.feature.foryou.api.R import org.junit.Rule import org.junit.Test @@ -153,12 +154,12 @@ class ForYouScreenTest { ForYouScreen( isSyncing = false, onboardingUiState = - OnboardingUiState.Shown( - // Follow one topic - topics = followableTopicTestData.mapIndexed { index, testTopic -> - testTopic.copy(isFollowed = index == 1) - }, - ), + OnboardingUiState.Shown( + // Follow one topic + topics = followableTopicTestData.mapIndexed { index, testTopic -> + testTopic.copy(isFollowed = index == 1) + }, + ), feedState = NewsFeedUiState.Success( feed = emptyList(), ), @@ -200,7 +201,9 @@ class ForYouScreenTest { ForYouScreen( isSyncing = false, onboardingUiState = - OnboardingUiState.Shown(topics = followableTopicTestData), + OnboardingUiState.Shown( + topics = followableTopicTestData + ), feedState = NewsFeedUiState.Loading, deepLinkedUserNewsResource = null, onTopicCheckedChanged = { _, _ -> }, diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt similarity index 99% rename from feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt rename to feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt index 0b32cc6a6..a7be6ae31 100644 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreen.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import android.net.Uri import android.os.Build.VERSION @@ -103,6 +103,7 @@ import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.launchCustomChromeTab import com.google.samples.apps.nowinandroid.core.ui.newsFeed +import com.google.samples.apps.nowinandroid.feature.foryou.api.R @Composable internal fun ForYouScreen( diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModel.kt similarity index 98% rename from feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt rename to feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModel.kt index 6fb44a5f5..c54551c0b 100644 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModel.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/OnboardingUiState.kt similarity index 95% rename from feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt rename to feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/OnboardingUiState.kt index cd2197bcb..d31749bb5 100644 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/OnboardingUiState.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/OnboardingUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic diff --git a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt new file mode 100644 index 000000000..05863011c --- /dev/null +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.foryou.impl.navigation + +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.multibindings.IntoSet + +@Module +@InstallIn(ActivityComponent::class) +object ForYouModule { + + @Provides + @IntoSet + fun provideForYouEntryProviderBuilder( + backStack: NiaBackStack, + ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + entry { + ForYouScreen( + onTopicClick = backStack::navigateToTopic + ) + } + } +} \ No newline at end of file diff --git a/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt similarity index 94% rename from feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt rename to feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt index 447472d1c..d0d73860e 100644 --- a/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import androidx.activity.ComponentActivity import androidx.compose.runtime.Composable @@ -31,9 +31,8 @@ import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiDevice import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider -import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.Loading -import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.NotShown -import com.google.samples.apps.nowinandroid.feature.foryou.api.OnboardingUiState.Shown +import com.google.samples.apps.nowinandroid.feature.foryou.impl.OnboardingUiState.NotShown +import com.google.samples.apps.nowinandroid.feature.foryou.impl.OnboardingUiState.Shown import dagger.hilt.android.testing.HiltTestApplication import org.hamcrest.Matchers import org.junit.Before @@ -97,7 +96,7 @@ class ForYouScreenScreenshotTests { NiaTheme { ForYouScreen( isSyncing = false, - onboardingUiState = Loading, + onboardingUiState = OnboardingUiState.Loading, feedState = NewsFeedUiState.Loading, onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, @@ -194,7 +193,7 @@ class ForYouScreenScreenshotTests { NiaTheme { ForYouScreen( isSyncing = true, - onboardingUiState = Loading, + onboardingUiState = OnboardingUiState.Loading, feedState = Success( feed = userNewsResources, ), diff --git a/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModelTest.kt similarity index 99% rename from feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt rename to feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModelTest.kt index b8a4ef86b..5008b484c 100644 --- a/feature/foryou/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/ForYouViewModelTest.kt +++ b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.foryou.api +package com.google.samples.apps.nowinandroid.feature.foryou.impl import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent diff --git a/feature/interests/api/build.gradle.kts b/feature/interests/api/build.gradle.kts index a3627fac6..db804484e 100644 --- a/feature/interests/api/build.gradle.kts +++ b/feature/interests/api/build.gradle.kts @@ -16,20 +16,12 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) - alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.library.jacoco) } + android { namespace = "com.google.samples.apps.nowinandroid.feature.interests.api" } dependencies { - implementation(projects.core.data) - implementation(projects.core.domain) - - testImplementation(projects.core.testing) - testImplementation(libs.robolectric) - - androidTestImplementation(libs.bundles.androidx.compose.ui.test) - androidTestImplementation(projects.core.testing) -} + implementation(projects.core.navigation) +} \ No newline at end of file diff --git a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt index f509ba6b8..f4ae878f7 100644 --- a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt @@ -18,6 +18,7 @@ package com.google.samples.apps.nowinandroid.feature.interests.api.navigation import androidx.navigation.NavController import androidx.navigation.NavOptions +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack import kotlinx.serialization.Serializable @Serializable data class InterestsRoute( @@ -31,3 +32,9 @@ fun NavController.navigateToInterests( ) { navigate(route = InterestsRoute(initialTopicId), navOptions) } + +fun NiaBackStack.navigateToInterests( + initialTopicId: String? = null, +) { + navigate(InterestsRoute(initialTopicId)) +} diff --git a/feature/interests/impl/build.gradle.kts b/feature/interests/impl/build.gradle.kts index a83efdc4a..6419f4b1e 100644 --- a/feature/interests/impl/build.gradle.kts +++ b/feature/interests/impl/build.gradle.kts @@ -21,4 +21,25 @@ plugins { } android { namespace = "com.google.samples.apps.nowinandroid.feature.interests.impl" -} \ No newline at end of file +} + +dependencies { + implementation(projects.core.data) + implementation(projects.core.domain) + implementation(projects.feature.topic.api) + implementation(projects.feature.interests.api) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.material3.adaptive) + implementation(libs.androidx.compose.material3.adaptive.layout) + implementation(libs.androidx.compose.material3.adaptive.navigation) + + testImplementation(projects.core.testing) + testImplementation(libs.robolectric) + testImplementation(libs.androidx.compose.ui.test) + testImplementation(libs.androidx.test.espresso.core) + testImplementation(libs.hilt.android.testing) + testImplementation(projects.uiTestHiltManifest) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) +} diff --git a/feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt b/feature/interests/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreenTest.kt similarity index 95% rename from feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt rename to feature/interests/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreenTest.kt index 2286dadb2..8a10a478b 100644 --- a/feature/interests/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsScreenTest.kt +++ b/feature/interests/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.interests +package com.google.samples.apps.nowinandroid.feature.interests.impl import androidx.activity.ComponentActivity import androidx.compose.runtime.Composable @@ -25,8 +25,6 @@ import androidx.compose.ui.test.onAllNodesWithContentDescription import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData -import com.google.samples.apps.nowinandroid.feature.interests.api.InterestsScreen -import com.google.samples.apps.nowinandroid.feature.interests.api.InterestsUiState import org.junit.Before import org.junit.Rule import org.junit.Test diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/Interests2PaneViewModel.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/Interests2PaneViewModel.kt new file mode 100644 index 000000000..6be41d555 --- /dev/null +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/Interests2PaneViewModel.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.interests.impl + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.navigation.toRoute +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.StateFlow +import javax.inject.Inject + +const val TOPIC_ID_KEY = "selectedTopicId" + +@HiltViewModel +class Interests2PaneViewModel @Inject constructor( + private val savedStateHandle: SavedStateHandle, +) : ViewModel() { + + val route = savedStateHandle.toRoute() + val selectedTopicId: StateFlow = savedStateHandle.getStateFlow( + key = TOPIC_ID_KEY, + initialValue = route.initialTopicId, + ) + + fun onTopicClick(topicId: String?) { + savedStateHandle[TOPIC_ID_KEY] = topicId + } +} diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt new file mode 100644 index 000000000..e485aed89 --- /dev/null +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.interests.impl + +import androidx.compose.runtime.snapshots.SnapshotStateList +import androidx.navigation.compose.composable +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.multibindings.IntoSet + +@Module +@InstallIn(ActivityComponent::class) +object InterestsModule { + + @Provides + @IntoSet + fun provideInterestsEntryProviderBuilder(): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + entry { key -> + InterestsListDetailScreen() + } + } +} \ No newline at end of file diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt new file mode 100644 index 000000000..357afd83e --- /dev/null +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt @@ -0,0 +1,243 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.interests.impl + +import androidx.activity.compose.BackHandler +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Box +import androidx.compose.material3.LocalMinimumInteractiveComponentSize +import androidx.compose.material3.VerticalDragHandle +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.layout.AnimatedPane +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole +import androidx.compose.material3.adaptive.layout.PaneAdaptedValue +import androidx.compose.material3.adaptive.layout.PaneExpansionAnchor +import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldDestinationItem +import androidx.compose.material3.adaptive.layout.calculatePaneScaffoldDirective +import androidx.compose.material3.adaptive.layout.defaultDragHandleSemantics +import androidx.compose.material3.adaptive.layout.rememberPaneExpansionState +import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior +import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold +import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator +import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler +import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.layout.layout +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicDetailPlaceholder +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.TopicRoute +import kotlinx.coroutines.launch +import kotlinx.serialization.Serializable +import kotlin.math.max + +@Serializable internal object TopicPlaceholderRoute + +fun NavGraphBuilder.interestsListDetailScreen() { + composable { + InterestsListDetailScreen() + } +} + +@Composable +internal fun InterestsListDetailScreen( + viewModel: Interests2PaneViewModel = hiltViewModel(), + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), +) { + val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() + InterestsListDetailScreen( + selectedTopicId = selectedTopicId, + onTopicClick = viewModel::onTopicClick, + windowAdaptiveInfo = windowAdaptiveInfo, + ) +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@Composable +internal fun InterestsListDetailScreen( + selectedTopicId: String?, + onTopicClick: (String) -> Unit, + windowAdaptiveInfo: WindowAdaptiveInfo, +) { + val listDetailNavigator = rememberListDetailPaneScaffoldNavigator( + scaffoldDirective = calculatePaneScaffoldDirective(windowAdaptiveInfo), + initialDestinationHistory = listOfNotNull( + ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.List), + ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.Detail).takeIf { + selectedTopicId != null + }, + ), + ) + val coroutineScope = rememberCoroutineScope() + + val paneExpansionState = rememberPaneExpansionState( + anchors = listOf( + PaneExpansionAnchor.Proportion(0f), + PaneExpansionAnchor.Proportion(0.5f), + PaneExpansionAnchor.Proportion(1f), + ), + ) + + ThreePaneScaffoldPredictiveBackHandler( + listDetailNavigator, + BackNavigationBehavior.PopUntilScaffoldValueChange, + ) + BackHandler( + paneExpansionState.currentAnchor == PaneExpansionAnchor.Proportion(0f) && + listDetailNavigator.isListPaneVisible() && + listDetailNavigator.isDetailPaneVisible(), + ) { + coroutineScope.launch { + paneExpansionState.animateTo(PaneExpansionAnchor.Proportion(1f)) + } + } + + var topicRoute by remember { + val route = selectedTopicId?.let { TopicRoute(id = it) } ?: TopicPlaceholderRoute + mutableStateOf(route) + } + + fun onTopicClickShowDetailPane(topicId: String) { + onTopicClick(topicId) + topicRoute = TopicRoute(id = topicId) + coroutineScope.launch { + listDetailNavigator.navigateTo(ListDetailPaneScaffoldRole.Detail) + } + if (paneExpansionState.currentAnchor == PaneExpansionAnchor.Proportion(1f)) { + coroutineScope.launch { + paneExpansionState.animateTo(PaneExpansionAnchor.Proportion(0f)) + } + } + } + + val mutableInteractionSource = remember { MutableInteractionSource() } + val minPaneWidth = 300.dp + + NavigableListDetailPaneScaffold( + navigator = listDetailNavigator, + listPane = { + AnimatedPane { + Box( + modifier = Modifier.clipToBounds() + .layout { measurable, constraints -> + val width = max(minPaneWidth.roundToPx(), constraints.maxWidth) + val placeable = measurable.measure( + constraints.copy( + minWidth = minPaneWidth.roundToPx(), + maxWidth = width, + ), + ) + layout(constraints.maxWidth, placeable.height) { + placeable.placeRelative( + x = 0, + y = 0, + ) + } + }, + ) { + InterestsRoute( + onTopicClick = ::onTopicClickShowDetailPane, + shouldHighlightSelectedTopic = listDetailNavigator.isDetailPaneVisible(), + ) + } + } + }, + detailPane = { + AnimatedPane { + Box( + modifier = Modifier.clipToBounds() + .layout { measurable, constraints -> + val width = max(minPaneWidth.roundToPx(), constraints.maxWidth) + val placeable = measurable.measure( + constraints.copy( + minWidth = minPaneWidth.roundToPx(), + maxWidth = width, + ), + ) + layout(constraints.maxWidth, placeable.height) { + placeable.placeRelative( + x = constraints.maxWidth - + max(constraints.maxWidth, placeable.width), + y = 0, + ) + } + }, + ) { + AnimatedContent(topicRoute) { route -> + when (route) { + is TopicRoute -> { + TopicScreen( + showBackButton = !listDetailNavigator.isListPaneVisible(), + onBackClick = { + coroutineScope.launch { + listDetailNavigator.navigateBack() + } + }, + onTopicClick = ::onTopicClickShowDetailPane, + viewModel = hiltViewModel( + key = route.id, + ) { factory -> + factory.create(route.id) + }, + ) + } + is TopicPlaceholderRoute -> { + TopicDetailPlaceholder() + } + } + } + } + } + }, + paneExpansionState = paneExpansionState, + paneExpansionDragHandle = { + VerticalDragHandle( + modifier = Modifier.paneExpansionDraggable( + state = paneExpansionState, + minTouchTargetSize = LocalMinimumInteractiveComponentSize.current, + interactionSource = mutableInteractionSource, + semanticsProperties = paneExpansionState.defaultDragHandleSemantics(), + ), + interactionSource = mutableInteractionSource, + ) + }, + ) +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isListPaneVisible(): Boolean = + scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isDetailPaneVisible(): Boolean = + scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded diff --git a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt similarity index 97% rename from feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt rename to feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt index 8f50ae638..24e698303 100644 --- a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsScreen.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests.api +package com.google.samples.apps.nowinandroid.feature.interests.impl import androidx.compose.foundation.layout.Column import androidx.compose.material3.Text @@ -33,6 +33,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews import com.google.samples.apps.nowinandroid.core.ui.FollowableTopicPreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent +import com.google.samples.apps.nowinandroid.feature.interests.api.R @Composable fun InterestsRoute( diff --git a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsViewModel.kt similarity index 97% rename from feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt rename to feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsViewModel.kt index 5c7b37c32..2fe015c03 100644 --- a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/InterestsViewModel.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests.api +package com.google.samples.apps.nowinandroid.feature.interests.impl import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel diff --git a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/TabContent.kt similarity index 98% rename from feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt rename to feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/TabContent.kt index 5685ec6ab..5d86e8de7 100644 --- a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/TabContent.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/TabContent.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests.api +package com.google.samples.apps.nowinandroid.feature.interests.impl import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.Box diff --git a/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt new file mode 100644 index 000000000..45d3e8507 --- /dev/null +++ b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt @@ -0,0 +1,203 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.interests.impl + +import androidx.activity.compose.BackHandler +import androidx.annotation.StringRes +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.espresso.Espresso +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import javax.inject.Inject +import kotlin.properties.ReadOnlyProperty +import kotlin.test.assertTrue +import com.google.samples.apps.nowinandroid.feature.topic.api.R as FeatureTopicR + +private const val EXPANDED_WIDTH = "w1200dp-h840dp" +private const val COMPACT_WIDTH = "w412dp-h915dp" + +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(application = HiltTestApplication::class) +class InterestsListDetailScreenTest { + + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + @get:Rule(order = 1) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var topicsRepository: TopicsRepository + + /** Convenience function for getting all topics during tests, */ + private fun getTopics(): List = runBlocking { + topicsRepository.getTopics().first().sortedBy { it.name } + } + + // The strings used for matching in these tests. + private val placeholderText by composeTestRule.stringResource(FeatureTopicR.string.feature_topic_api_select_an_interest) + private val listPaneTag = "interests:topics" + + private val Topic.testTag + get() = "topic:${this.id}" + + @Before + fun setup() { + hiltRule.inject() + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_initialState_showsTwoPanesWithPlaceholder() { + composeTestRule.apply { + setContent { + NiaTheme { + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_initialState_showsListPane() { + composeTestRule.apply { + setContent { + NiaTheme { + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + } + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_topicSelected_updatesDetailPane() { + composeTestRule.apply { + setContent { + NiaTheme { + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_topicSelected_showsTopicDetailPane() { + composeTestRule.apply { + setContent { + NiaTheme { + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsNotDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_backPressFromTopicDetail_leavesInterests() { + var unhandledBackPress = false + composeTestRule.apply { + setContent { + NiaTheme { + // Back press should not be handled by the two pane layout, and thus + // "fall through" to this BackHandler. + BackHandler { + unhandledBackPress = true + } + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + waitForIdle() + Espresso.pressBack() + + assertTrue(unhandledBackPress) + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_backPressFromTopicDetail_showsListPane() { + composeTestRule.apply { + setContent { + NiaTheme { + com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + waitForIdle() + Espresso.pressBack() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsNotDisplayed() + } + } +} + +private fun AndroidComposeTestRule<*, *>.stringResource( + @StringRes resId: Int, +): ReadOnlyProperty = + ReadOnlyProperty { _, _ -> activity.getString(resId) } diff --git a/feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsViewModelTest.kt similarity index 99% rename from feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt rename to feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsViewModelTest.kt index 55a1ded1a..b9c06d38b 100644 --- a/feature/interests/api/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/api/InterestsViewModelTest.kt +++ b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.interests.api +package com.google.samples.apps.nowinandroid.interests.impl import androidx.lifecycle.SavedStateHandle import androidx.navigation.testing.invoke diff --git a/feature/search/api/build.gradle.kts b/feature/search/api/build.gradle.kts index 741a87fff..771cac5ca 100644 --- a/feature/search/api/build.gradle.kts +++ b/feature/search/api/build.gradle.kts @@ -16,8 +16,6 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) - alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -27,6 +25,7 @@ android { dependencies { implementation(projects.core.data) implementation(projects.core.domain) + implementation(projects.core.navigation) testImplementation(projects.core.testing) diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt index b45956b29..0ddd81f27 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt @@ -19,12 +19,19 @@ package com.google.samples.apps.nowinandroid.feature.search.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions -import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.search.api.SearchRoute +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack import kotlinx.serialization.Serializable @Serializable data object SearchRoute +@Serializable data class SearchRouteNav3(val onInterestsClick: () -> Unit) + +fun NiaBackStack.navigateToSearch( + onInterestsClick: () -> Unit, +) { + navigate(SearchRouteNav3(onInterestsClick)) +} + fun NavController.navigateToSearch(navOptions: NavOptions? = null) = navigate(SearchRoute, navOptions) @@ -33,13 +40,13 @@ fun NavGraphBuilder.searchScreen( onInterestsClick: () -> Unit, onTopicClick: (String) -> Unit, ) { - // TODO: Handle back stack for each top-level destination. At the moment each top-level - // destination may have own search screen's back stack. - composable { - com.google.samples.apps.nowinandroid.feature.search.api.SearchRoute( - onBackClick = onBackClick, - onInterestsClick = onInterestsClick, - onTopicClick = onTopicClick, - ) - } +// // TODO: Handle back stack for each top-level destination. At the moment each top-level +// // destination may have own search screen's back stack. +// composable { +// com.google.samples.apps.nowinandroid.feature.search.impl.SearchRoute( +// onBackClick = onBackClick, +// onInterestsClick = onInterestsClick, +// onTopicClick = onTopicClick, +// ) +// } } diff --git a/feature/search/impl/build.gradle.kts b/feature/search/impl/build.gradle.kts index abb0feacd..9c189c03f 100644 --- a/feature/search/impl/build.gradle.kts +++ b/feature/search/impl/build.gradle.kts @@ -22,4 +22,17 @@ plugins { android { namespace = "com.google.samples.apps.nowinandroid.feature.search.impl" +} + +dependencies { + implementation(projects.core.data) + implementation(projects.core.domain) + implementation(projects.core.navigation) + implementation(projects.feature.interests.api) + implementation(projects.feature.search.api) + + testImplementation(projects.core.testing) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } \ No newline at end of file diff --git a/feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt b/feature/search/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreenTest.kt similarity index 93% rename from feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt rename to feature/search/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreenTest.kt index a86de6ab3..3cb93530f 100644 --- a/feature/search/api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreenTest.kt +++ b/feature/search/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreenTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import androidx.activity.ComponentActivity import androidx.compose.ui.test.assertCountEquals @@ -36,6 +36,7 @@ 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 com.google.samples.apps.nowinandroid.feature.search.api.R import org.junit.Before import org.junit.Rule import org.junit.Test @@ -70,17 +71,17 @@ class SearchScreenTest { @Before fun setup() { composeTestRule.activity.apply { - clearSearchContentDesc = getString(R.string.feature_search_clear_search_text_content_desc) - clearRecentSearchesContentDesc = getString(R.string.feature_search_clear_recent_searches_content_desc) + clearSearchContentDesc = getString(R.string.feature_search_api_clear_search_text_content_desc) + clearRecentSearchesContentDesc = getString(R.string.feature_search_api_clear_recent_searches_content_desc) followButtonContentDesc = getString(string.core_ui_interests_card_follow_button_content_desc) unfollowButtonContentDesc = 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) + - " " + getString(R.string.feature_search_interests) + " " + getString(R.string.feature_search_to_browse_topics) - searchNotReadyString = getString(R.string.feature_search_not_ready) + topicsString = getString(R.string.feature_search_api_topics) + updatesString = getString(R.string.feature_search_api_updates) + tryAnotherSearchString = getString(R.string.feature_search_api_try_another_search) + + " " + getString(R.string.feature_search_api_interests) + " " + getString(R.string.feature_search_api_to_browse_topics) + searchNotReadyString = getString(R.string.feature_search_api_not_ready) } } diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/RecentSearchQueriesUiState.kt similarity index 93% rename from feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt rename to feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/RecentSearchQueriesUiState.kt index 3e5d704a5..5b8516664 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/RecentSearchQueriesUiState.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/RecentSearchQueriesUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import com.google.samples.apps.nowinandroid.core.data.model.RecentSearchQuery diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchResultUiState.kt similarity index 96% rename from feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt rename to feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchResultUiState.kt index 27b4003bf..7a6f37087 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchResultUiState.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchResultUiState.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt similarity index 97% rename from feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt rename to feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt index 28c7c3bfc..c530b274a 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchScreen.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.Orientation @@ -93,6 +93,10 @@ 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.search.impl.RecentSearchQueriesUiState.Loading +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.EmptyQuery +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.LoadFailed +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.SearchNotReady import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR @Composable @@ -127,7 +131,7 @@ internal fun SearchRoute( internal fun SearchScreen( modifier: Modifier = Modifier, searchQuery: String = "", - recentSearchesUiState: RecentSearchQueriesUiState = RecentSearchQueriesUiState.Loading, + recentSearchesUiState: RecentSearchQueriesUiState = Loading, searchResultUiState: SearchResultUiState = SearchResultUiState.Loading, onSearchQueryChanged: (String) -> Unit = {}, onSearchTriggered: (String) -> Unit = {}, @@ -150,11 +154,11 @@ internal fun SearchScreen( ) when (searchResultUiState) { SearchResultUiState.Loading, - SearchResultUiState.LoadFailed, + LoadFailed, -> Unit - SearchResultUiState.SearchNotReady -> SearchNotReadyBody() - SearchResultUiState.EmptyQuery, + SearchNotReady -> SearchNotReadyBody() + EmptyQuery, -> { if (recentSearchesUiState is RecentSearchQueriesUiState.Success) { RecentSearchesBody( diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt similarity index 90% rename from feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt rename to feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt index cd31ad8ad..680c97d41 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchUiStatePreviewParameterProvider.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt @@ -16,13 +16,13 @@ @file:Suppress("ktlint:standard:max-line-length") -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.newsResources import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.topics -import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.Success +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Success /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt similarity index 88% rename from feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt rename to feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt index ed1ea1171..99e403d1a 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModel.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel @@ -28,6 +28,11 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.EmptyQuery +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.LoadFailed +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Loading +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.SearchNotReady +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -56,29 +61,29 @@ class SearchViewModel @Inject constructor( searchContentsRepository.getSearchContentsCount() .flatMapLatest { totalCount -> if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT) { - flowOf(SearchResultUiState.SearchNotReady) + flowOf(SearchNotReady) } else { searchQuery.flatMapLatest { query -> if (query.trim().length < SEARCH_QUERY_MIN_LENGTH) { - flowOf(SearchResultUiState.EmptyQuery) + flowOf(EmptyQuery) } else { getSearchContentsUseCase(query) // Not using .asResult() here, because it emits Loading state every // time the user types a letter in the search box, which flickers the screen. .map { data -> - SearchResultUiState.Success( + Success( topics = data.topics, newsResources = data.newsResources, ) } - .catch { emit(SearchResultUiState.LoadFailed) } + .catch { emit(LoadFailed) } } } } }.stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = SearchResultUiState.Loading, + initialValue = Loading, ) val recentSearchQueriesUiState: StateFlow = diff --git a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt new file mode 100644 index 000000000..2cab3139a --- /dev/null +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.search.impl.navigation + +import androidx.compose.runtime.snapshots.SnapshotStateList +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests +import com.google.samples.apps.nowinandroid.feature.search.api.navigation.SearchRouteNav3 +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchRoute +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.multibindings.IntoSet + +@Module +@InstallIn(ActivityComponent::class) +object SearchModule { + + @Provides + @IntoSet + fun provideSearchEntryProviderBuilder( + backStack: NiaBackStack, + ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + entry { key -> + SearchRoute( + onBackClick = backStack::removeLast, + onInterestsClick = key.onInterestsClick, + onTopicClick = backStack::navigateToInterests, + ) + } + } +} \ No newline at end of file diff --git a/feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt b/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt similarity index 92% rename from feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt rename to feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt index 7b719b1cc..8d86f38ce 100644 --- a/feature/search/api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/SearchViewModelTest.kt +++ b/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.search.api +package com.google.samples.apps.nowinandroid.feature.search.impl import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.NoOpAnalyticsHelper @@ -27,10 +27,10 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestSearchCo import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import com.google.samples.apps.nowinandroid.feature.search.api.RecentSearchQueriesUiState.Success -import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.EmptyQuery -import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.Loading -import com.google.samples.apps.nowinandroid.feature.search.api.SearchResultUiState.SearchNotReady +import com.google.samples.apps.nowinandroid.feature.search.impl.RecentSearchQueriesUiState.Success +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.EmptyQuery +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Loading +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.SearchNotReady import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch @@ -102,7 +102,7 @@ class SearchViewModelTest { searchContentsRepository.addTopics(topicsTestData) val result = viewModel.searchResultUiState.value - assertIs(result) + assertIs(result) } @Test diff --git a/feature/topic/api/build.gradle.kts b/feature/topic/api/build.gradle.kts index 00678fa35..7abbfea82 100644 --- a/feature/topic/api/build.gradle.kts +++ b/feature/topic/api/build.gradle.kts @@ -17,7 +17,6 @@ plugins { alias(libs.plugins.nowinandroid.android.feature) alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -28,6 +27,7 @@ dependencies { implementation(projects.core.data) testImplementation(projects.core.testing) + implementation(projects.core.navigation) testImplementation(libs.robolectric) androidTestImplementation(libs.bundles.androidx.compose.ui.test) diff --git a/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt index 315389908..2594eda33 100644 --- a/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt @@ -22,12 +22,18 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen import kotlinx.serialization.Serializable @Serializable data class TopicRoute(val id: String) +fun NiaBackStack.navigateToTopic( + topicId: String, +) { + navigate(TopicRoute(topicId)) +} fun NavController.navigateToTopic(topicId: String, navOptions: NavOptionsBuilder.() -> Unit = {}) { navigate(route = TopicRoute(topicId)) { navOptions() diff --git a/feature/topic/impl/build.gradle.kts b/feature/topic/impl/build.gradle.kts index 528ec4e4a..e79dade7a 100644 --- a/feature/topic/impl/build.gradle.kts +++ b/feature/topic/impl/build.gradle.kts @@ -22,4 +22,16 @@ plugins { android { namespace = "com.google.samples.apps.nowinandroid.feature.topic.impl" +} + +dependencies { + implementation(projects.core.data) + implementation(projects.core.navigation) + implementation(projects.feature.topic.api) + + testImplementation(projects.core.testing) + testImplementation(libs.robolectric) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } \ No newline at end of file diff --git a/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/navigation/TopicEntryProvider.kt b/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/navigation/TopicEntryProvider.kt new file mode 100644 index 000000000..784d74a05 --- /dev/null +++ b/feature/topic/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl/navigation/TopicEntryProvider.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.topic.impl.navigation + +import androidx.compose.runtime.snapshots.SnapshotStateList +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.TopicRoute +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel.Factory +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.multibindings.IntoSet + +@Module +@InstallIn(ActivityComponent::class) +object TopicModule { + + @Provides + @IntoSet + fun provideTopicEntryProviderBuilder( + backStack: NiaBackStack, + ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + entry { key -> + val id = key.id + TopicScreen( + showBackButton = true, + onBackClick = backStack::removeLast, + onTopicClick = backStack::navigateToTopic, + viewModel = hiltViewModel( + key = id, + ) { factory -> + factory.create(id) + }, + ) + } + } +} \ No newline at end of file From c9e38b329a6089c1b02a6713f76de7cf7291e3f7 Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Fri, 11 Jul 2025 13:11:09 -0700 Subject: [PATCH 04/33] Refactor app to navigation3 --- app/build.gradle.kts | 8 + .../samples/apps/nowinandroid/MainActivity.kt | 15 +- .../apps/nowinandroid/di/BackStackProvider.kt | 2 +- .../nowinandroid/navigation/NiaNavDisplay.kt | 42 +++ .../nowinandroid/navigation/NiaNavHost.kt | 2 +- .../navigation/TopLevelDestination.kt | 4 + .../samples/apps/nowinandroid/ui/NiaApp.kt | 58 +++-- .../apps/nowinandroid/ui/NiaAppState.kt | 94 +++---- .../interests2pane/Interests2PaneViewModel.kt | 43 --- .../InterestsListDetailScreen.kt | 244 ------------------ .../ui/InterestsListDetailScreenTest.kt | 204 --------------- .../apps/nowinandroid/ui/NiaAppStateTest.kt | 2 +- .../kotlin/AndroidFeatureConventionPlugin.kt | 1 + .../src/test/resources/robolectric.properties | 17 ++ .../core/navigation/NiaBackStack.kt | 14 +- 15 files changed, 178 insertions(+), 572 deletions(-) create mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt delete mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt delete mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt delete mode 100644 app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt create mode 100644 core/designsystem/src/test/resources/robolectric.properties diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 91a4fb0a2..4cb7745ab 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,10 +69,15 @@ android { dependencies { implementation(projects.feature.interests.api) + implementation(projects.feature.interests.impl) implementation(projects.feature.foryou.api) + implementation(projects.feature.foryou.impl) implementation(projects.feature.bookmarks.api) + implementation(projects.feature.bookmarks.impl) implementation(projects.feature.topic.api) + implementation(projects.feature.topic.impl) implementation(projects.feature.search.api) + implementation(projects.feature.search.impl) implementation(projects.feature.settings.api) implementation(projects.core.common) @@ -82,10 +87,13 @@ dependencies { implementation(projects.core.model) implementation(projects.core.navigation) implementation(projects.core.analytics) + implementation(projects.core.navigation) implementation(projects.sync.work) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) + implementation(libs.androidx.navigation3.runtime) + implementation(libs.androidx.navigation3.ui) implementation(libs.androidx.compose.material3.adaptive) implementation(libs.androidx.compose.material3.adaptive.layout) implementation(libs.androidx.compose.material3.adaptive.navigation) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index ecc23d80e..03557441b 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -32,6 +32,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.metrics.performance.JankStats +import androidx.navigation3.runtime.EntryProviderBuilder import androidx.tracing.trace import com.google.samples.apps.nowinandroid.MainActivityUiState.Loading import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper @@ -41,6 +42,7 @@ import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack import com.google.samples.apps.nowinandroid.ui.NiaApp import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme @@ -72,9 +74,14 @@ class MainActivity : ComponentActivity() { @Inject lateinit var userNewsResourceRepository: UserNewsResourceRepository - private val viewModel: MainActivityViewModel by viewModels() + @Inject + lateinit var niaBackStack: NiaBackStack + + @Inject + lateinit var entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit> + override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) @@ -137,6 +144,7 @@ class MainActivity : ComponentActivity() { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = niaBackStack, ) val currentTimeZone by appState.currentTimeZone.collectAsStateWithLifecycle() @@ -150,7 +158,10 @@ class MainActivity : ComponentActivity() { androidTheme = themeSettings.androidTheme, disableDynamicTheming = themeSettings.disableDynamicTheming, ) { - NiaApp(appState) + NiaApp( + appState, + entryProviderBuilders + ) } } } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt index 877e93910..aa089a4d8 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt @@ -30,5 +30,5 @@ object NiaAppNavigation { @Provides @Singleton fun provideNiaBackStack(): NiaBackStack = - NiaBackStack(startKey = TopLevelDestination.FOR_YOU) + NiaBackStack(startKey = TopLevelDestination.FOR_YOU.key) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt new file mode 100644 index 000000000..48ab8a7b3 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.snapshots.SnapshotStateList +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.NavEntryDecorator +import androidx.navigation3.runtime.entryProvider +import androidx.navigation3.ui.NavDisplay +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack + +@Composable +fun NiaNavDisplay( + niaBackStack: NiaBackStack, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, +) { + NavDisplay( + backStack = niaBackStack.backStack, + onBack = { niaBackStack.removeLast() }, + entryProvider = entryProvider { + entryProviderBuilders.forEach { builder -> + builder() + } + }, + ) +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index 1f8f88686..ec4224efd 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -28,7 +28,7 @@ import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigat import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.topicScreen import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.ui.NiaAppState -import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetailScreen +import com.google.samples.apps.nowinandroid.feature.interests.impl.interestsListDetailScreen /** * Top-level navigation graph. Navigation is organized as explained at diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 68f7c6b1a..edce9517a 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -50,6 +50,7 @@ enum class TopLevelDestination( @StringRes val titleTextId: Int, val route: KClass<*>, val baseRoute: KClass<*> = route, + val key: Any ) { FOR_YOU( selectedIcon = NiaIcons.Upcoming, @@ -58,6 +59,7 @@ enum class TopLevelDestination( titleTextId = R.string.app_name, route = ForYouRoute::class, baseRoute = ForYouBaseRoute::class, + key = ForYouBaseRoute ), BOOKMARKS( selectedIcon = NiaIcons.Bookmarks, @@ -65,6 +67,7 @@ enum class TopLevelDestination( iconTextId = bookmarksR.string.feature_bookmarks_impl_title, titleTextId = bookmarksR.string.feature_bookmarks_impl_title, route = BookmarksRoute::class, + key = BookmarksRoute ), INTERESTS( selectedIcon = NiaIcons.Grid3x3, @@ -72,5 +75,6 @@ enum class TopLevelDestination( iconTextId = searchR.string.feature_search_api_interests, titleTextId = searchR.string.feature_search_api_interests, route = InterestsRoute::class, + key = InterestsRoute(null) ), } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index fe2d758ee..9a65765c0 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -33,15 +33,14 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarDuration.Indefinite -import androidx.compose.material3.SnackbarDuration.Short import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.SnackbarResult.ActionPerformed import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -63,6 +62,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavDestination.Companion.hierarchy +import androidx.navigation3.runtime.EntryProviderBuilder import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaGradientBackground @@ -71,8 +71,9 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog -import com.google.samples.apps.nowinandroid.navigation.NiaNavHost +import com.google.samples.apps.nowinandroid.navigation.NiaNavDisplay import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import kotlin.reflect.KClass import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @@ -80,6 +81,7 @@ import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @Composable fun NiaApp( appState: NiaAppState, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, modifier: Modifier = Modifier, windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), ) { @@ -109,15 +111,16 @@ fun NiaApp( ) } } - - NiaApp( - appState = appState, - snackbarHostState = snackbarHostState, - showSettingsDialog = showSettingsDialog, - onSettingsDismissed = { showSettingsDialog = false }, - onTopAppBarActionClick = { showSettingsDialog = true }, - windowAdaptiveInfo = windowAdaptiveInfo, - ) + CompositionLocalProvider(LocalSnackbarHostState provides snackbarHostState) { + NiaApp( + appState = appState, + entryProviderBuilders = entryProviderBuilders, + showSettingsDialog = showSettingsDialog, + onSettingsDismissed = { showSettingsDialog = false }, + onTopAppBarActionClick = { showSettingsDialog = true }, + windowAdaptiveInfo = windowAdaptiveInfo, + ) + } } } } @@ -129,7 +132,7 @@ fun NiaApp( ) internal fun NiaApp( appState: NiaAppState, - snackbarHostState: SnackbarHostState, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, showSettingsDialog: Boolean, onSettingsDismissed: () -> Unit, onTopAppBarActionClick: () -> Unit, @@ -138,7 +141,8 @@ internal fun NiaApp( ) { val unreadDestinations by appState.topLevelDestinationsWithUnreadResources .collectAsStateWithLifecycle() - val currentDestination = appState.currentDestination + val currentTopLevelKey = appState.currentTopLevelDestination + if (showSettingsDialog) { SettingsDialog( @@ -146,12 +150,16 @@ internal fun NiaApp( ) } + val snackbarHostState = LocalSnackbarHostState.current + NiaNavigationSuiteScaffold( navigationSuiteItems = { appState.topLevelDestinations.forEach { destination -> val hasUnread = unreadDestinations.contains(destination) - val selected = currentDestination - .isRouteInHierarchy(destination.baseRoute) +// val selected = currentDestination +// .isRouteInHierarchy(destination.baseRoute) + val selected = destination.key == currentTopLevelKey + println("cfok destination:$destination, currentDest:$currentTopLevelKey") item( selected = selected, onClick = { appState.navigateToTopLevelDestination(destination) }, @@ -225,7 +233,7 @@ internal fun NiaApp( containerColor = Color.Transparent, ), onActionClick = { onTopAppBarActionClick() }, - onNavigationClick = { appState.navigateToSearch() }, + onNavigationClick = { appState.navigateToSearchNav3() }, ) } @@ -239,15 +247,13 @@ internal fun NiaApp( }, ), ) { - NiaNavHost( - appState = appState, - onShowSnackbar = { message, action -> - snackbarHostState.showSnackbar( - message = message, - actionLabel = action, - duration = Short, - ) == ActionPerformed - }, +// NiaNavHost( +// appState = appState, +// onShowSnackbar = onShowSnackbar, +// ) + NiaNavDisplay( + niaBackStack = appState.niaBackStack, + entryProviderBuilders, ) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 4c1d23318..0eba2d0db 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -18,26 +18,19 @@ package com.google.samples.apps.nowinandroid.ui import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.navigation.NavController import androidx.navigation.NavDestination -import androidx.navigation.NavDestination.Companion.hasRoute -import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController -import androidx.navigation.navOptions -import androidx.tracing.trace import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank -import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.navigateToBookmarks -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.navigateToForYou -import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.api.navigation.navigateToSearch +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU @@ -55,11 +48,13 @@ fun rememberNiaAppState( networkMonitor: NetworkMonitor, userNewsResourceRepository: UserNewsResourceRepository, timeZoneMonitor: TimeZoneMonitor, + niaBackStack: NiaBackStack, coroutineScope: CoroutineScope = rememberCoroutineScope(), navController: NavHostController = rememberNavController(), ): NiaAppState { NavigationTrackingSideEffect(navController) return remember( + niaBackStack, navController, coroutineScope, networkMonitor, @@ -67,6 +62,7 @@ fun rememberNiaAppState( timeZoneMonitor, ) { NiaAppState( + niaBackStack = niaBackStack, navController = navController, coroutineScope = coroutineScope, networkMonitor = networkMonitor, @@ -78,6 +74,7 @@ fun rememberNiaAppState( @Stable class NiaAppState( + val niaBackStack: NiaBackStack, val navController: NavHostController, coroutineScope: CoroutineScope, networkMonitor: NetworkMonitor, @@ -86,24 +83,25 @@ class NiaAppState( ) { private val previousDestination = mutableStateOf(null) - val currentDestination: NavDestination? - @Composable get() { - // Collect the currentBackStackEntryFlow as a state - val currentEntry = navController.currentBackStackEntryFlow - .collectAsState(initial = null) - - // Fallback to previousDestination if currentEntry is null - return currentEntry.value?.destination.also { destination -> - if (destination != null) { - previousDestination.value = destination - } - } ?: previousDestination.value - } +// val currentDestination: NavDestination? +// @Composable get() { +// // Collect the currentBackStackEntryFlow as a state +// val currentEntry = navController.currentBackStackEntryFlow +// .collectAsState(initial = null) +// +// // Fallback to previousDestination if currentEntry is null +// return currentEntry.value?.destination.also { destination -> +// if (destination != null) { +// previousDestination.value = destination +// } +// } ?: previousDestination.value +// } val currentTopLevelDestination: TopLevelDestination? @Composable get() { return TopLevelDestination.entries.firstOrNull { topLevelDestination -> - currentDestination?.hasRoute(route = topLevelDestination.route) == true + topLevelDestination.key == niaBackStack.currentTopLevelKey +// currentDestination?.hasRoute(route = topLevelDestination.route) == true } } @@ -152,31 +150,37 @@ class NiaAppState( * * @param topLevelDestination: The destination the app needs to navigate to. */ - fun navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) { - trace("Navigation: ${topLevelDestination.name}") { - val topLevelNavOptions = navOptions { - // Pop up to the start destination of the graph to - // avoid building up a large stack of destinations - // on the back stack as users select items - popUpTo(navController.graph.findStartDestination().id) { - saveState = true - } - // Avoid multiple copies of the same destination when - // reselecting the same item - launchSingleTop = true - // Restore state when reselecting a previously selected item - restoreState = true - } - - when (topLevelDestination) { - FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) - BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) - INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) - } - } + fun navigateToTopLevelDestination( + topLevelDestination: TopLevelDestination, + ) { + niaBackStack.navigateToTopLevelDestination(topLevelDestination.key) +// trace("Navigation: ${topLevelDestination.name}") { +// val topLevelNavOptions = navOptions { +// // Pop up to the start destination of the graph to +// // avoid building up a large stack of destinations +// // on the back stack as users select items +// popUpTo(navController.graph.findStartDestination().id) { +// saveState = true +// } +// // Avoid multiple copies of the same destination when +// // reselecting the same item +// launchSingleTop = true +// // Restore state when reselecting a previously selected item +// restoreState = true +// } +// +// when (topLevelDestination) { +// FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) +// BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) +// INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) +// } +// } } fun navigateToSearch() = navController.navigateToSearch() + fun navigateToSearchNav3() = niaBackStack.navigateToSearch( + onInterestsClick = { navigateToTopLevelDestination(INTERESTS) } + ) } /** @@ -195,4 +199,4 @@ private fun NavigationTrackingSideEffect(navController: NavHostController) { navController.removeOnDestinationChangedListener(listener) } } -} +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt deleted file mode 100644 index 83978a6f4..000000000 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.ui.interests2pane - -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel -import androidx.navigation.toRoute -import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject - -const val TOPIC_ID_KEY = "selectedTopicId" - -@HiltViewModel -class Interests2PaneViewModel @Inject constructor( - private val savedStateHandle: SavedStateHandle, -) : ViewModel() { - - val route = savedStateHandle.toRoute() - val selectedTopicId: StateFlow = savedStateHandle.getStateFlow( - key = TOPIC_ID_KEY, - initialValue = route.initialTopicId, - ) - - fun onTopicClick(topicId: String?) { - savedStateHandle[TOPIC_ID_KEY] = topicId - } -} diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt deleted file mode 100644 index 07e93eee1..000000000 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt +++ /dev/null @@ -1,244 +0,0 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.ui.interests2pane - -import androidx.activity.compose.BackHandler -import androidx.compose.animation.AnimatedContent -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Box -import androidx.compose.material3.LocalMinimumInteractiveComponentSize -import androidx.compose.material3.VerticalDragHandle -import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi -import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo -import androidx.compose.material3.adaptive.layout.AnimatedPane -import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole -import androidx.compose.material3.adaptive.layout.PaneAdaptedValue -import androidx.compose.material3.adaptive.layout.PaneExpansionAnchor -import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldDestinationItem -import androidx.compose.material3.adaptive.layout.calculatePaneScaffoldDirective -import androidx.compose.material3.adaptive.layout.defaultDragHandleSemantics -import androidx.compose.material3.adaptive.layout.rememberPaneExpansionState -import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior -import androidx.compose.material3.adaptive.navigation.NavigableListDetailPaneScaffold -import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator -import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldPredictiveBackHandler -import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clipToBounds -import androidx.compose.ui.layout.layout -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import com.google.samples.apps.nowinandroid.feature.interests.api.InterestsRoute -import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute -import com.google.samples.apps.nowinandroid.feature.topic.api.TopicDetailPlaceholder -import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen -import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel -import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.TopicRoute -import kotlinx.coroutines.launch -import kotlinx.serialization.Serializable -import kotlin.math.max - -@Serializable internal object TopicPlaceholderRoute - -fun NavGraphBuilder.interestsListDetailScreen() { - composable { - InterestsListDetailScreen() - } -} - -@Composable -internal fun InterestsListDetailScreen( - viewModel: Interests2PaneViewModel = hiltViewModel(), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), -) { - val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() - InterestsListDetailScreen( - selectedTopicId = selectedTopicId, - onTopicClick = viewModel::onTopicClick, - windowAdaptiveInfo = windowAdaptiveInfo, - ) -} - -@OptIn(ExperimentalMaterial3AdaptiveApi::class) -@Composable -internal fun InterestsListDetailScreen( - selectedTopicId: String?, - onTopicClick: (String) -> Unit, - windowAdaptiveInfo: WindowAdaptiveInfo, -) { - val listDetailNavigator = rememberListDetailPaneScaffoldNavigator( - scaffoldDirective = calculatePaneScaffoldDirective(windowAdaptiveInfo), - initialDestinationHistory = listOfNotNull( - ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.List), - ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.Detail).takeIf { - selectedTopicId != null - }, - ), - ) - val coroutineScope = rememberCoroutineScope() - - val paneExpansionState = rememberPaneExpansionState( - anchors = listOf( - PaneExpansionAnchor.Proportion(0f), - PaneExpansionAnchor.Proportion(0.5f), - PaneExpansionAnchor.Proportion(1f), - ), - ) - - ThreePaneScaffoldPredictiveBackHandler( - listDetailNavigator, - BackNavigationBehavior.PopUntilScaffoldValueChange, - ) - BackHandler( - paneExpansionState.currentAnchor == PaneExpansionAnchor.Proportion(0f) && - listDetailNavigator.isListPaneVisible() && - listDetailNavigator.isDetailPaneVisible(), - ) { - coroutineScope.launch { - paneExpansionState.animateTo(PaneExpansionAnchor.Proportion(1f)) - } - } - - var topicRoute by remember { - val route = selectedTopicId?.let { TopicRoute(id = it) } ?: TopicPlaceholderRoute - mutableStateOf(route) - } - - fun onTopicClickShowDetailPane(topicId: String) { - onTopicClick(topicId) - topicRoute = TopicRoute(id = topicId) - coroutineScope.launch { - listDetailNavigator.navigateTo(ListDetailPaneScaffoldRole.Detail) - } - if (paneExpansionState.currentAnchor == PaneExpansionAnchor.Proportion(1f)) { - coroutineScope.launch { - paneExpansionState.animateTo(PaneExpansionAnchor.Proportion(0f)) - } - } - } - - val mutableInteractionSource = remember { MutableInteractionSource() } - val minPaneWidth = 300.dp - - NavigableListDetailPaneScaffold( - navigator = listDetailNavigator, - listPane = { - AnimatedPane { - Box( - modifier = Modifier.clipToBounds() - .layout { measurable, constraints -> - val width = max(minPaneWidth.roundToPx(), constraints.maxWidth) - val placeable = measurable.measure( - constraints.copy( - minWidth = minPaneWidth.roundToPx(), - maxWidth = width, - ), - ) - layout(constraints.maxWidth, placeable.height) { - placeable.placeRelative( - x = 0, - y = 0, - ) - } - }, - ) { - InterestsRoute( - onTopicClick = ::onTopicClickShowDetailPane, - shouldHighlightSelectedTopic = listDetailNavigator.isDetailPaneVisible(), - ) - } - } - }, - detailPane = { - AnimatedPane { - Box( - modifier = Modifier.clipToBounds() - .layout { measurable, constraints -> - val width = max(minPaneWidth.roundToPx(), constraints.maxWidth) - val placeable = measurable.measure( - constraints.copy( - minWidth = minPaneWidth.roundToPx(), - maxWidth = width, - ), - ) - layout(constraints.maxWidth, placeable.height) { - placeable.placeRelative( - x = constraints.maxWidth - - max(constraints.maxWidth, placeable.width), - y = 0, - ) - } - }, - ) { - AnimatedContent(topicRoute) { route -> - when (route) { - is TopicRoute -> { - TopicScreen( - showBackButton = !listDetailNavigator.isListPaneVisible(), - onBackClick = { - coroutineScope.launch { - listDetailNavigator.navigateBack() - } - }, - onTopicClick = ::onTopicClickShowDetailPane, - viewModel = hiltViewModel( - key = route.id, - ) { factory -> - factory.create(route.id) - }, - ) - } - is TopicPlaceholderRoute -> { - TopicDetailPlaceholder() - } - } - } - } - } - }, - paneExpansionState = paneExpansionState, - paneExpansionDragHandle = { - VerticalDragHandle( - modifier = Modifier.paneExpansionDraggable( - state = paneExpansionState, - minTouchTargetSize = LocalMinimumInteractiveComponentSize.current, - interactionSource = mutableInteractionSource, - semanticsProperties = paneExpansionState.defaultDragHandleSemantics(), - ), - interactionSource = mutableInteractionSource, - ) - }, - ) -} - -@OptIn(ExperimentalMaterial3AdaptiveApi::class) -private fun ThreePaneScaffoldNavigator.isListPaneVisible(): Boolean = - scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded - -@OptIn(ExperimentalMaterial3AdaptiveApi::class) -private fun ThreePaneScaffoldNavigator.isDetailPaneVisible(): Boolean = - scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt deleted file mode 100644 index 682f4983f..000000000 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.ui - -import androidx.activity.compose.BackHandler -import androidx.annotation.StringRes -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.assertIsNotDisplayed -import androidx.compose.ui.test.junit4.AndroidComposeTestRule -import androidx.compose.ui.test.junit4.createAndroidComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.test.onNodeWithText -import androidx.compose.ui.test.performClick -import androidx.test.espresso.Espresso -import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository -import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.core.model.data.Topic -import com.google.samples.apps.nowinandroid.ui.interests2pane.InterestsListDetailScreen -import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity -import dagger.hilt.android.testing.HiltAndroidRule -import dagger.hilt.android.testing.HiltAndroidTest -import dagger.hilt.android.testing.HiltTestApplication -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config -import javax.inject.Inject -import kotlin.properties.ReadOnlyProperty -import kotlin.test.assertTrue -import com.google.samples.apps.nowinandroid.feature.topic.api.R as FeatureTopicR - -private const val EXPANDED_WIDTH = "w1200dp-h840dp" -private const val COMPACT_WIDTH = "w412dp-h915dp" - -@HiltAndroidTest -@RunWith(RobolectricTestRunner::class) -@Config(application = HiltTestApplication::class) -class InterestsListDetailScreenTest { - - @get:Rule(order = 0) - val hiltRule = HiltAndroidRule(this) - - @get:Rule(order = 1) - val composeTestRule = createAndroidComposeRule() - - @Inject - lateinit var topicsRepository: TopicsRepository - - /** Convenience function for getting all topics during tests, */ - private fun getTopics(): List = runBlocking { - topicsRepository.getTopics().first().sortedBy { it.name } - } - - // The strings used for matching in these tests. - private val placeholderText by composeTestRule.stringResource(FeatureTopicR.string.feature_topic_select_an_interest) - private val listPaneTag = "interests:topics" - - private val Topic.testTag - get() = "topic:${this.id}" - - @Before - fun setup() { - hiltRule.inject() - } - - @Test - @Config(qualifiers = EXPANDED_WIDTH) - fun expandedWidth_initialState_showsTwoPanesWithPlaceholder() { - composeTestRule.apply { - setContent { - NiaTheme { - InterestsListDetailScreen() - } - } - - onNodeWithTag(listPaneTag).assertIsDisplayed() - onNodeWithText(placeholderText).assertIsDisplayed() - } - } - - @Test - @Config(qualifiers = COMPACT_WIDTH) - fun compactWidth_initialState_showsListPane() { - composeTestRule.apply { - setContent { - NiaTheme { - InterestsListDetailScreen() - } - } - - onNodeWithTag(listPaneTag).assertIsDisplayed() - onNodeWithText(placeholderText).assertIsNotDisplayed() - } - } - - @Test - @Config(qualifiers = EXPANDED_WIDTH) - fun expandedWidth_topicSelected_updatesDetailPane() { - composeTestRule.apply { - setContent { - NiaTheme { - InterestsListDetailScreen() - } - } - - val firstTopic = getTopics().first() - onNodeWithText(firstTopic.name).performClick() - - onNodeWithTag(listPaneTag).assertIsDisplayed() - onNodeWithText(placeholderText).assertIsNotDisplayed() - onNodeWithTag(firstTopic.testTag).assertIsDisplayed() - } - } - - @Test - @Config(qualifiers = COMPACT_WIDTH) - fun compactWidth_topicSelected_showsTopicDetailPane() { - composeTestRule.apply { - setContent { - NiaTheme { - InterestsListDetailScreen() - } - } - - val firstTopic = getTopics().first() - onNodeWithText(firstTopic.name).performClick() - - onNodeWithTag(listPaneTag).assertIsNotDisplayed() - onNodeWithText(placeholderText).assertIsNotDisplayed() - onNodeWithTag(firstTopic.testTag).assertIsDisplayed() - } - } - - @Test - @Config(qualifiers = EXPANDED_WIDTH) - fun expandedWidth_backPressFromTopicDetail_leavesInterests() { - var unhandledBackPress = false - composeTestRule.apply { - setContent { - NiaTheme { - // Back press should not be handled by the two pane layout, and thus - // "fall through" to this BackHandler. - BackHandler { - unhandledBackPress = true - } - InterestsListDetailScreen() - } - } - - val firstTopic = getTopics().first() - onNodeWithText(firstTopic.name).performClick() - - waitForIdle() - Espresso.pressBack() - - assertTrue(unhandledBackPress) - } - } - - @Test - @Config(qualifiers = COMPACT_WIDTH) - fun compactWidth_backPressFromTopicDetail_showsListPane() { - composeTestRule.apply { - setContent { - NiaTheme { - InterestsListDetailScreen() - } - } - - val firstTopic = getTopics().first() - onNodeWithText(firstTopic.name).performClick() - - waitForIdle() - Espresso.pressBack() - - onNodeWithTag(listPaneTag).assertIsDisplayed() - onNodeWithText(placeholderText).assertIsNotDisplayed() - onNodeWithTag(firstTopic.testTag).assertIsNotDisplayed() - } - } -} - -private fun AndroidComposeTestRule<*, *>.stringResource( - @StringRes resId: Int, -): ReadOnlyProperty = - ReadOnlyProperty { _, _ -> activity.getString(resId) } diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index c6ddb54fb..e64a133d5 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -85,7 +85,7 @@ class NiaAppStateTest { } // Update currentDestination whenever it changes - currentDestination = state.currentDestination?.route + currentDestination = state.niaBackStack.currentKey // Navigate to destination b once LaunchedEffect(Unit) { diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 343bd4859..2a20cdbf1 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -43,6 +43,7 @@ class AndroidFeatureConventionPlugin : Plugin { "implementation"(libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) "implementation"(libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) "implementation"(libs.findLibrary("androidx.navigation.compose").get()) + "implementation"(libs.findLibrary("androidx.navigation3.runtime").get()) "implementation"(libs.findLibrary("androidx.tracing.ktx").get()) "implementation"(libs.findLibrary("kotlinx.serialization.json").get()) diff --git a/core/designsystem/src/test/resources/robolectric.properties b/core/designsystem/src/test/resources/robolectric.properties new file mode 100644 index 000000000..ca82be153 --- /dev/null +++ b/core/designsystem/src/test/resources/robolectric.properties @@ -0,0 +1,17 @@ +# +# Copyright 2025 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. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +sdk = 35 \ No newline at end of file diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt index 824ee3205..73934fe77 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.core.navigation +import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf @@ -35,9 +36,12 @@ class NiaBackStack @Inject constructor( ) // Expose the current top level route for consumers - var topLevelKey by mutableStateOf(startKey) + var currentTopLevelKey by mutableStateOf(startKey) private set + internal val currentKey: Any + @Composable get() = topLevelStacks[currentTopLevelKey]!!.last() + private fun updateBackStack() = backStack.apply { clear() @@ -56,21 +60,21 @@ class NiaBackStack @Inject constructor( } } } - topLevelKey = key + currentTopLevelKey = key updateBackStack() } fun navigate(key: Any){ println("cfok navigate $key") - topLevelStacks[topLevelKey]?.add(key) + topLevelStacks[currentTopLevelKey]?.add(key) updateBackStack() } fun removeLast(){ - val removedKey = topLevelStacks[topLevelKey]?.removeLastOrNull() + val removedKey = topLevelStacks[currentTopLevelKey]?.removeLastOrNull() // If the removed key was a top level key, remove the associated top level stack topLevelStacks.remove(removedKey) - topLevelKey = topLevelStacks.keys.last() + currentTopLevelKey = topLevelStacks.keys.last() updateBackStack() } From 4a8eaba4081ae1f61271e28a5405d570d19c196e Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Fri, 11 Jul 2025 13:04:12 -0700 Subject: [PATCH 05/33] Refactor Interests to ListDetailScene --- app/build.gradle.kts | 4 +-- .../samples/apps/nowinandroid/MainActivity.kt | 3 ++- .../apps/nowinandroid/di/BackStackProvider.kt | 2 +- .../nowinandroid/navigation/NiaNavDisplay.kt | 19 +++++++++++--- .../nowinandroid/navigation/NiaNavHost.kt | 4 +-- .../navigation/TopLevelDestination.kt | 10 +++---- .../samples/apps/nowinandroid/ui/NiaApp.kt | 13 +++++----- .../apps/nowinandroid/ui/NiaAppState.kt | 11 ++------ core/navigation/build.gradle.kts | 2 +- .../core/navigation/NiaBackStack.kt | 24 +++++++++-------- feature/bookmarks/api/build.gradle.kts | 4 +++ .../api/navigation/BookmarksNavigation.kt | 3 ++- feature/bookmarks/impl/build.gradle.kts | 1 - .../bookmarks/impl/BookmarksScreenTest.kt | 7 ++--- .../feature/bookmarks/impl/BookmarksScreen.kt | 2 +- .../impl/navigation/BookmarksEntryProvider.kt | 9 ++++--- feature/foryou/api/build.gradle.kts | 13 +--------- .../foryou/api/navigation/ForYouNavigation.kt | 5 ++-- feature/foryou/impl/build.gradle.kts | 1 - .../impl/navigation/ForYouEntryProvider.kt | 7 ++--- feature/interests/api/build.gradle.kts | 2 +- .../api/navigation/InterestsNavigation.kt | 5 ++-- feature/interests/impl/build.gradle.kts | 1 + .../interests/impl/InterestsEntryProvider.kt | 25 ++++++++++++++---- .../impl/InterestsListDetailScreen.kt | 4 +-- .../feature/interests/impl/InterestsScreen.kt | 2 +- .../impl/InterestsListDetailScreenTest.kt | 13 +++++----- feature/search/api/build.gradle.kts | 2 +- .../search/api/navigation/SearchNavigation.kt | 9 +++---- feature/search/impl/build.gradle.kts | 2 +- .../feature/search/impl/SearchScreen.kt | 14 ++++------ .../SearchUiStatePreviewParameterProvider.kt | 3 +-- .../feature/search/impl/SearchViewModel.kt | 15 ++++------- .../impl/navigation/SearchEntryProvider.kt | 15 ++++++----- .../search/impl/SearchViewModelTest.kt | 4 +-- feature/topic/api/build.gradle.kts | 2 +- .../topic/api/navigation/TopicNavigation.kt | 3 ++- ...feature_topic_api_ic_topic_placeholder.xml | 26 +++++++++---------- feature/topic/impl/build.gradle.kts | 3 ++- .../impl/navigation/TopicEntryProvider.kt | 11 ++++++-- gradle/libs.versions.toml | 5 +++- settings.gradle.kts | 3 +++ 42 files changed, 169 insertions(+), 144 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4cb7745ab..055b87c10 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -85,24 +85,24 @@ dependencies { implementation(projects.core.designsystem) implementation(projects.core.data) implementation(projects.core.model) - implementation(projects.core.navigation) implementation(projects.core.analytics) implementation(projects.core.navigation) implementation(projects.sync.work) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) - implementation(libs.androidx.navigation3.runtime) implementation(libs.androidx.navigation3.ui) implementation(libs.androidx.compose.material3.adaptive) implementation(libs.androidx.compose.material3.adaptive.layout) implementation(libs.androidx.compose.material3.adaptive.navigation) + implementation(libs.androidx.compose.material3.adaptive.navigation3) implementation(libs.androidx.compose.material3.windowSizeClass) implementation(libs.androidx.compose.runtime.tracing) implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.splashscreen) implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.lifecycle.runtimeCompose) + implementation(libs.androidx.lifecycle.viewModel.navigation3) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.profileinstaller) implementation(libs.androidx.tracing.ktx) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index 03557441b..64539c4dd 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -43,6 +43,7 @@ import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.ui.NiaApp import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme @@ -80,7 +81,7 @@ class MainActivity : ComponentActivity() { lateinit var niaBackStack: NiaBackStack @Inject - lateinit var entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit> + lateinit var entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit> override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt index aa089a4d8..174bd677f 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt @@ -26,7 +26,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -object NiaAppNavigation { +object BackStackProvider { @Provides @Singleton fun provideNiaBackStack(): NiaBackStack = diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt index 48ab8a7b3..45f0e61b2 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt @@ -16,23 +16,36 @@ package com.google.samples.apps.nowinandroid.navigation +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.navigation3.rememberListDetailSceneStrategy import androidx.compose.runtime.Composable import androidx.compose.runtime.compositionLocalOf -import androidx.compose.runtime.snapshots.SnapshotStateList +import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator import androidx.navigation3.runtime.EntryProviderBuilder -import androidx.navigation3.runtime.NavEntryDecorator import androidx.navigation3.runtime.entryProvider +import androidx.navigation3.runtime.rememberSavedStateNavEntryDecorator import androidx.navigation3.ui.NavDisplay +import androidx.navigation3.ui.rememberSceneSetupNavEntryDecorator import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +@OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable fun NiaNavDisplay( niaBackStack: NiaBackStack, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, ) { + val listDetailStrategy = rememberListDetailSceneStrategy() + NavDisplay( backStack = niaBackStack.backStack, + sceneStrategy = listDetailStrategy, onBack = { niaBackStack.removeLast() }, + entryDecorators = listOf( + rememberSceneSetupNavEntryDecorator(), + rememberSavedStateNavEntryDecorator(), + rememberViewModelStoreNavEntryDecorator(), + ), entryProvider = entryProvider { entryProviderBuilders.forEach { builder -> builder() diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index ec4224efd..eb3e78b22 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.bookmarksScreen -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.forYouSection import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.api.navigation.searchScreen @@ -46,7 +46,7 @@ fun NiaNavHost( val navController = appState.navController NavHost( navController = navController, - startDestination = ForYouBaseRoute, + startDestination = ForYouRoute, modifier = modifier, ) { forYouSection( diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index edce9517a..0ee6008e7 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -20,8 +20,8 @@ import androidx.annotation.StringRes import androidx.compose.ui.graphics.vector.ImageVector import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import kotlin.reflect.KClass @@ -49,8 +49,7 @@ enum class TopLevelDestination( @StringRes val iconTextId: Int, @StringRes val titleTextId: Int, val route: KClass<*>, - val baseRoute: KClass<*> = route, - val key: Any + val key: NiaBackStackKey ) { FOR_YOU( selectedIcon = NiaIcons.Upcoming, @@ -58,8 +57,7 @@ enum class TopLevelDestination( iconTextId = forYouR.string.feature_foryou_api_title, titleTextId = R.string.app_name, route = ForYouRoute::class, - baseRoute = ForYouBaseRoute::class, - key = ForYouBaseRoute + key = ForYouRoute ), BOOKMARKS( selectedIcon = NiaIcons.Bookmarks, @@ -78,3 +76,5 @@ enum class TopLevelDestination( key = InterestsRoute(null) ), } + +internal val TopLevelDestinations = TopLevelDestination.entries.associateBy { dest -> dest.key } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 9a65765c0..d0e246489 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -71,7 +71,9 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState +import com.google.samples.apps.nowinandroid.feature.search.api.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog import com.google.samples.apps.nowinandroid.navigation.NiaNavDisplay import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination @@ -81,7 +83,7 @@ import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @Composable fun NiaApp( appState: NiaAppState, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, modifier: Modifier = Modifier, windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), ) { @@ -132,7 +134,7 @@ fun NiaApp( ) internal fun NiaApp( appState: NiaAppState, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, showSettingsDialog: Boolean, onSettingsDismissed: () -> Unit, onTopAppBarActionClick: () -> Unit, @@ -141,7 +143,7 @@ internal fun NiaApp( ) { val unreadDestinations by appState.topLevelDestinationsWithUnreadResources .collectAsStateWithLifecycle() - val currentTopLevelKey = appState.currentTopLevelDestination + val currentTopLevelKey = appState.currentTopLevelDestination!!.key if (showSettingsDialog) { @@ -156,10 +158,7 @@ internal fun NiaApp( navigationSuiteItems = { appState.topLevelDestinations.forEach { destination -> val hasUnread = unreadDestinations.contains(destination) -// val selected = currentDestination -// .isRouteInHierarchy(destination.baseRoute) val selected = destination.key == currentTopLevelKey - println("cfok destination:$destination, currentDest:$currentTopLevelKey") item( selected = selected, onClick = { appState.navigateToTopLevelDestination(destination) }, @@ -233,7 +232,7 @@ internal fun NiaApp( containerColor = Color.Transparent, ), onActionClick = { onTopAppBarActionClick() }, - onNavigationClick = { appState.navigateToSearchNav3() }, + onNavigationClick = { appState.niaBackStack.navigateToSearch() }, ) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 0eba2d0db..91a0bddfb 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -35,6 +35,7 @@ import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS +import com.google.samples.apps.nowinandroid.navigation.TopLevelDestinations import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -98,12 +99,7 @@ class NiaAppState( // } val currentTopLevelDestination: TopLevelDestination? - @Composable get() { - return TopLevelDestination.entries.firstOrNull { topLevelDestination -> - topLevelDestination.key == niaBackStack.currentTopLevelKey -// currentDestination?.hasRoute(route = topLevelDestination.route) == true - } - } + @Composable get() = TopLevelDestinations[niaBackStack.currentTopLevelKey] val isOffline = networkMonitor.isOnline .map(Boolean::not) @@ -178,9 +174,6 @@ class NiaAppState( } fun navigateToSearch() = navController.navigateToSearch() - fun navigateToSearchNav3() = niaBackStack.navigateToSearch( - onInterestsClick = { navigateToTopLevelDestination(INTERESTS) } - ) } /** diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts index 3ee05ccb8..e2c42a274 100644 --- a/core/navigation/build.gradle.kts +++ b/core/navigation/build.gradle.kts @@ -4,5 +4,5 @@ plugins { } dependencies { - implementation(libs.androidx.navigation3.runtime) + api(libs.androidx.navigation3.runtime) } diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt index 73934fe77..0b0962206 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt @@ -16,7 +16,6 @@ package com.google.samples.apps.nowinandroid.core.navigation -import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf @@ -26,12 +25,12 @@ import javax.inject.Inject import kotlin.collections.remove class NiaBackStack @Inject constructor( - startKey: Any, + startKey: NiaBackStackKey, ) { val backStack = mutableStateListOf(startKey) // Maintain a stack for each top level route - private var topLevelStacks : LinkedHashMap> = linkedMapOf( + private var topLevelStacks : LinkedHashMap> = linkedMapOf( startKey to mutableStateListOf(startKey) ) @@ -39,8 +38,8 @@ class NiaBackStack @Inject constructor( var currentTopLevelKey by mutableStateOf(startKey) private set - internal val currentKey: Any - @Composable get() = topLevelStacks[currentTopLevelKey]!!.last() + internal val currentKey: NiaBackStackKey + get() = topLevelStacks[currentTopLevelKey]!!.last() private fun updateBackStack() = backStack.apply { @@ -48,7 +47,7 @@ class NiaBackStack @Inject constructor( addAll(topLevelStacks.flatMap { it.value }) } - fun navigateToTopLevelDestination(key: Any){ + fun navigateToTopLevelDestination(key: NiaBackStackKey){ // If the top level doesn't exist, add it if (topLevelStacks[key] == null){ topLevelStacks.put(key, mutableStateListOf(key)) @@ -60,14 +59,16 @@ class NiaBackStack @Inject constructor( } } } + currentTopLevelKey = key updateBackStack() } - fun navigate(key: Any){ - println("cfok navigate $key") - topLevelStacks[currentTopLevelKey]?.add(key) - updateBackStack() + fun navigate(key: NiaBackStackKey){ + if (backStack.lastOrNull() != key) { + topLevelStacks[currentTopLevelKey]?.add(key) + updateBackStack() + } } fun removeLast(){ @@ -77,5 +78,6 @@ class NiaBackStack @Inject constructor( currentTopLevelKey = topLevelStacks.keys.last() updateBackStack() } +} -} \ No newline at end of file +interface NiaBackStackKey \ No newline at end of file diff --git a/feature/bookmarks/api/build.gradle.kts b/feature/bookmarks/api/build.gradle.kts index 9ab1fbd05..2771838ef 100644 --- a/feature/bookmarks/api/build.gradle.kts +++ b/feature/bookmarks/api/build.gradle.kts @@ -21,3 +21,7 @@ plugins { android { namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.api" } + +dependencies { + api(projects.core.navigation) +} diff --git a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt index 132424350..eeac9c13f 100644 --- a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt @@ -19,9 +19,10 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import kotlinx.serialization.Serializable -@Serializable object BookmarksRoute +@Serializable object BookmarksRoute: NiaBackStackKey fun NavController.navigateToBookmarks(navOptions: NavOptions) = navigate(route = BookmarksRoute, navOptions) diff --git a/feature/bookmarks/impl/build.gradle.kts b/feature/bookmarks/impl/build.gradle.kts index 2f62df27d..738daac67 100644 --- a/feature/bookmarks/impl/build.gradle.kts +++ b/feature/bookmarks/impl/build.gradle.kts @@ -26,7 +26,6 @@ android { dependencies { implementation(projects.core.data) implementation(projects.feature.bookmarks.api) - implementation(projects.core.navigation) implementation(projects.feature.topic.api) testImplementation(projects.core.testing) diff --git a/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt index 56577976d..84a527cd5 100644 --- a/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt +++ b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt @@ -35,6 +35,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.testing.TestLifecycleOwner import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData +import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test @@ -63,7 +64,7 @@ class BookmarksScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_bookmarks_api_loading), + composeTestRule.activity.resources.getString(R.string.feature_bookmarks_impl_loading), ) .assertExists() } @@ -160,13 +161,13 @@ class BookmarksScreenTest { composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_error), + composeTestRule.activity.getString(R.string.feature_bookmarks_impl_empty_error), ) .assertExists() composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_description), + composeTestRule.activity.getString(R.string.feature_bookmarks_impl_empty_description), ) .assertExists() } diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt index e7383be3a..23fc65552 100644 --- a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt @@ -76,7 +76,7 @@ import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParam import com.google.samples.apps.nowinandroid.core.ui.newsFeed @Composable -internal fun BookmarksRoute( +internal fun BookmarksScreen( onTopicClick: (String) -> Unit, onShowSnackbar: suspend (String, String?) -> Boolean, modifier: Modifier = Modifier, diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt index 0bfeb3668..2df50cbb5 100644 --- a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt @@ -23,8 +23,9 @@ import androidx.compose.runtime.compositionLocalOf import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreen import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic import dagger.Module import dagger.Provides @@ -40,10 +41,10 @@ object BookmarksModule { @IntoSet fun provideBookmarksEntryProviderBuilder( backStack: NiaBackStack, - ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + ): EntryProviderBuilder.() -> Unit = { entry { val snackbarHostState = LocalSnackbarHostState.current - BookmarksRoute( + BookmarksScreen( onTopicClick = backStack::navigateToTopic, onShowSnackbar = { message, action -> snackbarHostState.showSnackbar( @@ -58,5 +59,5 @@ object BookmarksModule { } val LocalSnackbarHostState = compositionLocalOf { - error("host state should be initialzied at runtime") + error("SnackbarHostState state should be initialized at runtime") } diff --git a/feature/foryou/api/build.gradle.kts b/feature/foryou/api/build.gradle.kts index 45eb87d89..2ca069d64 100644 --- a/feature/foryou/api/build.gradle.kts +++ b/feature/foryou/api/build.gradle.kts @@ -24,16 +24,5 @@ android { } dependencies { - implementation(libs.accompanist.permissions) - implementation(projects.core.data) - implementation(projects.core.domain) - implementation(projects.core.notifications) - - testImplementation(libs.hilt.android.testing) - testImplementation(libs.robolectric) - testImplementation(projects.core.testing) - testDemoImplementation(projects.core.screenshotTesting) - - androidTestImplementation(libs.bundles.androidx.compose.ui.test) - androidTestImplementation(projects.core.testing) + api(projects.core.navigation) } diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt index e11b4d26e..fa8c9f6d5 100644 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt @@ -19,11 +19,10 @@ package com.google.samples.apps.nowinandroid.feature.foryou.api.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import kotlinx.serialization.Serializable -@Serializable data object ForYouRoute // route to ForYou screen - -@Serializable data object ForYouBaseRoute // route to base navigation graph +@Serializable data object ForYouRoute: NiaBackStackKey // route to ForYou screen fun NavController.navigateToForYou(navOptions: NavOptions) = navigate(route = ForYouRoute, navOptions) diff --git a/feature/foryou/impl/build.gradle.kts b/feature/foryou/impl/build.gradle.kts index 00a3c1419..4abc2c7ac 100644 --- a/feature/foryou/impl/build.gradle.kts +++ b/feature/foryou/impl/build.gradle.kts @@ -29,7 +29,6 @@ dependencies { implementation(projects.core.data) implementation(projects.core.domain) implementation(projects.core.notifications) - implementation(projects.core.navigation) implementation(projects.feature.foryou.api) implementation(projects.feature.topic.api) diff --git a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt index 05863011c..de3c6bf53 100644 --- a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt @@ -19,7 +19,8 @@ package com.google.samples.apps.nowinandroid.feature.foryou.impl.navigation import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic import dagger.Module @@ -36,8 +37,8 @@ object ForYouModule { @IntoSet fun provideForYouEntryProviderBuilder( backStack: NiaBackStack, - ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { - entry { + ): EntryProviderBuilder.() -> Unit = { + entry { ForYouScreen( onTopicClick = backStack::navigateToTopic ) diff --git a/feature/interests/api/build.gradle.kts b/feature/interests/api/build.gradle.kts index db804484e..28a2f964f 100644 --- a/feature/interests/api/build.gradle.kts +++ b/feature/interests/api/build.gradle.kts @@ -23,5 +23,5 @@ android { } dependencies { - implementation(projects.core.navigation) + api(projects.core.navigation) } \ No newline at end of file diff --git a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt index f4ae878f7..e2c7e9059 100644 --- a/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt +++ b/feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/InterestsNavigation.kt @@ -19,12 +19,13 @@ package com.google.samples.apps.nowinandroid.feature.interests.api.navigation import androidx.navigation.NavController import androidx.navigation.NavOptions import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import kotlinx.serialization.Serializable @Serializable data class InterestsRoute( // The ID of the topic which will be initially selected at this destination val initialTopicId: String? = null, -) +): NiaBackStackKey fun NavController.navigateToInterests( initialTopicId: String? = null, @@ -37,4 +38,4 @@ fun NiaBackStack.navigateToInterests( initialTopicId: String? = null, ) { navigate(InterestsRoute(initialTopicId)) -} +} \ No newline at end of file diff --git a/feature/interests/impl/build.gradle.kts b/feature/interests/impl/build.gradle.kts index 6419f4b1e..a5e6e3a06 100644 --- a/feature/interests/impl/build.gradle.kts +++ b/feature/interests/impl/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation(libs.androidx.compose.material3.adaptive) implementation(libs.androidx.compose.material3.adaptive.layout) implementation(libs.androidx.compose.material3.adaptive.navigation) + implementation(libs.androidx.compose.material3.adaptive.navigation3) testImplementation(projects.core.testing) testImplementation(libs.robolectric) diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt index e485aed89..f4973a3e0 100644 --- a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsEntryProvider.kt @@ -16,11 +16,15 @@ package com.google.samples.apps.nowinandroid.feature.interests.impl -import androidx.compose.runtime.snapshots.SnapshotStateList -import androidx.navigation.compose.composable +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.navigation3.ListDetailSceneStrategy import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.topic.api.TopicDetailPlaceholder +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -31,11 +35,22 @@ import dagger.multibindings.IntoSet @InstallIn(ActivityComponent::class) object InterestsModule { + @OptIn(ExperimentalMaterial3AdaptiveApi::class) @Provides @IntoSet - fun provideInterestsEntryProviderBuilder(): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { - entry { key -> - InterestsListDetailScreen() + fun provideInterestsEntryProviderBuilder( + backStack: NiaBackStack + ): EntryProviderBuilder.() -> Unit = { + entry( + metadata = ListDetailSceneStrategy.listPane { + TopicDetailPlaceholder() + } + ) { key -> +// InterestsListDetailScreen() + InterestsScreen( + onTopicClick = backStack::navigateToTopic, + shouldHighlightSelectedTopic = false, + ) } } } \ No newline at end of file diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt index 357afd83e..77b1c1357 100644 --- a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.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. @@ -165,7 +165,7 @@ internal fun InterestsListDetailScreen( } }, ) { - InterestsRoute( + InterestsScreen( onTopicClick = ::onTopicClickShowDetailPane, shouldHighlightSelectedTopic = listDetailNavigator.isDetailPaneVisible(), ) diff --git a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt index 24e698303..225f8a7a9 100644 --- a/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt +++ b/feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsScreen.kt @@ -36,7 +36,7 @@ import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.feature.interests.api.R @Composable -fun InterestsRoute( +fun InterestsScreen( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, shouldHighlightSelectedTopic: Boolean = false, diff --git a/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt index 45d3e8507..1f2b039b9 100644 --- a/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt +++ b/feature/interests/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/impl/InterestsListDetailScreenTest.kt @@ -29,6 +29,7 @@ import androidx.test.espresso.Espresso import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest @@ -86,7 +87,7 @@ class InterestsListDetailScreenTest { composeTestRule.apply { setContent { NiaTheme { - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } @@ -101,7 +102,7 @@ class InterestsListDetailScreenTest { composeTestRule.apply { setContent { NiaTheme { - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } @@ -116,7 +117,7 @@ class InterestsListDetailScreenTest { composeTestRule.apply { setContent { NiaTheme { - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } @@ -135,7 +136,7 @@ class InterestsListDetailScreenTest { composeTestRule.apply { setContent { NiaTheme { - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } @@ -160,7 +161,7 @@ class InterestsListDetailScreenTest { BackHandler { unhandledBackPress = true } - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } @@ -180,7 +181,7 @@ class InterestsListDetailScreenTest { composeTestRule.apply { setContent { NiaTheme { - com.google.samples.apps.nowinandroid.feature.interests.impl.InterestsListDetailScreen() + InterestsListDetailScreen() } } diff --git a/feature/search/api/build.gradle.kts b/feature/search/api/build.gradle.kts index 771cac5ca..8b0bcb138 100644 --- a/feature/search/api/build.gradle.kts +++ b/feature/search/api/build.gradle.kts @@ -25,7 +25,7 @@ android { dependencies { implementation(projects.core.data) implementation(projects.core.domain) - implementation(projects.core.navigation) + api(projects.core.navigation) testImplementation(projects.core.testing) diff --git a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt index 0ddd81f27..24d6773db 100644 --- a/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt +++ b/feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt @@ -20,16 +20,15 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import kotlinx.serialization.Serializable @Serializable data object SearchRoute -@Serializable data class SearchRouteNav3(val onInterestsClick: () -> Unit) +@Serializable object SearchRouteNav3: NiaBackStackKey -fun NiaBackStack.navigateToSearch( - onInterestsClick: () -> Unit, -) { - navigate(SearchRouteNav3(onInterestsClick)) +fun NiaBackStack.navigateToSearch() { + navigate(SearchRouteNav3) } fun NavController.navigateToSearch(navOptions: NavOptions? = null) = diff --git a/feature/search/impl/build.gradle.kts b/feature/search/impl/build.gradle.kts index 9c189c03f..1b9499af5 100644 --- a/feature/search/impl/build.gradle.kts +++ b/feature/search/impl/build.gradle.kts @@ -27,9 +27,9 @@ android { dependencies { implementation(projects.core.data) implementation(projects.core.domain) - implementation(projects.core.navigation) implementation(projects.feature.interests.api) implementation(projects.feature.search.api) + implementation(projects.feature.topic.api) testImplementation(projects.core.testing) diff --git a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt index c530b274a..6121e452b 100644 --- a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchScreen.kt @@ -93,14 +93,10 @@ 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.search.impl.RecentSearchQueriesUiState.Loading -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.EmptyQuery -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.LoadFailed -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.SearchNotReady import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR @Composable -internal fun SearchRoute( +internal fun SearchScreen( onBackClick: () -> Unit, onInterestsClick: () -> Unit, onTopicClick: (String) -> Unit, @@ -131,7 +127,7 @@ internal fun SearchRoute( internal fun SearchScreen( modifier: Modifier = Modifier, searchQuery: String = "", - recentSearchesUiState: RecentSearchQueriesUiState = Loading, + recentSearchesUiState: RecentSearchQueriesUiState = RecentSearchQueriesUiState.Loading, searchResultUiState: SearchResultUiState = SearchResultUiState.Loading, onSearchQueryChanged: (String) -> Unit = {}, onSearchTriggered: (String) -> Unit = {}, @@ -154,11 +150,11 @@ internal fun SearchScreen( ) when (searchResultUiState) { SearchResultUiState.Loading, - LoadFailed, + SearchResultUiState.LoadFailed, -> Unit - SearchNotReady -> SearchNotReadyBody() - EmptyQuery, + SearchResultUiState.SearchNotReady -> SearchNotReadyBody() + SearchResultUiState.EmptyQuery, -> { if (recentSearchesUiState is RecentSearchQueriesUiState.Success) { RecentSearchesBody( diff --git a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt index 680c97d41..d2963fc7f 100644 --- a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchUiStatePreviewParameterProvider.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.newsResources import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.topics -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Success /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) @@ -30,7 +29,7 @@ import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiSt */ class SearchUiStatePreviewParameterProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( - Success( + SearchResultUiState.Success( topics = topics.mapIndexed { i, topic -> FollowableTopic(topic = topic, isFollowed = i % 2 == 0) }, diff --git a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt index 99e403d1a..13628de70 100644 --- a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModel.kt @@ -28,11 +28,6 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.EmptyQuery -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.LoadFailed -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Loading -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.SearchNotReady -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchResultUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -61,29 +56,29 @@ class SearchViewModel @Inject constructor( searchContentsRepository.getSearchContentsCount() .flatMapLatest { totalCount -> if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT) { - flowOf(SearchNotReady) + flowOf(SearchResultUiState.SearchNotReady) } else { searchQuery.flatMapLatest { query -> if (query.trim().length < SEARCH_QUERY_MIN_LENGTH) { - flowOf(EmptyQuery) + flowOf(SearchResultUiState.EmptyQuery) } else { getSearchContentsUseCase(query) // Not using .asResult() here, because it emits Loading state every // time the user types a letter in the search box, which flickers the screen. .map { data -> - Success( + SearchResultUiState.Success( topics = data.topics, newsResources = data.newsResources, ) } - .catch { emit(LoadFailed) } + .catch { emit(SearchResultUiState.LoadFailed) } } } } }.stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = Loading, + initialValue = SearchResultUiState.Loading, ) val recentSearchQueriesUiState: StateFlow = diff --git a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt index 2cab3139a..880e6abe4 100644 --- a/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt +++ b/feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchEntryProvider.kt @@ -16,13 +16,14 @@ package com.google.samples.apps.nowinandroid.feature.search.impl.navigation -import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import com.google.samples.apps.nowinandroid.feature.search.api.navigation.SearchRouteNav3 -import com.google.samples.apps.nowinandroid.feature.search.impl.SearchRoute +import com.google.samples.apps.nowinandroid.feature.search.impl.SearchScreen +import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -37,12 +38,12 @@ object SearchModule { @IntoSet fun provideSearchEntryProviderBuilder( backStack: NiaBackStack, - ): EntryProviderBuilder.() -> @JvmSuppressWildcards Unit = { + ): EntryProviderBuilder.() -> Unit = { entry { key -> - SearchRoute( + SearchScreen( onBackClick = backStack::removeLast, - onInterestsClick = key.onInterestsClick, - onTopicClick = backStack::navigateToInterests, + onInterestsClick = { backStack.navigateToTopLevelDestination(InterestsRoute()) }, + onTopicClick = backStack::navigateToTopic, ) } } diff --git a/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt b/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt index 8d86f38ce..a1f089b99 100644 --- a/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt +++ b/feature/search/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/SearchViewModelTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2023 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. @@ -102,7 +102,7 @@ class SearchViewModelTest { searchContentsRepository.addTopics(topicsTestData) val result = viewModel.searchResultUiState.value - assertIs(result) + assertIs(result) } @Test diff --git a/feature/topic/api/build.gradle.kts b/feature/topic/api/build.gradle.kts index 7abbfea82..1ea6e54a8 100644 --- a/feature/topic/api/build.gradle.kts +++ b/feature/topic/api/build.gradle.kts @@ -24,10 +24,10 @@ android { } dependencies { + api(projects.core.navigation) implementation(projects.core.data) testImplementation(projects.core.testing) - implementation(projects.core.navigation) testImplementation(libs.robolectric) androidTestImplementation(libs.bundles.androidx.compose.ui.test) diff --git a/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt index 2594eda33..f1cf85864 100644 --- a/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt +++ b/feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt @@ -23,11 +23,12 @@ import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.feature.topic.api.TopicViewModel import com.google.samples.apps.nowinandroid.feature.topic.api.TopicScreen import kotlinx.serialization.Serializable -@Serializable data class TopicRoute(val id: String) +@Serializable data class TopicRoute(val id: String): NiaBackStackKey fun NiaBackStack.navigateToTopic( topicId: String, diff --git a/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml b/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml index 49975a008..39a10c38f 100644 --- a/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml +++ b/feature/topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml @@ -1,18 +1,18 @@ .() -> @JvmSuppressWildcards Unit = { - entry { key -> + ): EntryProviderBuilder.() -> Unit = { + entry( + metadata = ListDetailSceneStrategy.detailPane() + ) { key -> val id = key.id TopicScreen( showBackButton = true, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 544154330..cbac90f0e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,7 @@ androidxBrowser = "1.8.0" androidxComposeBom = "2025.09.01" androidxComposeFoundation = "1.8.0-alpha07" androidxComposeMaterial3Adaptive = "1.1.0-rc01" +androidxComposeMaterial3AdaptiveNavigation3 = "1.0.0-SNAPSHOT" androidxComposeRuntimeTracing = "1.7.6" androidxCore = "1.15.0" androidxCoreSplashscreen = "1.0.1" @@ -22,7 +23,7 @@ androidxLifecycleViewModelNavigation3 = "2.10.0-alpha05" androidxMacroBenchmark = "1.4.1" androidxMetrics = "1.0.0-beta01" androidxNavigation = "2.8.5" -androidxNavigation3 = "1.0.0-alpha03" +androidxNavigation3 = "1.0.0-alpha05" androidxProfileinstaller = "1.4.1" androidxTestCore = "1.7.0-rc01" androidxTestExt = "1.3.0-rc01" @@ -79,6 +80,7 @@ androidx-compose-material3-navigationSuite = { group = "androidx.compose.materia androidx-compose-material3-adaptive = { group = "androidx.compose.material3.adaptive", name = "adaptive", version.ref = "androidxComposeMaterial3Adaptive" } androidx-compose-material3-adaptive-layout = { group = "androidx.compose.material3.adaptive", name = "adaptive-layout", version.ref = "androidxComposeMaterial3Adaptive" } androidx-compose-material3-adaptive-navigation = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation", version.ref = "androidxComposeMaterial3Adaptive" } +androidx-compose-material3-adaptive-navigation3 = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation3",version.ref="androidxComposeMaterial3AdaptiveNavigation3" } androidx-compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class" } androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } androidx-compose-runtime-tracing = { group = "androidx.compose.runtime", name = "runtime-tracing", version.ref = "androidxComposeRuntimeTracing" } @@ -95,6 +97,7 @@ androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navig androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-runtimeTesting = { group = "androidx.lifecycle", name = "lifecycle-runtime-testing", version.ref = "androidxLifecycle" } androidx-lifecycle-viewModelCompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } +androidx-lifecycle-viewModel-navigation3 = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-navigation3", version.ref = "androidxLifecycleViewModelNavigation3" } androidx-lint-gradle = { group = "androidx.lint", name = "lint-gradle", version.ref = "androidxLintGradle" } androidx-metrics = { group = "androidx.metrics", name = "metrics-performance", version.ref = "androidxMetrics" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 03adf46ee..c15c9e488 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -40,6 +40,9 @@ dependencyResolutionManagement { } } mavenCentral() + maven { + url = uri("https://androidx.dev/snapshots/builds/13764502/artifacts/repository") + } } } rootProject.name = "nowinandroid" From e373828f5fcfb4666ad26500e2a928b9426dae8b Mon Sep 17 00:00:00 2001 From: Clara Fok Date: Wed, 16 Jul 2025 17:06:07 -0700 Subject: [PATCH 06/33] Update feature ViewModels and tests --- app/build.gradle.kts | 3 - .../apps/nowinandroid/ui/NavigationTest.kt | 16 +- .../samples/apps/nowinandroid/MainActivity.kt | 13 +- .../apps/nowinandroid/di/BackStackProvider.kt | 21 +- .../nowinandroid/navigation/NiaNavDisplay.kt | 11 +- .../nowinandroid/navigation/NiaNavHost.kt | 72 ----- .../navigation/TopLevelDestination.kt | 16 +- .../samples/apps/nowinandroid/ui/NiaApp.kt | 22 +- .../apps/nowinandroid/ui/NiaAppState.kt | 86 +----- .../ui/NiaAppScreenSizesScreenshotTests.kt | 2 + .../apps/nowinandroid/ui/NiaAppStateTest.kt | 55 ++-- .../ui/SnackbarInsetsScreenshotTests.kt | 25 +- .../ui/SnackbarScreenshotTests.kt | 26 +- .../samples/apps/nowinandroid/ui/TestUtil.kt | 37 +++ .../testDemo/resources/robolectric.properties | 17 ++ benchmarks/README.md | 6 + build-logic/convention/build.gradle.kts | 10 +- ...droidApplicationComposeConventionPlugin.kt | 1 - .../AndroidFeatureApiConventionPlugin.kt | 34 +++ ... => AndroidFeatureImplConventionPlugin.kt} | 8 +- .../AndroidLibraryComposeConventionPlugin.kt | 1 - .../apps/nowinandroid/AndroidCompose.kt | 1 - core/navigation/README.md | 3 + core/navigation/build.gradle.kts | 34 ++- .../navigation/NiaBackStackViewModelTest.kt | 233 +++++++++++++++ .../core/navigation/NiaBackStack.kt | 120 +++++--- .../core/navigation/NiaBackStackViewModel.kt | 70 +++++ .../core/navigation/NiaBackStackTest.kt | 280 ++++++++++++++++++ docs/images/graphs/dep_graph_app.svg | 0 .../graphs/dep_graph_app_nia_catalog.svg | 0 .../graphs/dep_graph_core_analytics.svg | 0 docs/images/graphs/dep_graph_core_common.svg | 0 docs/images/graphs/dep_graph_core_data.svg | 0 .../graphs/dep_graph_core_data_test.svg | 0 .../images/graphs/dep_graph_core_database.svg | 0 .../graphs/dep_graph_core_datastore.svg | 0 .../graphs/dep_graph_core_datastore_proto.svg | 0 .../graphs/dep_graph_core_datastore_test.svg | 0 .../graphs/dep_graph_core_designsystem.svg | 0 docs/images/graphs/dep_graph_core_domain.svg | 0 docs/images/graphs/dep_graph_core_model.svg | 0 .../graphs/dep_graph_core_navigation.svg | 0 docs/images/graphs/dep_graph_core_network.svg | 0 .../graphs/dep_graph_core_notifications.svg | 0 .../dep_graph_core_screenshot_testing.svg | 0 docs/images/graphs/dep_graph_core_testing.svg | 0 docs/images/graphs/dep_graph_core_ui.svg | 0 .../dep_graph_feature_bookmarks_api.svg | 0 .../dep_graph_feature_bookmarks_impl.svg | 0 .../graphs/dep_graph_feature_foryou_api.svg | 0 .../graphs/dep_graph_feature_foryou_impl.svg | 0 .../dep_graph_feature_interests_api.svg | 0 .../dep_graph_feature_interests_impl.svg | 0 .../graphs/dep_graph_feature_search_api.svg | 0 .../graphs/dep_graph_feature_search_impl.svg | 0 .../graphs/dep_graph_feature_settings_api.svg | 0 .../graphs/dep_graph_feature_topic_api.svg | 0 .../graphs/dep_graph_feature_topic_impl.svg | 0 docs/images/graphs/dep_graph_lint.svg | 0 .../graphs/dep_graph_sync_sync_test.svg | 0 docs/images/graphs/dep_graph_sync_work.svg | 0 .../dep_graph_ui_test_hilt_manifest.svg | 0 feature/bookmarks/api/README.md | 3 + feature/bookmarks/api/build.gradle.kts | 8 +- ...okmarksNavigation.kt => BookmarksRoute.kt} | 24 +- ...ture_bookmarks_api_mg_empty_bookmarks.xml} | 0 .../src/main/res/values/strings.xml | 12 +- feature/bookmarks/impl/README.md | 3 + feature/bookmarks/impl/build.gradle.kts | 2 +- .../bookmarks/impl/BookmarksScreenTest.kt | 7 +- .../feature/bookmarks/impl/BookmarksScreen.kt | 15 +- .../impl/navigation/BookmarksEntryProvider.kt | 8 +- .../navigation/BookmarksSerializerModule.kt | 40 +++ feature/foryou/api/README.md | 3 + feature/foryou/api/build.gradle.kts | 2 +- .../foryou/api/navigation/ForYouNavigation.kt | 59 ---- .../foryou/api/navigation/ForYouRoute.kt | 26 ++ feature/foryou/impl/README.md | 3 + feature/foryou/impl/build.gradle.kts | 4 +- .../feature/foryou/impl/ForYouScreenTest.kt | 18 +- .../feature/foryou/impl/ForYouScreen.kt | 6 +- .../impl/navigation/ForYouEntryProvider.kt | 15 +- .../navigation/ForYouRouteSerializerModule.kt | 40 +++ .../impl/ForYouScreenScreenshotTests.kt | 2 +- .../ForYouScreenLoading_foldable.png | Bin 0 -> 14885 bytes .../screenshots/ForYouScreenLoading_phone.png | Bin 0 -> 10310 bytes .../ForYouScreenLoading_tablet.png | Bin 0 -> 19160 bytes ...rYouScreenPopulatedAndLoading_foldable.png | Bin 0 -> 212867 bytes .../ForYouScreenPopulatedAndLoading_phone.png | Bin 0 -> 65816 bytes ...ouScreenPopulatedAndLoading_phone_dark.png | Bin 0 -> 65378 bytes ...ForYouScreenPopulatedAndLoading_tablet.png | Bin 0 -> 250966 bytes .../ForYouScreenPopulatedFeed_foldable.png | Bin 0 -> 199431 bytes .../ForYouScreenPopulatedFeed_phone.png | Bin 0 -> 57192 bytes .../ForYouScreenPopulatedFeed_tablet.png | Bin 0 -> 236182 bytes .../ForYouScreenTopicSelection_foldable.png | Bin 0 -> 115675 bytes .../ForYouScreenTopicSelection_phone.png | Bin 0 -> 24846 bytes .../ForYouScreenTopicSelection_phone_dark.png | Bin 0 -> 25721 bytes .../ForYouScreenTopicSelection_tablet.png | Bin 0 -> 125375 bytes feature/interests/api/README.md | 3 + feature/interests/api/build.gradle.kts | 6 +- ...terestsNavigation.kt => InterestsRoute.kt} | 24 +- ...e_interests_api_ic_detail_placeholder.xml} | 4 +- .../api/src/main/res/values/strings.xml | 1 + feature/interests/impl/README.md | 3 + feature/interests/impl/build.gradle.kts | 6 +- .../interests/impl/Interests2PaneViewModel.kt | 43 --- .../impl/InterestsDetailPlaceholder.kt} | 11 +- .../impl/InterestsListDetailScreen.kt | 243 --------------- .../feature/interests/impl/InterestsScreen.kt | 3 +- .../interests/impl/InterestsViewModel.kt | 18 +- .../feature/interests/impl/TabContent.kt | 4 +- .../InterestsEntryProvider.kt | 26 +- .../navigation/InterestsSerializerModule.kt | 40 +++ .../impl/InterestsListDetailScreenTest.kt | 152 +++++++--- .../interests/impl/InterestsViewModelTest.kt | 9 +- feature/search/api/README.md | 3 + feature/search/api/build.gradle.kts | 9 +- .../search/api/navigation/SearchNavigation.kt | 51 ---- .../search/api/navigation/SearchRoute.kt | 31 ++ feature/search/impl/README.md | 3 + feature/search/impl/build.gradle.kts | 3 +- .../feature/search/impl/SearchScreen.kt | 2 +- .../impl/navigation/SearchEntryProvider.kt | 16 +- .../impl/navigation/SearchSerializerModule.kt | 40 +++ feature/settings/api/README.md | 3 + feature/settings/api/build.gradle.kts | 2 +- .../settings/api/src/main/AndroidManifest.xml | 28 +- .../feature/settings/api/SettingsDialog.kt | 2 +- feature/topic/api/README.md | 3 + feature/topic/api/build.gradle.kts | 14 +- .../topic/api/navigation/TopicNavigation.kt | 62 ---- .../topic/api/navigation/TopicRoute.kt | 33 +++ .../api/navigation/TopicSerializerModule.kt | 39 +++ .../topic/api/src/main/res/values/strings.xml | 1 - feature/topic/impl/README.md | 3 + feature/topic/impl/build.gradle.kts | 30 +- .../feature/topic/impl}/TopicScreenTest.kt | 3 +- .../feature/topic/impl}/TopicScreen.kt | 11 +- .../feature/topic/impl}/TopicViewModel.kt | 2 +- .../impl/navigation/TopicEntryProvider.kt | 22 +- .../feature/topic/impl}/TopicViewModelTest.kt | 2 +- gradle/libs.versions.toml | 15 +- lint/README.md | 6 + settings.gradle.kts | 2 +- ui-test-hilt-manifest/README.md | 6 + 145 files changed, 1539 insertions(+), 1027 deletions(-) delete mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt create mode 100644 app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/TestUtil.kt create mode 100644 app/src/testDemo/resources/robolectric.properties create mode 100644 build-logic/convention/src/main/kotlin/AndroidFeatureApiConventionPlugin.kt rename build-logic/convention/src/main/kotlin/{AndroidFeatureConventionPlugin.kt => AndroidFeatureImplConventionPlugin.kt} (83%) create mode 100644 core/navigation/README.md create mode 100644 core/navigation/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModelTest.kt create mode 100644 core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModel.kt create mode 100644 core/navigation/src/test/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackTest.kt create mode 100644 docs/images/graphs/dep_graph_app.svg create mode 100644 docs/images/graphs/dep_graph_app_nia_catalog.svg create mode 100644 docs/images/graphs/dep_graph_core_analytics.svg create mode 100644 docs/images/graphs/dep_graph_core_common.svg create mode 100644 docs/images/graphs/dep_graph_core_data.svg create mode 100644 docs/images/graphs/dep_graph_core_data_test.svg create mode 100644 docs/images/graphs/dep_graph_core_database.svg create mode 100644 docs/images/graphs/dep_graph_core_datastore.svg create mode 100644 docs/images/graphs/dep_graph_core_datastore_proto.svg create mode 100644 docs/images/graphs/dep_graph_core_datastore_test.svg create mode 100644 docs/images/graphs/dep_graph_core_designsystem.svg create mode 100644 docs/images/graphs/dep_graph_core_domain.svg create mode 100644 docs/images/graphs/dep_graph_core_model.svg create mode 100644 docs/images/graphs/dep_graph_core_navigation.svg create mode 100644 docs/images/graphs/dep_graph_core_network.svg create mode 100644 docs/images/graphs/dep_graph_core_notifications.svg create mode 100644 docs/images/graphs/dep_graph_core_screenshot_testing.svg create mode 100644 docs/images/graphs/dep_graph_core_testing.svg create mode 100644 docs/images/graphs/dep_graph_core_ui.svg create mode 100644 docs/images/graphs/dep_graph_feature_bookmarks_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_bookmarks_impl.svg create mode 100644 docs/images/graphs/dep_graph_feature_foryou_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_foryou_impl.svg create mode 100644 docs/images/graphs/dep_graph_feature_interests_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_interests_impl.svg create mode 100644 docs/images/graphs/dep_graph_feature_search_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_search_impl.svg create mode 100644 docs/images/graphs/dep_graph_feature_settings_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_topic_api.svg create mode 100644 docs/images/graphs/dep_graph_feature_topic_impl.svg create mode 100644 docs/images/graphs/dep_graph_lint.svg create mode 100644 docs/images/graphs/dep_graph_sync_sync_test.svg create mode 100644 docs/images/graphs/dep_graph_sync_work.svg create mode 100644 docs/images/graphs/dep_graph_ui_test_hilt_manifest.svg create mode 100644 feature/bookmarks/api/README.md rename feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/{BookmarksNavigation.kt => BookmarksRoute.kt} (53%) rename feature/bookmarks/{impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml => api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml} (100%) rename feature/bookmarks/{impl => api}/src/main/res/values/strings.xml (59%) create mode 100644 feature/bookmarks/impl/README.md create mode 100644 feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksSerializerModule.kt create mode 100644 feature/foryou/api/README.md delete mode 100644 feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt create mode 100644 feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouRoute.kt create mode 100644 feature/foryou/impl/README.md create mode 100644 feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouRouteSerializerModule.kt create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenLoading_foldable.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenLoading_phone.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenLoading_tablet.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedFeed_foldable.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedFeed_tablet.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenTopicSelection_foldable.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenTopicSelection_phone.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png create mode 100644 feature/foryou/impl/src/test/screenshots/ForYouScreenTopicSelection_tablet.png create mode 100644 feature/interests/api/README.md rename feature/interests/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/api/navigation/{InterestsNavigation.kt => InterestsRoute.kt} (59%) rename feature/{topic/api/src/main/res/drawable/feature_topic_api_ic_topic_placeholder.xml => interests/api/src/main/res/drawable/feature_interests_api_ic_detail_placeholder.xml} (97%) create mode 100644 feature/interests/impl/README.md delete mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/Interests2PaneViewModel.kt rename feature/{topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/TopicDetailPlaceholder.kt => interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsDetailPlaceholder.kt} (86%) delete mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/InterestsListDetailScreen.kt rename feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/{ => navigation}/InterestsEntryProvider.kt (70%) create mode 100644 feature/interests/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/impl/navigation/InterestsSerializerModule.kt create mode 100644 feature/search/api/README.md delete mode 100644 feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchNavigation.kt create mode 100644 feature/search/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/api/navigation/SearchRoute.kt create mode 100644 feature/search/impl/README.md create mode 100644 feature/search/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/impl/navigation/SearchSerializerModule.kt create mode 100644 feature/settings/api/README.md create mode 100644 feature/topic/api/README.md delete mode 100644 feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicNavigation.kt create mode 100644 feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicRoute.kt create mode 100644 feature/topic/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api/navigation/TopicSerializerModule.kt create mode 100644 feature/topic/impl/README.md rename feature/topic/{api/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api => impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl}/TopicScreenTest.kt (97%) rename feature/topic/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl}/TopicScreen.kt (96%) rename feature/topic/{api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api => impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl}/TopicViewModel.kt (98%) rename feature/topic/{api/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/api => impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/impl}/TopicViewModelTest.kt (99%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 055b87c10..819000247 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -86,7 +86,6 @@ dependencies { implementation(projects.core.data) implementation(projects.core.model) implementation(projects.core.analytics) - implementation(projects.core.navigation) implementation(projects.sync.work) implementation(libs.androidx.activity.compose) @@ -100,10 +99,8 @@ dependencies { implementation(libs.androidx.compose.runtime.tracing) implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.splashscreen) - implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.lifecycle.runtimeCompose) implementation(libs.androidx.lifecycle.viewModel.navigation3) - implementation(libs.androidx.navigation.compose) implementation(libs.androidx.profileinstaller) implementation(libs.androidx.tracing.ktx) implementation(libs.androidx.window.core) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 8d479e3b1..14454a360 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -18,6 +18,7 @@ package com.google.samples.apps.nowinandroid.ui import androidx.compose.ui.semantics.SemanticsActions.ScrollBy import androidx.compose.ui.test.assertCountEquals +import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsSelected import androidx.compose.ui.test.hasTestTag @@ -39,11 +40,13 @@ import com.google.samples.apps.nowinandroid.core.data.repository.NewsRepository import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule +import com.google.samples.apps.nowinandroid.feature.interests.impl.LIST_PANE_TEST_TAG import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking import org.junit.Before +import org.junit.Ignore import org.junit.Rule import org.junit.Test import javax.inject.Inject @@ -85,10 +88,10 @@ class NavigationTest { // The strings used for matching in these tests private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_api_navigate_up) private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_api_title) - private val interests by composeTestRule.stringResource(FeatureSearchR.string.feature_search_interests) + private val interests by composeTestRule.stringResource(FeatureSearchR.string.feature_search_api_interests) private val sampleTopic = "Headlines" private val appName by composeTestRule.stringResource(R.string.app_name) - private val saved by composeTestRule.stringResource(BookmarksR.string.feature_bookmarks_title) + private val saved by composeTestRule.stringResource(BookmarksR.string.feature_bookmarks_api_title) private val settings by composeTestRule.stringResource(SettingsR.string.feature_settings_top_app_bar_action_icon_description) private val brand by composeTestRule.stringResource(SettingsR.string.feature_settings_brand_android) private val ok by composeTestRule.stringResource(SettingsR.string.feature_settings_dismiss_dialog_button_text) @@ -252,6 +255,9 @@ class NavigationTest { } } + // TODO decide if backStack should preserve previous stacks when navigating back to home tab (ForYou) + // https://github.com/android/nowinandroid/issues/1937 + @Ignore @Test fun navigationBar_multipleBackStackInterests() { composeTestRule.apply { @@ -261,12 +267,14 @@ class NavigationTest { val topic = runBlocking { topicsRepository.getTopics().first().sortedBy(Topic::name).last() } - onNodeWithTag("interests:topics").performScrollToNode(hasText(topic.name)) + onNodeWithTag(LIST_PANE_TEST_TAG).performScrollToNode(hasText(topic.name)) onNodeWithText(topic.name).performClick() + // Verify the topic is still shown + onNodeWithTag("topic:${topic.id}").assertIsDisplayed() + // Switch tab onNodeWithText(forYou).performClick() - // Come back to Interests onNodeWithText(interests).performClick() diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index 64539c4dd..71b50e799 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -41,9 +41,9 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourc import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackViewModel +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey import com.google.samples.apps.nowinandroid.ui.NiaApp import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme @@ -77,11 +77,10 @@ class MainActivity : ComponentActivity() { lateinit var userNewsResourceRepository: UserNewsResourceRepository private val viewModel: MainActivityViewModel by viewModels() - @Inject - lateinit var niaBackStack: NiaBackStack + private val backStackViewModel: NiaBackStackViewModel by viewModels() @Inject - lateinit var entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit> + lateinit var entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit> override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() @@ -145,7 +144,7 @@ class MainActivity : ComponentActivity() { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, - niaBackStack = niaBackStack, + niaBackStack = backStackViewModel.niaBackStack, ) val currentTimeZone by appState.currentTimeZone.collectAsStateWithLifecycle() @@ -161,7 +160,7 @@ class MainActivity : ComponentActivity() { ) { NiaApp( appState, - entryProviderBuilders + entryProviderBuilders, ) } } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt index 174bd677f..998d60ce9 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt @@ -17,12 +17,16 @@ package com.google.samples.apps.nowinandroid.di import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import javax.inject.Singleton import dagger.hilt.components.SingletonComponent +import kotlinx.serialization.modules.PolymorphicModuleBuilder +import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.modules.polymorphic +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) @@ -31,4 +35,19 @@ object BackStackProvider { @Singleton fun provideNiaBackStack(): NiaBackStack = NiaBackStack(startKey = TopLevelDestination.FOR_YOU.key) + + /** + * Registers feature modules' polymorphic serializers to support + * feature keys' save and restore by savedstate + * in [com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackViewModel]. + */ + @Provides + @Singleton + fun provideSerializersModule( + polymorphicModuleBuilders: Set<@JvmSuppressWildcards PolymorphicModuleBuilder.() -> Unit>, + ): SerializersModule = SerializersModule { + polymorphic(NiaNavKey::class) { + polymorphicModuleBuilders.forEach { it() } + } + } } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt index 45f0e61b2..da4461a84 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt @@ -19,7 +19,6 @@ package com.google.samples.apps.nowinandroid.navigation import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi import androidx.compose.material3.adaptive.navigation3.rememberListDetailSceneStrategy import androidx.compose.runtime.Composable -import androidx.compose.runtime.compositionLocalOf import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entryProvider @@ -27,20 +26,20 @@ import androidx.navigation3.runtime.rememberSavedStateNavEntryDecorator import androidx.navigation3.ui.NavDisplay import androidx.navigation3.ui.rememberSceneSetupNavEntryDecorator import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey @OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable fun NiaNavDisplay( niaBackStack: NiaBackStack, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set.() -> Unit>, ) { - val listDetailStrategy = rememberListDetailSceneStrategy() + val listDetailStrategy = rememberListDetailSceneStrategy() NavDisplay( backStack = niaBackStack.backStack, sceneStrategy = listDetailStrategy, - onBack = { niaBackStack.removeLast() }, + onBack = { count -> niaBackStack.popLast(count) }, entryDecorators = listOf( rememberSceneSetupNavEntryDecorator(), rememberSavedStateNavEntryDecorator(), @@ -52,4 +51,4 @@ fun NiaNavDisplay( } }, ) -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt deleted file mode 100644 index eb3e78b22..000000000 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2022 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.navigation - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.navigation.compose.NavHost -import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.bookmarksScreen -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute -import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.forYouSection -import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests -import com.google.samples.apps.nowinandroid.feature.search.api.navigation.searchScreen -import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic -import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.topicScreen -import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS -import com.google.samples.apps.nowinandroid.ui.NiaAppState -import com.google.samples.apps.nowinandroid.feature.interests.impl.interestsListDetailScreen - -/** - * Top-level navigation graph. Navigation is organized as explained at - * https://d.android.com/jetpack/compose/nav-adaptive - * - * The navigation graph defined in this file defines the different top level routes. Navigation - * within each route is handled using state and Back Handlers. - */ -@Composable -fun NiaNavHost( - appState: NiaAppState, - onShowSnackbar: suspend (String, String?) -> Boolean, - modifier: Modifier = Modifier, -) { - val navController = appState.navController - NavHost( - navController = navController, - startDestination = ForYouRoute, - modifier = modifier, - ) { - forYouSection( - onTopicClick = navController::navigateToTopic, - ) { - topicScreen( - showBackButton = true, - onBackClick = navController::popBackStack, - onTopicClick = navController::navigateToTopic, - ) - } - bookmarksScreen( - onTopicClick = navController::navigateToInterests, - onShowSnackbar = onShowSnackbar, - ) - searchScreen( - onBackClick = navController::popBackStack, - onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, - onTopicClick = navController::navigateToInterests, - ) - interestsListDetailScreen() - } -} diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 0ee6008e7..ea5fdb345 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -20,12 +20,12 @@ import androidx.annotation.StringRes import androidx.compose.ui.graphics.vector.ImageVector import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute import kotlin.reflect.KClass -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.R as bookmarksR +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R as bookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.api.R as forYouR import com.google.samples.apps.nowinandroid.feature.search.api.R as searchR @@ -49,7 +49,7 @@ enum class TopLevelDestination( @StringRes val iconTextId: Int, @StringRes val titleTextId: Int, val route: KClass<*>, - val key: NiaBackStackKey + val key: NiaNavKey, ) { FOR_YOU( selectedIcon = NiaIcons.Upcoming, @@ -57,15 +57,15 @@ enum class TopLevelDestination( iconTextId = forYouR.string.feature_foryou_api_title, titleTextId = R.string.app_name, route = ForYouRoute::class, - key = ForYouRoute + key = ForYouRoute, ), BOOKMARKS( selectedIcon = NiaIcons.Bookmarks, unselectedIcon = NiaIcons.BookmarksBorder, - iconTextId = bookmarksR.string.feature_bookmarks_impl_title, - titleTextId = bookmarksR.string.feature_bookmarks_impl_title, + iconTextId = bookmarksR.string.feature_bookmarks_api_title, + titleTextId = bookmarksR.string.feature_bookmarks_api_title, route = BookmarksRoute::class, - key = BookmarksRoute + key = BookmarksRoute, ), INTERESTS( selectedIcon = NiaIcons.Grid3x3, @@ -73,7 +73,7 @@ enum class TopLevelDestination( iconTextId = searchR.string.feature_search_api_interests, titleTextId = searchR.string.feature_search_api_interests, route = InterestsRoute::class, - key = InterestsRoute(null) + key = InterestsRoute(null), ), } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index d0e246489..c15797879 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -59,9 +59,6 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavDestination -import androidx.navigation.NavDestination.Companion.hasRoute -import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation3.runtime.EntryProviderBuilder import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground @@ -71,19 +68,18 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState import com.google.samples.apps.nowinandroid.feature.search.api.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog import com.google.samples.apps.nowinandroid.navigation.NiaNavDisplay import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination -import kotlin.reflect.KClass import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @Composable fun NiaApp( appState: NiaAppState, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set.() -> Unit>, modifier: Modifier = Modifier, windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), ) { @@ -134,7 +130,7 @@ fun NiaApp( ) internal fun NiaApp( appState: NiaAppState, - entryProviderBuilders: Set<@JvmSuppressWildcards EntryProviderBuilder.() -> Unit>, + entryProviderBuilders: Set.() -> Unit>, showSettingsDialog: Boolean, onSettingsDismissed: () -> Unit, onTopAppBarActionClick: () -> Unit, @@ -145,7 +141,6 @@ internal fun NiaApp( .collectAsStateWithLifecycle() val currentTopLevelKey = appState.currentTopLevelDestination!!.key - if (showSettingsDialog) { SettingsDialog( onDismiss = { onSettingsDismissed() }, @@ -161,7 +156,7 @@ internal fun NiaApp( val selected = destination.key == currentTopLevelKey item( selected = selected, - onClick = { appState.navigateToTopLevelDestination(destination) }, + onClick = { appState.niaBackStack.navigate(destination.key) }, icon = { Icon( imageVector = destination.unselectedIcon, @@ -246,10 +241,6 @@ internal fun NiaApp( }, ), ) { -// NiaNavHost( -// appState = appState, -// onShowSnackbar = onShowSnackbar, -// ) NiaNavDisplay( niaBackStack = appState.niaBackStack, entryProviderBuilders, @@ -281,8 +272,3 @@ private fun Modifier.notificationDot(): Modifier = ) } } - -private fun NavDestination?.isRouteInHierarchy(route: KClass<*>) = - this?.hierarchy?.any { - it.hasRoute(route) - } ?: false diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 91a0bddfb..7e3d8eb68 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -18,23 +18,17 @@ package com.google.samples.apps.nowinandroid.ui import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.navigation.NavController -import androidx.navigation.NavDestination -import androidx.navigation.NavHostController -import androidx.navigation.compose.rememberNavController +import androidx.compose.runtime.snapshotFlow import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor -import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank -import com.google.samples.apps.nowinandroid.feature.search.api.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU -import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestinations import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted @@ -51,12 +45,10 @@ fun rememberNiaAppState( timeZoneMonitor: TimeZoneMonitor, niaBackStack: NiaBackStack, coroutineScope: CoroutineScope = rememberCoroutineScope(), - navController: NavHostController = rememberNavController(), ): NiaAppState { - NavigationTrackingSideEffect(navController) + NavigationTrackingSideEffect(niaBackStack) return remember( niaBackStack, - navController, coroutineScope, networkMonitor, userNewsResourceRepository, @@ -64,7 +56,6 @@ fun rememberNiaAppState( ) { NiaAppState( niaBackStack = niaBackStack, - navController = navController, coroutineScope = coroutineScope, networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, @@ -76,28 +67,11 @@ fun rememberNiaAppState( @Stable class NiaAppState( val niaBackStack: NiaBackStack, - val navController: NavHostController, coroutineScope: CoroutineScope, networkMonitor: NetworkMonitor, userNewsResourceRepository: UserNewsResourceRepository, timeZoneMonitor: TimeZoneMonitor, ) { - private val previousDestination = mutableStateOf(null) - -// val currentDestination: NavDestination? -// @Composable get() { -// // Collect the currentBackStackEntryFlow as a state -// val currentEntry = navController.currentBackStackEntryFlow -// .collectAsState(initial = null) -// -// // Fallback to previousDestination if currentEntry is null -// return currentEntry.value?.destination.also { destination -> -// if (destination != null) { -// previousDestination.value = destination -// } -// } ?: previousDestination.value -// } - val currentTopLevelDestination: TopLevelDestination? @Composable get() = TopLevelDestinations[niaBackStack.currentTopLevelKey] @@ -138,58 +112,18 @@ class NiaAppState( SharingStarted.WhileSubscribed(5_000), TimeZone.currentSystemDefault(), ) - - /** - * UI logic for navigating to a top level destination in the app. Top level destinations have - * only one copy of the destination of the back stack, and save and restore state whenever you - * navigate to and from it. - * - * @param topLevelDestination: The destination the app needs to navigate to. - */ - fun navigateToTopLevelDestination( - topLevelDestination: TopLevelDestination, - ) { - niaBackStack.navigateToTopLevelDestination(topLevelDestination.key) -// trace("Navigation: ${topLevelDestination.name}") { -// val topLevelNavOptions = navOptions { -// // Pop up to the start destination of the graph to -// // avoid building up a large stack of destinations -// // on the back stack as users select items -// popUpTo(navController.graph.findStartDestination().id) { -// saveState = true -// } -// // Avoid multiple copies of the same destination when -// // reselecting the same item -// launchSingleTop = true -// // Restore state when reselecting a previously selected item -// restoreState = true -// } -// -// when (topLevelDestination) { -// FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) -// BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) -// INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) -// } -// } - } - - fun navigateToSearch() = navController.navigateToSearch() } /** * Stores information about navigation events to be used with JankStats */ @Composable -private fun NavigationTrackingSideEffect(navController: NavHostController) { - TrackDisposableJank(navController) { metricsHolder -> - val listener = NavController.OnDestinationChangedListener { _, destination, _ -> - metricsHolder.state?.putState("Navigation", destination.route.toString()) - } - - navController.addOnDestinationChangedListener(listener) - - onDispose { - navController.removeOnDestinationChangedListener(listener) +private fun NavigationTrackingSideEffect(niaBackStack: NiaBackStack) { + TrackDisposableJank(niaBackStack) { metricsHolder -> + snapshotFlow { + val stack = niaBackStack.backStack.toList() + metricsHolder.state?.putState("Navigation", stack.lastOrNull().toString()) } + onDispose { } } -} \ No newline at end of file +} diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index 9c9488fde..e463fb439 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -125,9 +125,11 @@ class NiaAppScreenSizesScreenshotTests { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) NiaApp( fakeAppState, + entryProviderBuilders = MockEntryProvider, windowAdaptiveInfo = WindowAdaptiveInfo( windowSizeClass = WindowSizeClass.compute( width.value, diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index e64a133d5..2c67c1dc1 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -16,21 +16,15 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.test.junit4.createComposeRule -import androidx.navigation.NavHostController -import androidx.navigation.compose.ComposeNavigator -import androidx.navigation.compose.composable -import androidx.navigation.createGraph -import androidx.navigation.testing.TestNavHostController import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor import com.google.samples.apps.nowinandroid.core.testing.util.TestTimeZoneMonitor +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltTestApplication import kotlinx.coroutines.flow.collect @@ -70,30 +64,29 @@ class NiaAppStateTest { @Test fun niaAppState_currentDestination() = runTest { - var currentDestination: String? = null - + val niaBackStack = mockNiaBackStack() composeTestRule.setContent { - val navController = rememberTestNavController() - state = remember(navController) { + state = remember(niaBackStack) { NiaAppState( - navController = navController, + niaBackStack = niaBackStack, coroutineScope = backgroundScope, networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, ) } + } - // Update currentDestination whenever it changes - currentDestination = state.niaBackStack.currentKey + assertEquals(ForYouRoute, state.niaBackStack.currentTopLevelKey) + assertEquals(ForYouRoute, state.niaBackStack.currentKey) - // Navigate to destination b once - LaunchedEffect(Unit) { - navController.setCurrentDestination("b") - } - } + // Navigate to another destination once + niaBackStack.navigate(BookmarksRoute) + + composeTestRule.waitForIdle() - assertEquals("b", currentDestination) + assertEquals(BookmarksRoute, state.niaBackStack.currentTopLevelKey) + assertEquals(BookmarksRoute, state.niaBackStack.currentKey) } @Test @@ -103,6 +96,7 @@ class NiaAppStateTest { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) } @@ -116,11 +110,11 @@ class NiaAppStateTest { fun niaAppState_whenNetworkMonitorIsOffline_StateIsOffline() = runTest(UnconfinedTestDispatcher()) { composeTestRule.setContent { state = NiaAppState( - navController = NavHostController(LocalContext.current), coroutineScope = backgroundScope, networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) } @@ -136,11 +130,11 @@ class NiaAppStateTest { fun niaAppState_differentTZ_withTimeZoneMonitorChange() = runTest(UnconfinedTestDispatcher()) { composeTestRule.setContent { state = NiaAppState( - navController = NavHostController(LocalContext.current), coroutineScope = backgroundScope, networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) } val changedTz = TimeZone.of("Europe/Prague") @@ -152,18 +146,3 @@ class NiaAppStateTest { ) } } - -@Composable -private fun rememberTestNavController(): TestNavHostController { - val context = LocalContext.current - return remember { - TestNavHostController(context).apply { - navigatorProvider.addNavigator(ComposeNavigator()) - graph = createGraph(startDestination = "a") { - composable("a") { } - composable("b") { } - composable("c") { } - } - } - } -} diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt index 78f568e03..b20a8e5a6 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt @@ -67,6 +67,7 @@ import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest @@ -147,9 +148,7 @@ class SnackbarInsetsScreenshotTests { @Test fun phone_noSnackbar() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 400.dp, 500.dp, "insets_snackbar_compact_medium_noSnackbar", @@ -159,13 +158,11 @@ class SnackbarInsetsScreenshotTests { @Test fun snackbarShown_phone() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 400.dp, 500.dp, "insets_snackbar_compact_medium", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -176,13 +173,11 @@ class SnackbarInsetsScreenshotTests { @Test fun snackbarShown_foldable() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 600.dp, 600.dp, "insets_snackbar_medium_medium", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -193,13 +188,11 @@ class SnackbarInsetsScreenshotTests { @Test fun snackbarShown_tablet() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 900.dp, 900.dp, "insets_snackbar_expanded_expanded", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -209,17 +202,18 @@ class SnackbarInsetsScreenshotTests { } private fun testSnackbarScreenshotWithSize( - snackbarHostState: SnackbarHostState, width: Dp, height: Dp, screenshotName: String, - action: suspend () -> Unit, + action: suspend (snackbarHostState: SnackbarHostState) -> Unit, ) { lateinit var scope: CoroutineScope + val snackbarHostState = SnackbarHostState() composeTestRule.setContent { CompositionLocalProvider( // Replaces images with placeholders LocalInspectionMode provides true, + LocalSnackbarHostState provides snackbarHostState, ) { scope = rememberCoroutineScope() @@ -256,10 +250,11 @@ class SnackbarInsetsScreenshotTests { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) NiaApp( appState = appState, - snackbarHostState = snackbarHostState, + entryProviderBuilders = MockEntryProvider, showSettingsDialog = false, onSettingsDismissed = {}, onTopAppBarActionClick = {}, @@ -280,7 +275,7 @@ class SnackbarInsetsScreenshotTests { } scope.launch { - action() + action(snackbarHostState) } composeTestRule.onNodeWithTag("root") diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt index b9b1047c1..bc538d494 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt @@ -40,6 +40,7 @@ import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest @@ -120,9 +121,7 @@ class SnackbarScreenshotTests { @Test fun phone_noSnackbar() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 400.dp, 500.dp, "snackbar_compact_medium_noSnackbar", @@ -132,13 +131,11 @@ class SnackbarScreenshotTests { @Test fun snackbarShown_phone() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 400.dp, 500.dp, "snackbar_compact_medium", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -149,13 +146,11 @@ class SnackbarScreenshotTests { @Test fun snackbarShown_foldable() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 600.dp, 600.dp, "snackbar_medium_medium", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -166,13 +161,11 @@ class SnackbarScreenshotTests { @Test fun snackbarShown_tablet() { - val snackbarHostState = SnackbarHostState() testSnackbarScreenshotWithSize( - snackbarHostState, 900.dp, 900.dp, "snackbar_expanded_expanded", - ) { + ) { snackbarHostState -> snackbarHostState.showSnackbar( "This is a test snackbar message", actionLabel = "Action Label", @@ -182,17 +175,19 @@ class SnackbarScreenshotTests { } private fun testSnackbarScreenshotWithSize( - snackbarHostState: SnackbarHostState, width: Dp, height: Dp, screenshotName: String, - action: suspend () -> Unit, + action: suspend (snackbarHostState: SnackbarHostState) -> Unit, ) { lateinit var scope: CoroutineScope + val snackbarHostState = SnackbarHostState() composeTestRule.setContent { CompositionLocalProvider( // Replaces images with placeholders LocalInspectionMode provides true, + LocalSnackbarHostState provides snackbarHostState, + ) { scope = rememberCoroutineScope() @@ -205,10 +200,11 @@ class SnackbarScreenshotTests { networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, timeZoneMonitor = timeZoneMonitor, + niaBackStack = mockNiaBackStack(), ) NiaApp( appState = appState, - snackbarHostState = snackbarHostState, + entryProviderBuilders = MockEntryProvider, showSettingsDialog = false, onSettingsDismissed = {}, onTopAppBarActionClick = {}, @@ -227,7 +223,7 @@ class SnackbarScreenshotTests { } scope.launch { - action() + action(snackbarHostState) } composeTestRule.onRoot() diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/TestUtil.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/TestUtil.kt new file mode 100644 index 000000000..a92b5a387 --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/TestUtil.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry +import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute +import com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen + +val MockEntryProvider: Set.() -> Unit> = + setOf( + { + entry { + ForYouScreen({}) + } + }, + ) + +private val startKey = ForYouRoute + +fun mockNiaBackStack() = NiaBackStack(startKey) diff --git a/app/src/testDemo/resources/robolectric.properties b/app/src/testDemo/resources/robolectric.properties new file mode 100644 index 000000000..ca82be153 --- /dev/null +++ b/app/src/testDemo/resources/robolectric.properties @@ -0,0 +1,17 @@ +# +# Copyright 2025 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. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +sdk = 35 \ No newline at end of file diff --git a/benchmarks/README.md b/benchmarks/README.md index 657ad5422..5387bbe5e 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD # `:benchmarks` ## Module dependency graph @@ -132,3 +133,8 @@ classDef unknown fill:#FFADAD,stroke:#000,stroke-width:2px,color:#000; +======= +# :benchmarks module +## Dependency graph +![Dependency graph](../docs/images/graphs/dep_graph_benchmarks.svg) +>>>>>>> a059e426 (Update readme and build dependency graph) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 166b54907..8000fbadf 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -78,9 +78,13 @@ gradlePlugin { id = libs.plugins.nowinandroid.android.library.asProvider().get().pluginId implementationClass = "AndroidLibraryConventionPlugin" } - register("androidFeature") { - id = libs.plugins.nowinandroid.android.feature.get().pluginId - implementationClass = "AndroidFeatureConventionPlugin" + register("androidFeatureImpl") { + id = libs.plugins.nowinandroid.android.feature.impl.get().pluginId + implementationClass = "AndroidFeatureImplConventionPlugin" + } + register("androidFeatureApi") { + id = libs.plugins.nowinandroid.android.feature.api.get().pluginId + implementationClass = "AndroidFeatureApiConventionPlugin" } register("androidLibraryJacoco") { id = libs.plugins.nowinandroid.android.library.jacoco.get().pluginId diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index a8b1b1779..0a33b719f 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -31,5 +31,4 @@ class AndroidApplicationComposeConventionPlugin : Plugin { configureAndroidCompose(extension) } } - } diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureApiConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureApiConventionPlugin.kt new file mode 100644 index 000000000..969cf96d4 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureApiConventionPlugin.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.google.samples.apps.nowinandroid.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.dependencies + +class AndroidFeatureApiConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "nowinandroid.android.library") + apply(plugin = "org.jetbrains.kotlin.plugin.serialization") + + dependencies { + "api"(project(":core:navigation")) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureImplConventionPlugin.kt similarity index 83% rename from build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt rename to build-logic/convention/src/main/kotlin/AndroidFeatureImplConventionPlugin.kt index 2a20cdbf1..500e3e983 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureImplConventionPlugin.kt @@ -23,12 +23,11 @@ import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -class AndroidFeatureConventionPlugin : Plugin { +class AndroidFeatureImplConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "nowinandroid.android.library") apply(plugin = "nowinandroid.hilt") - apply(plugin = "org.jetbrains.kotlin.plugin.serialization") extensions.configure { testOptions.animationsDisabled = true @@ -39,15 +38,12 @@ class AndroidFeatureConventionPlugin : Plugin { "implementation"(project(":core:ui")) "implementation"(project(":core:designsystem")) - "implementation"(libs.findLibrary("androidx.hilt.navigation.compose").get()) "implementation"(libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) "implementation"(libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) - "implementation"(libs.findLibrary("androidx.navigation.compose").get()) + "implementation"(libs.findLibrary("androidx.hilt.lifecycle.viewModelCompose").get()) "implementation"(libs.findLibrary("androidx.navigation3.runtime").get()) "implementation"(libs.findLibrary("androidx.tracing.ktx").get()) - "implementation"(libs.findLibrary("kotlinx.serialization.json").get()) - "testImplementation"(libs.findLibrary("androidx.navigation.testing").get()) "androidTestImplementation"( libs.findLibrary("androidx.lifecycle.runtimeTesting").get(), ) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 63a992b05..18cd2bd7d 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -31,5 +31,4 @@ class AndroidLibraryComposeConventionPlugin : Plugin { configureAndroidCompose(extension) } } - } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 3d050d86b..709a711c2 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -19,7 +19,6 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project import org.gradle.api.provider.Provider -import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension diff --git a/core/navigation/README.md b/core/navigation/README.md new file mode 100644 index 000000000..7cd3b7e9f --- /dev/null +++ b/core/navigation/README.md @@ -0,0 +1,3 @@ +# :core:navigation module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_navigation.svg) diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts index e2c42a274..abc59d239 100644 --- a/core/navigation/build.gradle.kts +++ b/core/navigation/build.gradle.kts @@ -1,8 +1,40 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + plugins { - alias(libs.plugins.nowinandroid.jvm.library) + alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.hilt) + alias(libs.plugins.hilt) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.compose) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.core.navigation" } dependencies { api(libs.androidx.navigation3.runtime) + implementation(libs.androidx.savedstate.compose) + + testImplementation(libs.truth) + + androidTestImplementation(libs.androidx.compose.ui.test.junit4) + androidTestImplementation(libs.androidx.test.ext) + androidTestImplementation(libs.androidx.compose.ui.testManifest) + androidTestImplementation(libs.androidx.lifecycle.viewModel.testing) + androidTestImplementation(libs.truth) } diff --git a/core/navigation/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModelTest.kt b/core/navigation/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModelTest.kt new file mode 100644 index 000000000..7007d1abf --- /dev/null +++ b/core/navigation/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModelTest.kt @@ -0,0 +1,233 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.navigation + +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.testing.ViewModelScenario +import androidx.lifecycle.viewmodel.testing.viewModelScenario +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import kotlinx.serialization.Serializable +import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.modules.polymorphic +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class NiaBackStackViewModelTest { + + @get:Rule val rule = createComposeRule() + + private val serializersModules = SerializersModule { + polymorphic(NiaNavKey::class) { + subclass(TestStartKey::class, TestStartKey.serializer()) + subclass(TestTopLevelKeyFirst::class, TestTopLevelKeyFirst.serializer()) + subclass(TestTopLevelKeySecond::class, TestTopLevelKeySecond.serializer()) + subclass(TestKeyFirst::class, TestKeyFirst.serializer()) + subclass(TestKeySecond::class, TestKeySecond.serializer()) + } + } + + private fun createViewModel() = NiaBackStackViewModel( + savedStateHandle = SavedStateHandle(), + niaBackStack = NiaBackStack(TestStartKey), + serializersModules = serializersModules, + ) + + @Test + fun testStartKeySaved() { + rule.setContent { + val viewModel = createViewModel() + assertThat(viewModel.backStackMap).containsEntry( + TestStartKey, + mutableListOf(TestStartKey), + ) + } + } + + @Test + fun testNonTopLevelKeySaved() { + val viewModel = createViewModel() + rule.setContent { + val backStack = viewModel.niaBackStack + + backStack.navigate(TestKeyFirst) + } + + assertThat(viewModel.backStackMap).containsEntry( + TestStartKey, + mutableListOf(TestStartKey, TestKeyFirst), + ) + } + + @Test + fun testTopLevelKeySaved() { + val viewModel = createViewModel() + rule.setContent { + val backStack = viewModel.niaBackStack + + backStack.navigate(TestKeyFirst) + backStack.navigate(TestTopLevelKeyFirst) + } + + assertThat(viewModel.backStackMap).containsExactly( + TestStartKey, + mutableListOf(TestStartKey, TestKeyFirst), + TestTopLevelKeyFirst, + mutableListOf(TestTopLevelKeyFirst), + ).inOrder() + } + + @Test + fun testMultiStacksSaved() { + val viewModel = createViewModel() + rule.setContent { + viewModel.niaBackStack.navigate(TestKeyFirst) + viewModel.niaBackStack.navigate(TestTopLevelKeyFirst) + viewModel.niaBackStack.navigate(TestKeySecond) + } + + assertThat(viewModel.backStackMap).containsExactly( + TestStartKey, + mutableListOf(TestStartKey, TestKeyFirst), + TestTopLevelKeyFirst, + mutableListOf(TestTopLevelKeyFirst, TestKeySecond), + ).inOrder() + } + + @Test + fun testPopSaved() { + val viewModel = createViewModel() + rule.setContent { + val backStack = viewModel.niaBackStack + + backStack.navigate(TestKeyFirst) + assertThat(viewModel.backStackMap).containsExactly( + TestStartKey, + mutableListOf(TestStartKey, TestKeyFirst), + ) + + backStack.popLast() + assertThat(viewModel.backStackMap).containsExactly( + TestStartKey, + mutableListOf(TestStartKey), + ) + } + } + + @Test + fun testRestore() { + lateinit var scenario: ViewModelScenario + rule.setContent { + scenario = viewModelScenario { + NiaBackStackViewModel( + savedStateHandle = createSavedStateHandle(), + niaBackStack = NiaBackStack(TestStartKey), + serializersModules = serializersModules, + ) + } + } + + rule.runOnIdle { + scenario.viewModel.niaBackStack.navigate(TestKeyFirst) + assertThat(scenario.viewModel.niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + } + + scenario.recreate() + + rule.runOnIdle { + assertThat(scenario.viewModel.niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + } + } + + @Test + fun testRestoreMultiStacks() { + lateinit var scenario: ViewModelScenario + rule.setContent { + scenario = viewModelScenario { + NiaBackStackViewModel( + savedStateHandle = createSavedStateHandle(), + niaBackStack = NiaBackStack(TestStartKey), + serializersModules = serializersModules, + ) + } + } + + rule.runOnIdle { + scenario.viewModel.niaBackStack.navigate(TestKeyFirst) + scenario.viewModel.niaBackStack.navigate(TestTopLevelKeyFirst) + scenario.viewModel.niaBackStack.navigate(TestKeySecond) + + assertThat(scenario.viewModel.niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestTopLevelKeyFirst, + TestKeySecond, + ).inOrder() + } + + scenario.recreate() + + rule.runOnIdle { + assertThat(scenario.viewModel.niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestTopLevelKeyFirst, + TestKeySecond, + ).inOrder() + } + } +} + +@Serializable +private object TestStartKey : NiaNavKey { + override val isTopLevel: Boolean + get() = true +} + +@Serializable +private object TestTopLevelKeyFirst : NiaNavKey { + override val isTopLevel: Boolean + get() = true +} + +@Serializable +private object TestTopLevelKeySecond : NiaNavKey { + override val isTopLevel: Boolean + get() = true +} + +@Serializable +private object TestKeyFirst : NiaNavKey { + override val isTopLevel: Boolean + get() = false +} + +@Serializable +private object TestKeySecond : NiaNavKey { + override val isTopLevel: Boolean + get() = false +} diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt index 0b0962206..82a7bb1c9 100644 --- a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt @@ -21,63 +21,107 @@ import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.SnapshotStateList -import javax.inject.Inject -import kotlin.collections.remove +import org.jetbrains.annotations.VisibleForTesting +import kotlin.collections.mutableListOf -class NiaBackStack @Inject constructor( - startKey: NiaBackStackKey, +// TODO refine back behavior - perhaps take a lambda so that each screen / use site can customize back behavior? +// https://github.com/android/nowinandroid/issues/1934 +class NiaBackStack( + private val startKey: NiaNavKey, ) { - val backStack = mutableStateListOf(startKey) + internal var backStackMap: LinkedHashMap> = + linkedMapOf( + startKey to mutableListOf(startKey), + ) - // Maintain a stack for each top level route - private var topLevelStacks : LinkedHashMap> = linkedMapOf( - startKey to mutableStateListOf(startKey) - ) + @VisibleForTesting + val backStack: SnapshotStateList = mutableStateListOf(startKey) - // Expose the current top level route for consumers - var currentTopLevelKey by mutableStateOf(startKey) + var currentTopLevelKey: NiaNavKey by mutableStateOf(backStackMap.keys.last()) private set - internal val currentKey: NiaBackStackKey - get() = topLevelStacks[currentTopLevelKey]!!.last() + @get:VisibleForTesting + val currentKey: NiaNavKey + get() = backStackMap[currentTopLevelKey]!!.last() - private fun updateBackStack() = - backStack.apply { - clear() - addAll(topLevelStacks.flatMap { it.value }) + fun navigate(key: NiaNavKey) { + when { + // top level singleTop -> clear substack + key == currentTopLevelKey -> backStackMap[key] = mutableListOf(key) + // top level non-singleTop + key.isTopLevel -> { + // if navigating back to start destination, pop all other top destinations and + // store start destination substack + if (key == startKey) { + val tempStack = mapOf(startKey to backStackMap[startKey]!!) + backStackMap.clear() + backStackMap.putAll(tempStack) + // else either restore an existing substack or initiate new one + } else { + backStackMap[key] = backStackMap.remove(key) ?: mutableListOf(key) + } + } + // not top level - add to current substack + else -> { + val currentStack = backStackMap.values.last() + // single top + if (currentStack.lastOrNull() == key) { + currentStack.removeLastOrNull() + } + currentStack.add(key) + } } + updateBackStack() + } - fun navigateToTopLevelDestination(key: NiaBackStackKey){ - // If the top level doesn't exist, add it - if (topLevelStacks[key] == null){ - topLevelStacks.put(key, mutableStateListOf(key)) - } else { - // Otherwise just move it to the end of the stacks - topLevelStacks.apply { - remove(key)?.let { - put(key, it) + fun popLast(count: Int = 1) { + var popCount = count + var currentEntry = backStackMap.entries.last() + while (popCount > 0) { + val currentStack = currentEntry.value + if (currentStack.size == 1) { + // if current sub-stack only has one key, remove the sub-stack from the map + backStackMap.remove(currentEntry.key) + when { + // throw if map is empty after pop + backStackMap.isEmpty() -> error(popErrorMessage(count, currentEntry.key)) + // otherwise update currentEntry + else -> currentEntry = backStackMap.entries.last() } + } else { + // if current sub-stack has more than one key, just pop the last key off the sub-stack + currentStack.removeLastOrNull() } + popCount-- } - - currentTopLevelKey = key updateBackStack() } - fun navigate(key: NiaBackStackKey){ - if (backStack.lastOrNull() != key) { - topLevelStacks[currentTopLevelKey]?.add(key) - updateBackStack() + private fun updateBackStack() { + backStack.apply { + clear() + backStack.addAll( + backStackMap.flatMap { it.value }, + ) } + + currentTopLevelKey = backStackMap.keys.last() } - fun removeLast(){ - val removedKey = topLevelStacks[currentTopLevelKey]?.removeLastOrNull() - // If the removed key was a top level key, remove the associated top level stack - topLevelStacks.remove(removedKey) - currentTopLevelKey = topLevelStacks.keys.last() + internal fun restore(map: LinkedHashMap>?) { + map ?: return + backStackMap.clear() + backStackMap.putAll(map) updateBackStack() } } -interface NiaBackStackKey \ No newline at end of file +interface NiaNavKey { + val isTopLevel: Boolean +} + +private fun popErrorMessage(count: Int, lastPopped: NiaNavKey) = + """ + Failed to pop $count entries. BackStack has been popped to an empty stack. Last + popped key is $lastPopped. + """.trimIndent() diff --git a/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModel.kt b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModel.kt new file mode 100644 index 000000000..097b79967 --- /dev/null +++ b/core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackViewModel.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.navigation + +import androidx.annotation.VisibleForTesting +import androidx.compose.runtime.snapshotFlow +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.lifecycle.serialization.saved +import androidx.lifecycle.viewModelScope +import androidx.savedstate.serialization.SavedStateConfiguration +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch +import kotlinx.serialization.builtins.MapSerializer +import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.serializer +import javax.inject.Inject + +@HiltViewModel +class NiaBackStackViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, + val niaBackStack: NiaBackStack, + serializersModules: SerializersModule, +) : ViewModel() { + + private val config = SavedStateConfiguration { serializersModule = serializersModules } + + @VisibleForTesting + internal var backStackMap by savedStateHandle.saved( + serializer = getMapSerializer(), + configuration = config, + ) { + linkedMapOf() + } + + init { + if (backStackMap.isNotEmpty()) { + // Restore backstack from saved state handle if not emtpy + @Suppress("UNCHECKED_CAST") + niaBackStack.restore( + backStackMap as LinkedHashMap>, + ) + } + + // Start observing changes to the backStack and save backStack whenever it updates + viewModelScope.launch { + snapshotFlow { + niaBackStack.backStack.toList() + backStackMap = niaBackStack.backStackMap + }.collect() + } + } +} + +private inline fun getMapSerializer() = MapSerializer(serializer(), serializer>()) diff --git a/core/navigation/src/test/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackTest.kt b/core/navigation/src/test/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackTest.kt new file mode 100644 index 000000000..2a87024f9 --- /dev/null +++ b/core/navigation/src/test/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStackTest.kt @@ -0,0 +1,280 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.navigation + +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test +import kotlin.test.assertFailsWith + +class NiaBackStackTest { + + private lateinit var niaBackStack: NiaBackStack + + @Before + fun setup() { + niaBackStack = NiaBackStack(TestStartKey) + } + + @Test + fun testStartKey() { + assertThat(niaBackStack.currentKey).isEqualTo(TestStartKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun testNavigate() { + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun testNavigateTopLevel() { + niaBackStack.navigate(TestTopLevelKey) + + assertThat(niaBackStack.currentKey).isEqualTo(TestTopLevelKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestTopLevelKey) + } + + @Test + fun testNavigateSingleTop() { + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + } + + @Test + fun testNavigateTopLevelSingleTop() { + niaBackStack.navigate(TestTopLevelKey) + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestTopLevelKey, + TestKeyFirst, + ).inOrder() + + niaBackStack.navigate(TestTopLevelKey) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestTopLevelKey, + ).inOrder() + } + + @Test + fun testSubStack() { + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + + niaBackStack.navigate(TestKeySecond) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeySecond) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun testMultiStack() { + // add to start stack + niaBackStack.navigate(TestKeyFirst) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + + // navigate to new top level + niaBackStack.navigate(TestTopLevelKey) + + assertThat(niaBackStack.currentKey).isEqualTo(TestTopLevelKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestTopLevelKey) + + // add to new stack + niaBackStack.navigate(TestKeySecond) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeySecond) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestTopLevelKey) + + // go back to start stack + niaBackStack.navigate(TestStartKey) + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun testRestore() { + assertThat(niaBackStack.backStack).containsExactly(TestStartKey) + + niaBackStack.restore( + linkedMapOf( + TestStartKey to mutableListOf(TestStartKey, TestKeyFirst), + TestTopLevelKey to mutableListOf(TestTopLevelKey, TestKeySecond), + ), + ) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestTopLevelKey, + TestKeySecond, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeySecond) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestTopLevelKey) + } + + @Test + fun testPopOneNonTopLevel() { + niaBackStack.navigate(TestKeyFirst) + niaBackStack.navigate(TestKeySecond) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestKeySecond, + ).inOrder() + + niaBackStack.popLast() + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun testPopOneTopLevel() { + niaBackStack.navigate(TestKeyFirst) + niaBackStack.navigate(TestTopLevelKey) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestTopLevelKey, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestTopLevelKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestTopLevelKey) + + // remove TopLevel + niaBackStack.popLast() + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestKeyFirst) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun popMultipleNonTopLevel() { + niaBackStack.navigate(TestKeyFirst) + niaBackStack.navigate(TestKeySecond) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestKeyFirst, + TestKeySecond, + ).inOrder() + + niaBackStack.popLast(2) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestStartKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun popMultipleTopLevel() { + val testTopLevelKeyTwo = object : NiaNavKey { + override val isTopLevel: Boolean + get() = true + } + + // second sub-stack + niaBackStack.navigate(TestTopLevelKey) + niaBackStack.navigate(TestKeyFirst) + // third sub-stack + niaBackStack.navigate(testTopLevelKeyTwo) + niaBackStack.navigate(TestKeySecond) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + TestTopLevelKey, + TestKeyFirst, + testTopLevelKeyTwo, + TestKeySecond, + ).inOrder() + + niaBackStack.popLast(4) + + assertThat(niaBackStack.backStack).containsExactly( + TestStartKey, + ).inOrder() + + assertThat(niaBackStack.currentKey).isEqualTo(TestStartKey) + assertThat(niaBackStack.currentTopLevelKey).isEqualTo(TestStartKey) + } + + @Test + fun throwOnEmptyBackStack() { + assertFailsWith { + niaBackStack.popLast(1) + } + } +} + +private object TestStartKey : NiaNavKey { + override val isTopLevel: Boolean + get() = true +} + +private object TestTopLevelKey : NiaNavKey { + override val isTopLevel: Boolean + get() = true +} + +private object TestKeyFirst : NiaNavKey { + override val isTopLevel: Boolean + get() = false +} + +private object TestKeySecond : NiaNavKey { + override val isTopLevel: Boolean + get() = false +} diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_app_nia_catalog.svg b/docs/images/graphs/dep_graph_app_nia_catalog.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_analytics.svg b/docs/images/graphs/dep_graph_core_analytics.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_common.svg b/docs/images/graphs/dep_graph_core_common.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_data.svg b/docs/images/graphs/dep_graph_core_data.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_data_test.svg b/docs/images/graphs/dep_graph_core_data_test.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_database.svg b/docs/images/graphs/dep_graph_core_database.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_datastore.svg b/docs/images/graphs/dep_graph_core_datastore.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_datastore_proto.svg b/docs/images/graphs/dep_graph_core_datastore_proto.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_datastore_test.svg b/docs/images/graphs/dep_graph_core_datastore_test.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_designsystem.svg b/docs/images/graphs/dep_graph_core_designsystem.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_domain.svg b/docs/images/graphs/dep_graph_core_domain.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_model.svg b/docs/images/graphs/dep_graph_core_model.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_navigation.svg b/docs/images/graphs/dep_graph_core_navigation.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_network.svg b/docs/images/graphs/dep_graph_core_network.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_notifications.svg b/docs/images/graphs/dep_graph_core_notifications.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_screenshot_testing.svg b/docs/images/graphs/dep_graph_core_screenshot_testing.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_testing.svg b/docs/images/graphs/dep_graph_core_testing.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_core_ui.svg b/docs/images/graphs/dep_graph_core_ui.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_bookmarks_api.svg b/docs/images/graphs/dep_graph_feature_bookmarks_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_bookmarks_impl.svg b/docs/images/graphs/dep_graph_feature_bookmarks_impl.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_foryou_api.svg b/docs/images/graphs/dep_graph_feature_foryou_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_foryou_impl.svg b/docs/images/graphs/dep_graph_feature_foryou_impl.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_interests_api.svg b/docs/images/graphs/dep_graph_feature_interests_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_interests_impl.svg b/docs/images/graphs/dep_graph_feature_interests_impl.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_search_api.svg b/docs/images/graphs/dep_graph_feature_search_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_search_impl.svg b/docs/images/graphs/dep_graph_feature_search_impl.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_settings_api.svg b/docs/images/graphs/dep_graph_feature_settings_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_topic_api.svg b/docs/images/graphs/dep_graph_feature_topic_api.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_feature_topic_impl.svg b/docs/images/graphs/dep_graph_feature_topic_impl.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_lint.svg b/docs/images/graphs/dep_graph_lint.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_sync_sync_test.svg b/docs/images/graphs/dep_graph_sync_sync_test.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_sync_work.svg b/docs/images/graphs/dep_graph_sync_work.svg new file mode 100644 index 000000000..e69de29bb diff --git a/docs/images/graphs/dep_graph_ui_test_hilt_manifest.svg b/docs/images/graphs/dep_graph_ui_test_hilt_manifest.svg new file mode 100644 index 000000000..e69de29bb diff --git a/feature/bookmarks/api/README.md b/feature/bookmarks/api/README.md new file mode 100644 index 000000000..7ee6e7b86 --- /dev/null +++ b/feature/bookmarks/api/README.md @@ -0,0 +1,3 @@ +# :feature:bookmarks:api module +## Dependency graph +![Dependency graph](../../../docs/images/graphs/dep_graph_feature_bookmarks_api.svg) diff --git a/feature/bookmarks/api/build.gradle.kts b/feature/bookmarks/api/build.gradle.kts index 2771838ef..a51468615 100644 --- a/feature/bookmarks/api/build.gradle.kts +++ b/feature/bookmarks/api/build.gradle.kts @@ -15,13 +15,9 @@ */ plugins { - alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.feature.api) } android { namespace = "com.google.samples.apps.nowinandroid.feature.bookmarks.api" -} - -dependencies { - api(projects.core.navigation) -} +} \ No newline at end of file diff --git a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoute.kt similarity index 53% rename from feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt rename to feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoute.kt index eeac9c13f..e3955176b 100644 --- a/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoute.kt @@ -16,25 +16,11 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import kotlinx.serialization.Serializable -@Serializable object BookmarksRoute: NiaBackStackKey - -fun NavController.navigateToBookmarks(navOptions: NavOptions) = - navigate(route = BookmarksRoute, navOptions) - -fun NavGraphBuilder.bookmarksScreen( - onTopicClick: (String) -> Unit, - onShowSnackbar: suspend (String, String?) -> Boolean, -) { -// composable { -// BookmarksRoute( -// onTopicClick, -// onShowSnackbar -// ) -// } +@Serializable +object BookmarksRoute : NiaNavKey { + override val isTopLevel: Boolean + get() = true } diff --git a/feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml b/feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml similarity index 100% rename from feature/bookmarks/impl/src/main/res/drawable/feature_bookmarks_impl_mg_empty_bookmarks.xml rename to feature/bookmarks/api/src/main/res/drawable/feature_bookmarks_api_mg_empty_bookmarks.xml diff --git a/feature/bookmarks/impl/src/main/res/values/strings.xml b/feature/bookmarks/api/src/main/res/values/strings.xml similarity index 59% rename from feature/bookmarks/impl/src/main/res/values/strings.xml rename to feature/bookmarks/api/src/main/res/values/strings.xml index 6aa996a1a..98f4b4a8d 100644 --- a/feature/bookmarks/impl/src/main/res/values/strings.xml +++ b/feature/bookmarks/api/src/main/res/values/strings.xml @@ -15,10 +15,10 @@ limitations under the License. --> - Saved - Loading saved… - No saved updates - Updates you save will be stored here\nto read later - Bookmark removed - UNDO + Saved + Loading saved… + No saved updates + Updates you save will be stored here\nto read later + Bookmark removed + UNDO diff --git a/feature/bookmarks/impl/README.md b/feature/bookmarks/impl/README.md new file mode 100644 index 000000000..f7cc92060 --- /dev/null +++ b/feature/bookmarks/impl/README.md @@ -0,0 +1,3 @@ +# :feature:bookmarks:impl module +## Dependency graph +![Dependency graph](../../../docs/images/graphs/dep_graph_feature_bookmarks_impl.svg) diff --git a/feature/bookmarks/impl/build.gradle.kts b/feature/bookmarks/impl/build.gradle.kts index 738daac67..e8162afff 100644 --- a/feature/bookmarks/impl/build.gradle.kts +++ b/feature/bookmarks/impl/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { - alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.feature.impl) alias(libs.plugins.nowinandroid.android.library.compose) } diff --git a/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt index 84a527cd5..0b73a7918 100644 --- a/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt +++ b/feature/bookmarks/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreenTest.kt @@ -36,6 +36,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.testing.TestLifecycleOwner import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test @@ -64,7 +65,7 @@ class BookmarksScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.feature_bookmarks_impl_loading), + composeTestRule.activity.resources.getString(R.string.feature_bookmarks_api_loading), ) .assertExists() } @@ -161,13 +162,13 @@ class BookmarksScreenTest { composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_impl_empty_error), + composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_error), ) .assertExists() composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.feature_bookmarks_impl_empty_description), + composeTestRule.activity.getString(R.string.feature_bookmarks_api_empty_description), ) .assertExists() } diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt index 23fc65552..65bc4acf2 100644 --- a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt @@ -56,7 +56,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LifecycleEventEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -74,6 +74,7 @@ import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.newsFeed +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.R @Composable internal fun BookmarksScreen( @@ -112,8 +113,8 @@ internal fun BookmarksScreen( undoBookmarkRemoval: () -> Unit = {}, clearUndoState: () -> Unit = {}, ) { - val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_impl_removed) - val undoText = stringResource(id = R.string.feature_bookmarks_impl_undo) + val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_api_removed) + val undoText = stringResource(id = R.string.feature_bookmarks_api_undo) LaunchedEffect(shouldDisplayUndoBookmark) { if (shouldDisplayUndoBookmark) { @@ -155,7 +156,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { .fillMaxWidth() .wrapContentSize() .testTag("forYou:loading"), - contentDesc = stringResource(id = R.string.feature_bookmarks_impl_loading), + contentDesc = stringResource(id = R.string.feature_bookmarks_api_loading), ) } @@ -228,7 +229,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { val iconTint = LocalTintTheme.current.iconTint Image( modifier = Modifier.fillMaxWidth(), - painter = painterResource(id = R.drawable.feature_bookmarks_impl_mg_empty_bookmarks), + painter = painterResource(id = R.drawable.feature_bookmarks_api_mg_empty_bookmarks), colorFilter = if (iconTint != Color.Unspecified) ColorFilter.tint(iconTint) else null, contentDescription = null, ) @@ -236,7 +237,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(48.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_impl_empty_error), + text = stringResource(id = R.string.feature_bookmarks_api_empty_error), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, @@ -246,7 +247,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(8.dp)) Text( - text = stringResource(id = R.string.feature_bookmarks_impl_empty_description), + text = stringResource(id = R.string.feature_bookmarks_api_empty_description), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium, diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt index 2df50cbb5..cff561bf4 100644 --- a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksEntryProvider.kt @@ -23,7 +23,7 @@ import androidx.compose.runtime.compositionLocalOf import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreen import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic @@ -35,13 +35,13 @@ import dagger.multibindings.IntoSet @Module @InstallIn(ActivityComponent::class) -object BookmarksModule { +object BookmarksEntryProvider { @Provides @IntoSet fun provideBookmarksEntryProviderBuilder( backStack: NiaBackStack, - ): EntryProviderBuilder.() -> Unit = { + ): EntryProviderBuilder.() -> Unit = { entry { val snackbarHostState = LocalSnackbarHostState.current BookmarksScreen( @@ -52,7 +52,7 @@ object BookmarksModule { actionLabel = action, duration = Short, ) == ActionPerformed - } + }, ) } } diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksSerializerModule.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksSerializerModule.kt new file mode 100644 index 000000000..b26bb646c --- /dev/null +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksSerializerModule.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation + +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dagger.multibindings.IntoSet +import kotlinx.serialization.modules.PolymorphicModuleBuilder + +/** + * Provides the DSL to register the route's [kotlinx.serialization.KSerializer] as a polymorphic serializer + * + */ +@Module +@InstallIn(SingletonComponent::class) +object BookmarksSerializerModule { + @Provides + @IntoSet + fun provideBookmarksPolymorphicModuleBuilder(): PolymorphicModuleBuilder<@JvmSuppressWildcards NiaNavKey>.() -> Unit = { + subclass(BookmarksRoute::class, BookmarksRoute.serializer()) + } +} diff --git a/feature/foryou/api/README.md b/feature/foryou/api/README.md new file mode 100644 index 000000000..2d3154ba2 --- /dev/null +++ b/feature/foryou/api/README.md @@ -0,0 +1,3 @@ +# :feature:foryou:api module +## Dependency graph +![Dependency graph](../../../docs/images/graphs/dep_graph_feature_foryou_api.svg) diff --git a/feature/foryou/api/build.gradle.kts b/feature/foryou/api/build.gradle.kts index 2ca069d64..07a7ba663 100644 --- a/feature/foryou/api/build.gradle.kts +++ b/feature/foryou/api/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { - alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.feature.api) } android { diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt deleted file mode 100644 index fa8c9f6d5..000000000 --- a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouNavigation.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2022 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.feature.foryou.api.navigation - -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey -import kotlinx.serialization.Serializable - -@Serializable data object ForYouRoute: NiaBackStackKey // route to ForYou screen - -fun NavController.navigateToForYou(navOptions: NavOptions) = navigate(route = ForYouRoute, navOptions) - -/** - * The ForYou section of the app. It can also display information about topics. - * This should be supplied from a separate module. - * - * @param onTopicClick - Called when a topic is clicked, contains the ID of the topic - * @param topicDestination - Destination for topic content - */ -fun NavGraphBuilder.forYouSection( - onTopicClick: (String) -> Unit, - topicDestination: NavGraphBuilder.() -> Unit, -) { -// navigation(startDestination = ForYouRoute) { -// composable( -// deepLinks = listOf( -// navDeepLink { -// /** -// * This destination has a deep link that enables a specific news resource to be -// * opened from a notification (@see SystemTrayNotifier for more). The news resource -// * ID is sent in the URI rather than being modelled in the route type because it's -// * transient data (stored in SavedStateHandle) that is cleared after the user has -// * opened the news resource. -// */ -// uriPattern = DEEP_LINK_URI_PATTERN -// }, -// ), -// ) { -// com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen(onTopicClick) -// } -// topicDestination() -// } -} diff --git a/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouRoute.kt b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouRoute.kt new file mode 100644 index 000000000..2467649a4 --- /dev/null +++ b/feature/foryou/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/api/navigation/ForYouRoute.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.foryou.api.navigation + +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey +import kotlinx.serialization.Serializable + +@Serializable +object ForYouRoute : NiaNavKey { // route to ForYou screen + override val isTopLevel: Boolean + get() = true +} diff --git a/feature/foryou/impl/README.md b/feature/foryou/impl/README.md new file mode 100644 index 000000000..32d4e0845 --- /dev/null +++ b/feature/foryou/impl/README.md @@ -0,0 +1,3 @@ +# :feature:foryou:impl module +## Dependency graph +![Dependency graph](../../../docs/images/graphs/dep_graph_feature_foryou_impl.svg) diff --git a/feature/foryou/impl/build.gradle.kts b/feature/foryou/impl/build.gradle.kts index 4abc2c7ac..5a91a1944 100644 --- a/feature/foryou/impl/build.gradle.kts +++ b/feature/foryou/impl/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { - alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.feature.impl) alias(libs.plugins.nowinandroid.android.library.compose) alias(libs.plugins.roborazzi) } @@ -26,11 +26,11 @@ android { dependencies { implementation(libs.accompanist.permissions) - implementation(projects.core.data) implementation(projects.core.domain) implementation(projects.core.notifications) implementation(projects.feature.foryou.api) implementation(projects.feature.topic.api) + implementation(libs.androidx.activity.compose) testImplementation(libs.hilt.android.testing) testImplementation(libs.robolectric) diff --git a/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt b/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt index 74378b699..fc4fc0241 100644 --- a/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt +++ b/feature/foryou/impl/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenTest.kt @@ -154,12 +154,12 @@ class ForYouScreenTest { ForYouScreen( isSyncing = false, onboardingUiState = - OnboardingUiState.Shown( - // Follow one topic - topics = followableTopicTestData.mapIndexed { index, testTopic -> - testTopic.copy(isFollowed = index == 1) - }, - ), + OnboardingUiState.Shown( + // Follow one topic + topics = followableTopicTestData.mapIndexed { index, testTopic -> + testTopic.copy(isFollowed = index == 1) + }, + ), feedState = NewsFeedUiState.Success( feed = emptyList(), ), @@ -201,9 +201,9 @@ class ForYouScreenTest { ForYouScreen( isSyncing = false, onboardingUiState = - OnboardingUiState.Shown( - topics = followableTopicTestData - ), + OnboardingUiState.Shown( + topics = followableTopicTestData, + ), feedState = NewsFeedUiState.Loading, deepLinkedUserNewsResource = null, onTopicCheckedChanged = { _, _ -> }, diff --git a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt index a7be6ae31..907f50d6a 100644 --- a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreen.kt @@ -20,6 +20,7 @@ import android.net.Uri import android.os.Build.VERSION import android.os.Build.VERSION_CODES import androidx.activity.compose.ReportDrawnWhen +import androidx.annotation.VisibleForTesting import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -80,7 +81,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.PermissionStatus.Denied @@ -106,7 +107,8 @@ import com.google.samples.apps.nowinandroid.core.ui.newsFeed import com.google.samples.apps.nowinandroid.feature.foryou.api.R @Composable -internal fun ForYouScreen( +@VisibleForTesting +public fun ForYouScreen( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, viewModel: ForYouViewModel = hiltViewModel(), diff --git a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt index de3c6bf53..8259afa31 100644 --- a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouEntryProvider.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.feature.foryou.impl.navigation import androidx.navigation3.runtime.EntryProviderBuilder import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack -import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStackKey +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.foryou.impl.ForYouScreen import com.google.samples.apps.nowinandroid.feature.topic.api.navigation.navigateToTopic @@ -31,17 +31,20 @@ import dagger.multibindings.IntoSet @Module @InstallIn(ActivityComponent::class) -object ForYouModule { - +object ForYouEntryProvider { + /** + * The ForYou composable for the app. It can also display information about topics. + * This should be supplied from a separate module. + */ @Provides @IntoSet fun provideForYouEntryProviderBuilder( backStack: NiaBackStack, - ): EntryProviderBuilder.() -> Unit = { + ): EntryProviderBuilder.() -> Unit = { entry { ForYouScreen( - onTopicClick = backStack::navigateToTopic + onTopicClick = backStack::navigateToTopic, ) } } -} \ No newline at end of file +} diff --git a/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouRouteSerializerModule.kt b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouRouteSerializerModule.kt new file mode 100644 index 000000000..15c010fb3 --- /dev/null +++ b/feature/foryou/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/navigation/ForYouRouteSerializerModule.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2025 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.foryou.impl.navigation + +import com.google.samples.apps.nowinandroid.core.navigation.NiaNavKey +import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dagger.multibindings.IntoSet +import kotlinx.serialization.modules.PolymorphicModuleBuilder + +/** + * Provides the DSL to register the route's [kotlinx.serialization.KSerializer] as a polymorphic serializer + * + */ +@Module +@InstallIn(SingletonComponent::class) +object ForYouRouteSerializerModule { + @Provides + @IntoSet + fun provideForYouPolymorphicModuleBuilder(): PolymorphicModuleBuilder<@JvmSuppressWildcards NiaNavKey>.() -> Unit = { + subclass(ForYouRoute::class, ForYouRoute.serializer()) + } +} diff --git a/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt index d0d73860e..ac4287625 100644 --- a/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/impl/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/impl/ForYouScreenScreenshotTests.kt @@ -50,7 +50,7 @@ import java.util.TimeZone */ @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class) +@Config(application = HiltTestApplication::class, sdk = [35]) @LooperMode(LooperMode.Mode.PAUSED) class ForYouScreenScreenshotTests { diff --git a/feature/foryou/impl/src/test/screenshots/ForYouScreenLoading_foldable.png b/feature/foryou/impl/src/test/screenshots/ForYouScreenLoading_foldable.png new file mode 100644 index 0000000000000000000000000000000000000000..538c9032c6dd714a86a54fe3051262c8bf39fad4 GIT binary patch literal 14885 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

B1dwR=(rG}LkZRC-jaamVg8VD9Txv?@-n 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 P`)_^s?I_uP^!)z;;Wx4Z literal 0 HcmV?d00001 diff --git a/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png b/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ecf6d95976db51227fec4f60c558ddaea1d043 GIT binary patch literal 212867 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png b/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..a86a8232fcb22b4aae50e03eee2b17b8afab3147 GIT binary patch literal 65816 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 literal 0 HcmV?d00001 diff --git a/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png b/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d500394ef740e3657532920e0653e367474ba523 GIT binary patch literal 65378 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 b?25EL=UrG!)57(x09f)bRb&dKjD!Cd`Xz(K literal 0 HcmV?d00001 diff --git a/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png b/feature/foryou/impl/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..53891bdc19f261073a0de79d18567c170e296089 GIT binary patch literal 250966 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

&|A%+kobgu#|jQgSwA&nM!%YA~Eu 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