From 64e13b5400c3be9f59109e48f4f9dfcd676afb95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 09:01:30 +0000 Subject: [PATCH 01/53] Bump org.jetbrains.kotlinx:kotlinx-serialization-json Bumps [org.jetbrains.kotlinx:kotlinx-serialization-json](https://github.com/Kotlin/kotlinx.serialization) from 1.6.0 to 1.6.3. - [Release notes](https://github.com/Kotlin/kotlinx.serialization/releases) - [Changelog](https://github.com/Kotlin/kotlinx.serialization/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kotlin/kotlinx.serialization/compare/v1.6.0...v1.6.3) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-serialization-json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 003533715..812b204ae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,7 @@ junit4 = "4.13.2" kotlin = "1.9.21" kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.5.0" -kotlinxSerializationJson = "1.6.0" +kotlinxSerializationJson = "1.6.3" ksp = "1.9.21-1.0.16" okhttp = "4.12.0" protobuf = "3.25.2" From 0c0adddf426e2a19cbfb05e1873f5ff388173a0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 19 Feb 2024 09:03:28 +0000 Subject: [PATCH 02/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dependencies/prodReleaseRuntimeClasspath.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 759fba4a6..a796b51e8 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -185,10 +185,10 @@ io.github.aakira:napier-android:1.4.1 io.github.aakira:napier:1.4.1 javax.inject:javax.inject:1 org.checkerframework:checker-qual:3.12.0 -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib:1.9.21 +org.jetbrains.kotlin:kotlin-stdlib:1.9.22 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 @@ -197,9 +197,9 @@ org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.5.0 org.jetbrains.kotlinx:kotlinx-datetime:0.5.0 -org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3 org.jetbrains:annotations:23.0.0 From 80a82de945f6797e06163cd97c611c1dfc40a046 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Wed, 6 Mar 2024 22:31:21 +0000 Subject: [PATCH 03/53] Update module dependency graphs and add script to create them Change-Id: I7b2ae264ec84491c847a44869934e2f238564c31 --- app-nia-catalog/README.md | 2 +- app/README.md | 2 +- build.gradle.kts | 14 +- core/analytics/README.md | 3 + core/common/README.md | 2 +- core/data-test/README.md | 2 +- core/data/README.md | 2 +- core/database/README.md | 2 +- core/datastore-proto/README.md | 3 + core/datastore-test/README.md | 2 +- core/datastore/README.md | 2 +- core/designsystem/README.md | 2 +- core/domain/README.md | 3 + core/model/README.md | 2 +- core/network/README.md | 2 +- core/notifications/README.md | 3 + core/testing/README.md | 2 +- core/ui/README.md | 2 +- docs/images/graphs/dep_graph_app.svg | 481 ++++++++++++++++++ .../graphs/dep_graph_app_nia_catalog.svg | 73 +++ .../graphs/dep_graph_core_analytics.svg | 19 + docs/images/graphs/dep_graph_core_common.svg | 19 + docs/images/graphs/dep_graph_core_data.svg | 151 ++++++ .../graphs/dep_graph_core_data_test.svg | 163 ++++++ .../images/graphs/dep_graph_core_database.svg | 31 ++ .../graphs/dep_graph_core_datastore.svg | 55 ++ .../graphs/dep_graph_core_datastore_proto.svg | 19 + .../graphs/dep_graph_core_datastore_test.svg | 73 +++ .../graphs/dep_graph_core_designsystem.svg | 19 + docs/images/graphs/dep_graph_core_domain.svg | 169 ++++++ docs/images/graphs/dep_graph_core_model.svg | 19 + docs/images/graphs/dep_graph_core_network.svg | 43 ++ .../graphs/dep_graph_core_notifications.svg | 43 ++ docs/images/graphs/dep_graph_core_testing.svg | 199 ++++++++ docs/images/graphs/dep_graph_core_ui.svg | 55 ++ .../graphs/dep_graph_feature_bookmarks.svg | 205 ++++++++ .../graphs/dep_graph_feature_foryou.svg | 229 +++++++++ .../graphs/dep_graph_feature_interests.svg | 229 +++++++++ .../graphs/dep_graph_feature_search.svg | 331 ++++++++++++ .../graphs/dep_graph_feature_settings.svg | 205 ++++++++ .../images/graphs/dep_graph_feature_topic.svg | 205 ++++++++ .../graphs/dep_graph_sync_sync_test.svg | 187 +++++++ docs/images/graphs/dep_graph_sync_work.svg | 169 ++++++ feature/bookmarks/README.md | 2 +- feature/foryou/README.md | 2 +- feature/interests/README.md | 2 +- feature/search/README.md | 3 + feature/settings/README.md | 3 + feature/topic/README.md | 2 +- generateModuleGraphs.sh | 91 ++++ gradle/libs.versions.toml | 2 + lint/README.md | 3 - settings.gradle.kts | 1 + sync/README.md | 3 - sync/sync-test/README.md | 3 + sync/work/README.md | 3 + 56 files changed, 3539 insertions(+), 24 deletions(-) create mode 100644 core/analytics/README.md create mode 100644 core/datastore-proto/README.md create mode 100644 core/domain/README.md create mode 100644 core/notifications/README.md 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_network.svg create mode 100644 docs/images/graphs/dep_graph_core_notifications.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.svg create mode 100644 docs/images/graphs/dep_graph_feature_foryou.svg create mode 100644 docs/images/graphs/dep_graph_feature_interests.svg create mode 100644 docs/images/graphs/dep_graph_feature_search.svg create mode 100644 docs/images/graphs/dep_graph_feature_settings.svg create mode 100644 docs/images/graphs/dep_graph_feature_topic.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 feature/search/README.md create mode 100644 feature/settings/README.md create mode 100755 generateModuleGraphs.sh delete mode 100644 lint/README.md delete mode 100644 sync/README.md create mode 100644 sync/sync-test/README.md create mode 100644 sync/work/README.md diff --git a/app-nia-catalog/README.md b/app-nia-catalog/README.md index edbbb5e46..724f1effe 100644 --- a/app-nia-catalog/README.md +++ b/app-nia-catalog/README.md @@ -1,3 +1,3 @@ # :app-nia-catalog module -![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.png) +![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.svg) diff --git a/app/README.md b/app/README.md index 9f151c245..bbadc7330 100644 --- a/app/README.md +++ b/app/README.md @@ -1,3 +1,3 @@ # :app module -![Dependency graph](../docs/images/graphs/dep_graph_app.png) +![Dependency graph](../docs/images/graphs/dep_graph_app.svg) diff --git a/build.gradle.kts b/build.gradle.kts index 6fe9b829e..1790cd202 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,9 +27,10 @@ buildscript { exclude(group = "com.google.protobuf") } } + } -// Lists all plugins used throughout the project without applying them. +// Lists all plugins used throughout the project plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false @@ -46,4 +47,15 @@ plugins { alias(libs.plugins.roborazzi) apply false alias(libs.plugins.secrets) apply false alias(libs.plugins.room) apply false + alias(libs.plugins.module.graph) apply true // Plugin applied to allow module graph generation } + +// Task to print all the module paths in the project e.g. :core:data +// Used by module graph generator script +tasks.register("printModulePaths") { + subprojects { + if (subprojects.size == 0) { + println(this.path) + } + } +} \ No newline at end of file diff --git a/core/analytics/README.md b/core/analytics/README.md new file mode 100644 index 000000000..c451cc838 --- /dev/null +++ b/core/analytics/README.md @@ -0,0 +1,3 @@ +# :core:analytics module + +![Dependency graph](../../docs/images/graphs/dep_graph_core_analytics.svg) diff --git a/core/common/README.md b/core/common/README.md index ade22c076..2fbc5a329 100644 --- a/core/common/README.md +++ b/core/common/README.md @@ -1,3 +1,3 @@ # :core:common module -![Dependency graph](../../docs/images/graphs/dep_graph_core_common.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_common.svg) diff --git a/core/data-test/README.md b/core/data-test/README.md index 4f623e629..43804eeec 100644 --- a/core/data-test/README.md +++ b/core/data-test/README.md @@ -1,3 +1,3 @@ # :core:data-test module -![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.svg) diff --git a/core/data/README.md b/core/data/README.md index 905d74615..a5a05870c 100644 --- a/core/data/README.md +++ b/core/data/README.md @@ -1,3 +1,3 @@ # :core:data module -![Dependency graph](../../docs/images/graphs/dep_graph_core_data.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_data.svg) diff --git a/core/database/README.md b/core/database/README.md index 5cf339aed..524cb5c48 100644 --- a/core/database/README.md +++ b/core/database/README.md @@ -1,3 +1,3 @@ # :core:database module -![Dependency graph](../../docs/images/graphs/dep_graph_core_database.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_database.svg) diff --git a/core/datastore-proto/README.md b/core/datastore-proto/README.md new file mode 100644 index 000000000..0b115b981 --- /dev/null +++ b/core/datastore-proto/README.md @@ -0,0 +1,3 @@ +# :core:datastore-proto module + +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_proto.svg) diff --git a/core/datastore-test/README.md b/core/datastore-test/README.md index 45cc51a48..f59e9353d 100644 --- a/core/datastore-test/README.md +++ b/core/datastore-test/README.md @@ -1,3 +1,3 @@ # :core:datastore-test module -![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.svg) diff --git a/core/datastore/README.md b/core/datastore/README.md index 56699a483..e05e2ff72 100644 --- a/core/datastore/README.md +++ b/core/datastore/README.md @@ -1,3 +1,3 @@ # :core:datastore module -![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.svg) diff --git a/core/designsystem/README.md b/core/designsystem/README.md index 52a793821..59f8cf803 100644 --- a/core/designsystem/README.md +++ b/core/designsystem/README.md @@ -1,3 +1,3 @@ # :core:designsystem module -![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.svg) diff --git a/core/domain/README.md b/core/domain/README.md new file mode 100644 index 000000000..f86422435 --- /dev/null +++ b/core/domain/README.md @@ -0,0 +1,3 @@ +# :core:domain module + +![Dependency graph](../../docs/images/graphs/dep_graph_core_domain.svg) diff --git a/core/model/README.md b/core/model/README.md index 5279064f2..c740370ac 100644 --- a/core/model/README.md +++ b/core/model/README.md @@ -1,3 +1,3 @@ # :core:model module -![Dependency graph](../../docs/images/graphs/dep_graph_core_model.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_model.svg) diff --git a/core/network/README.md b/core/network/README.md index cfd9fd369..4106f0dde 100644 --- a/core/network/README.md +++ b/core/network/README.md @@ -1,3 +1,3 @@ # :core:network module -![Dependency graph](../../docs/images/graphs/dep_graph_core_network.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_network.svg) diff --git a/core/notifications/README.md b/core/notifications/README.md new file mode 100644 index 000000000..7d509913f --- /dev/null +++ b/core/notifications/README.md @@ -0,0 +1,3 @@ +# :core:notifications module + +![Dependency graph](../../docs/images/graphs/dep_graph_core_notifications.svg) diff --git a/core/testing/README.md b/core/testing/README.md index 8eea64ac9..a7d40abcd 100644 --- a/core/testing/README.md +++ b/core/testing/README.md @@ -1,3 +1,3 @@ # :core:testing module -![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.svg) diff --git a/core/ui/README.md b/core/ui/README.md index 88c3561f1..e41b50bd5 100644 --- a/core/ui/README.md +++ b/core/ui/README.md @@ -1,3 +1,3 @@ # :core:ui module -![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.png) +![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.svg) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg new file mode 100644 index 000000000..f305eff13 --- /dev/null +++ b/docs/images/graphs/dep_graph_app.svg @@ -0,0 +1,481 @@ + + + + + + +G + + + +:app + +:app + + + +:feature:interests + +:feature:interests + + + +:app->:feature:interests + + + + + +:feature:foryou + +:feature:foryou + + + +:app->:feature:foryou + + + + + +:feature:bookmarks + +:feature:bookmarks + + + +:app->:feature:bookmarks + + + + + +:feature:topic + +:feature:topic + + + +:app->:feature:topic + + + + + +:feature:search + +:feature:search + + + +:app->:feature:search + + + + + +:feature:settings + +:feature:settings + + + +:app->:feature:settings + + + + + +:core:common + +:core:common + + + +:app->:core:common + + + + + +:core:ui + +:core:ui + + + +:app->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:app->:core:designsystem + + + + + +:core:data + +:core:data + + + +:app->:core:data + + + + + +:core:model + +:core:model + + + +:app->:core:model + + + + + +:core:analytics + +:core:analytics + + + +:app->:core:analytics + + + + + +:sync:work + +:sync:work + + + +:app->:sync:work + + + + + +:feature:interests->:core:ui + + + + + +:feature:interests->:core:designsystem + + + + + +:feature:interests->:core:data + + + + + +:core:domain + +:core:domain + + + +:feature:interests->:core:domain + + + + + +:feature:foryou->:core:ui + + + + + +:feature:foryou->:core:designsystem + + + + + +:feature:foryou->:core:data + + + + + +:feature:foryou->:core:domain + + + + + +:feature:bookmarks->:core:ui + + + + + +:feature:bookmarks->:core:designsystem + + + + + +:feature:bookmarks->:core:data + + + + + +:feature:topic->:core:ui + + + + + +:feature:topic->:core:designsystem + + + + + +:feature:topic->:core:data + + + + + +:feature:search->:feature:interests + + + + + +:feature:search->:feature:foryou + + + + + +:feature:search->:feature:bookmarks + + + + + +:feature:search->:core:ui + + + + + +:feature:search->:core:designsystem + + + + + +:feature:search->:core:data + + + + + +:feature:search->:core:domain + + + + + +:feature:settings->:core:ui + + + + + +:feature:settings->:core:designsystem + + + + + +:feature:settings->:core:data + + + + + +:core:ui->:core:designsystem + + + + + +:core:ui->:core:model + + + + + +:core:ui->:core:analytics + + + + + +:core:data->:core:common + + + + + +:core:data->:core:analytics + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:sync:work->:core:data + + + + + +:sync:work->:core:analytics + + + + + +:core:domain->:core:data + + + + + +:core:domain->:core:model + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore->:core:model + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:common + + + + + +:core:network->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:notifications->:core:model + + + + + diff --git a/docs/images/graphs/dep_graph_app_nia_catalog.svg b/docs/images/graphs/dep_graph_app_nia_catalog.svg new file mode 100644 index 000000000..b58415cef --- /dev/null +++ b/docs/images/graphs/dep_graph_app_nia_catalog.svg @@ -0,0 +1,73 @@ + + + + + + +G + + + +:app-nia-catalog + +:app-nia-catalog + + + +:core:designsystem + +:core:designsystem + + + +:app-nia-catalog->:core:designsystem + + + + + +:core:ui + +:core:ui + + + +:app-nia-catalog->:core:ui + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + 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..ac21c0707 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_analytics.svg @@ -0,0 +1,19 @@ + + + + + + +G + + + +:core:analytics + +:core:analytics + + + 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..c91f33853 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_common.svg @@ -0,0 +1,19 @@ + + + + + + +G + + + +:core:common + +:core:common + + + 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..cacf03a1f --- /dev/null +++ b/docs/images/graphs/dep_graph_core_data.svg @@ -0,0 +1,151 @@ + + + + + + +G + + + +:core:data + +:core:data + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:analytics + +:core:analytics + + + +:core:data->:core:analytics + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:model + +:core:model + + + +:core:database->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore->:core:model + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:common + + + + + +:core:network->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:notifications->:core:model + + + + + diff --git a/docs/images/graphs/dep_graph_core_data_test.svg b/docs/images/graphs/dep_graph_core_data_test.svg new file mode 100644 index 000000000..162c83f10 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_data_test.svg @@ -0,0 +1,163 @@ + + + + + + +G + + + +:core:data-test + +:core:data-test + + + +:core:data + +:core:data + + + +:core:data-test->:core:data + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:analytics + +:core:analytics + + + +:core:data->:core:analytics + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:model + +:core:model + + + +:core:database->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore->:core:model + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:common + + + + + +:core:network->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:notifications->:core:model + + + + + diff --git a/docs/images/graphs/dep_graph_core_database.svg b/docs/images/graphs/dep_graph_core_database.svg new file mode 100644 index 000000000..9e907b96f --- /dev/null +++ b/docs/images/graphs/dep_graph_core_database.svg @@ -0,0 +1,31 @@ + + + + + + +G + + + +:core:database + +:core:database + + + +:core:model + +:core:model + + + +:core:database->:core:model + + + + + 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..cfcf78db2 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore.svg @@ -0,0 +1,55 @@ + + + + + + +G + + + +:core:datastore + +:core:datastore + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:model + +:core:model + + + +:core:datastore->:core:model + + + + + +:core:common + +:core:common + + + +:core:datastore->:core:common + + + + + 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..d572d0ea7 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore_proto.svg @@ -0,0 +1,19 @@ + + + + + + +G + + + +:core:datastore-proto + +:core:datastore-proto + + + 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..ca8d3f84b --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore_test.svg @@ -0,0 +1,73 @@ + + + + + + +G + + + +:core:datastore-test + +:core:datastore-test + + + +:core:common + +:core:common + + + +:core:datastore-test->:core:common + + + + + +:core:datastore + +:core:datastore + + + +:core:datastore-test->:core:datastore + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:model + +:core:model + + + +:core:datastore->:core:model + + + + + 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..f46f075f0 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_designsystem.svg @@ -0,0 +1,19 @@ + + + + + + +G + + + +:core:designsystem + +:core:designsystem + + + 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..1c97b64e8 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_domain.svg @@ -0,0 +1,169 @@ + + + + + + +G + + + +:core:domain + +:core:domain + + + +:core:data + +:core:data + + + +:core:domain->:core:data + + + + + +:core:model + +:core:model + + + +:core:domain->:core:model + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:analytics + +:core:analytics + + + +:core:data->:core:analytics + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + 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..290457d6c --- /dev/null +++ b/docs/images/graphs/dep_graph_core_model.svg @@ -0,0 +1,19 @@ + + + + + + +G + + + +:core:model + +:core:model + + + 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..ea804bcff --- /dev/null +++ b/docs/images/graphs/dep_graph_core_network.svg @@ -0,0 +1,43 @@ + + + + + + +G + + + +:core:network + +:core:network + + + +:core:common + +:core:common + + + +:core:network->:core:common + + + + + +:core:model + +:core:model + + + +:core:network->:core:model + + + + + 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..cf25ca32e --- /dev/null +++ b/docs/images/graphs/dep_graph_core_notifications.svg @@ -0,0 +1,43 @@ + + + + + + +G + + + +:core:notifications + +:core:notifications + + + +:core:model + +:core:model + + + +:core:notifications->:core:model + + + + + +:core:common + +:core:common + + + +:core:notifications->:core:common + + + + + 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..29d367e4b --- /dev/null +++ b/docs/images/graphs/dep_graph_core_testing.svg @@ -0,0 +1,199 @@ + + + + + + +G + + + +:core:testing + +:core:testing + + + +:core:analytics + +:core:analytics + + + +:core:testing->:core:analytics + + + + + +:core:data + +:core:data + + + +:core:testing->:core:data + + + + + +:core:model + +:core:model + + + +:core:testing->:core:model + + + + + +:core:notifications + +:core:notifications + + + +:core:testing->:core:notifications + + + + + +:core:common + +:core:common + + + +:core:testing->:core:common + + + + + +:core:designsystem + +:core:designsystem + + + +:core:testing->:core:designsystem + + + + + +:core:data->:core:analytics + + + + + +:core:data->:core:notifications + + + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + 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..2eba46866 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_ui.svg @@ -0,0 +1,55 @@ + + + + + + +G + + + +:core:ui + +:core:ui + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:designsystem + +:core:designsystem + + + +:core:ui->:core:designsystem + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + diff --git a/docs/images/graphs/dep_graph_feature_bookmarks.svg b/docs/images/graphs/dep_graph_feature_bookmarks.svg new file mode 100644 index 000000000..cfbb86412 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_bookmarks.svg @@ -0,0 +1,205 @@ + + + + + + +G + + + +:feature:bookmarks + +:feature:bookmarks + + + +:core:ui + +:core:ui + + + +:feature:bookmarks->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:bookmarks->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:bookmarks->:core:data + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + diff --git a/docs/images/graphs/dep_graph_feature_foryou.svg b/docs/images/graphs/dep_graph_feature_foryou.svg new file mode 100644 index 000000000..e196bc7da --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_foryou.svg @@ -0,0 +1,229 @@ + + + + + + +G + + + +:feature:foryou + +:feature:foryou + + + +:core:ui + +:core:ui + + + +:feature:foryou->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:foryou->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:foryou->:core:data + + + + + +:core:domain + +:core:domain + + + +:feature:foryou->:core:domain + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:domain->:core:data + + + + + +:core:domain->:core:model + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + diff --git a/docs/images/graphs/dep_graph_feature_interests.svg b/docs/images/graphs/dep_graph_feature_interests.svg new file mode 100644 index 000000000..3728cb4f6 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_interests.svg @@ -0,0 +1,229 @@ + + + + + + +G + + + +:feature:interests + +:feature:interests + + + +:core:ui + +:core:ui + + + +:feature:interests->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:interests->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:interests->:core:data + + + + + +:core:domain + +:core:domain + + + +:feature:interests->:core:domain + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:domain->:core:data + + + + + +:core:domain->:core:model + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + diff --git a/docs/images/graphs/dep_graph_feature_search.svg b/docs/images/graphs/dep_graph_feature_search.svg new file mode 100644 index 000000000..b9a3c36c4 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_search.svg @@ -0,0 +1,331 @@ + + + + + + +G + + + +:feature:search + +:feature:search + + + +:core:ui + +:core:ui + + + +:feature:search->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:search->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:search->:core:data + + + + + +:core:domain + +:core:domain + + + +:feature:search->:core:domain + + + + + +:feature:bookmarks + +:feature:bookmarks + + + +:feature:search->:feature:bookmarks + + + + + +:feature:foryou + +:feature:foryou + + + +:feature:search->:feature:foryou + + + + + +:feature:interests + +:feature:interests + + + +:feature:search->:feature:interests + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:domain->:core:data + + + + + +:core:domain->:core:model + + + + + +:feature:bookmarks->:core:ui + + + + + +:feature:bookmarks->:core:designsystem + + + + + +:feature:bookmarks->:core:data + + + + + +:feature:foryou->:core:ui + + + + + +:feature:foryou->:core:designsystem + + + + + +:feature:foryou->:core:data + + + + + +:feature:foryou->:core:domain + + + + + +:feature:interests->:core:ui + + + + + +:feature:interests->:core:designsystem + + + + + +:feature:interests->:core:data + + + + + +:feature:interests->:core:domain + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + diff --git a/docs/images/graphs/dep_graph_feature_settings.svg b/docs/images/graphs/dep_graph_feature_settings.svg new file mode 100644 index 000000000..93826715a --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_settings.svg @@ -0,0 +1,205 @@ + + + + + + +G + + + +:feature:settings + +:feature:settings + + + +:core:ui + +:core:ui + + + +:feature:settings->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:settings->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:settings->:core:data + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + diff --git a/docs/images/graphs/dep_graph_feature_topic.svg b/docs/images/graphs/dep_graph_feature_topic.svg new file mode 100644 index 000000000..cbda3c225 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_topic.svg @@ -0,0 +1,205 @@ + + + + + + +G + + + +:feature:topic + +:feature:topic + + + +:core:ui + +:core:ui + + + +:feature:topic->:core:ui + + + + + +:core:designsystem + +:core:designsystem + + + +:feature:topic->:core:designsystem + + + + + +:core:data + +:core:data + + + +:feature:topic->:core:data + + + + + +:core:ui->:core:designsystem + + + + + +:core:analytics + +:core:analytics + + + +:core:ui->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:ui->:core:model + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:database->:core:model + + + + + +:core:datastore->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:model + + + + + +:core:network->:core:common + + + + + +:core:notifications->:core:model + + + + + +:core:notifications->:core:common + + + + + 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..1e0753393 --- /dev/null +++ b/docs/images/graphs/dep_graph_sync_sync_test.svg @@ -0,0 +1,187 @@ + + + + + + +G + + + +:sync:sync-test + +:sync:sync-test + + + +:core:data + +:core:data + + + +:sync:sync-test->:core:data + + + + + +:sync:work + +:sync:work + + + +:sync:sync-test->:sync:work + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:analytics + +:core:analytics + + + +:core:data->:core:analytics + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:sync:work->:core:data + + + + + +:sync:work->:core:analytics + + + + + +:core:model + +:core:model + + + +:core:database->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore->:core:model + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:common + + + + + +:core:network->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:notifications->:core:model + + + + + diff --git a/docs/images/graphs/dep_graph_sync_work.svg b/docs/images/graphs/dep_graph_sync_work.svg new file mode 100644 index 000000000..6901b5761 --- /dev/null +++ b/docs/images/graphs/dep_graph_sync_work.svg @@ -0,0 +1,169 @@ + + + + + + +G + + + +:sync:work + +:sync:work + + + +:core:analytics + +:core:analytics + + + +:sync:work->:core:analytics + + + + + +:core:data + +:core:data + + + +:sync:work->:core:data + + + + + +:core:data->:core:analytics + + + + + +:core:common + +:core:common + + + +:core:data->:core:common + + + + + +:core:database + +:core:database + + + +:core:data->:core:database + + + + + +:core:datastore + +:core:datastore + + + +:core:data->:core:datastore + + + + + +:core:network + +:core:network + + + +:core:data->:core:network + + + + + +:core:notifications + +:core:notifications + + + +:core:data->:core:notifications + + + + + +:core:model + +:core:model + + + +:core:database->:core:model + + + + + +:core:datastore->:core:common + + + + + +:core:datastore->:core:model + + + + + +:core:datastore-proto + +:core:datastore-proto + + + +:core:datastore->:core:datastore-proto + + + + + +:core:network->:core:common + + + + + +:core:network->:core:model + + + + + +:core:notifications->:core:common + + + + + +:core:notifications->:core:model + + + + + diff --git a/feature/bookmarks/README.md b/feature/bookmarks/README.md index e2b8c65ac..1af65fd92 100644 --- a/feature/bookmarks/README.md +++ b/feature/bookmarks/README.md @@ -1,3 +1,3 @@ # :feature:bookmarks module -![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.png) +![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.svg) diff --git a/feature/foryou/README.md b/feature/foryou/README.md index 1ca599859..fd864fbfa 100644 --- a/feature/foryou/README.md +++ b/feature/foryou/README.md @@ -1,3 +1,3 @@ # :feature:foryou module -![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.png) +![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.svg) diff --git a/feature/interests/README.md b/feature/interests/README.md index b7601ecbc..be94111d8 100644 --- a/feature/interests/README.md +++ b/feature/interests/README.md @@ -1,3 +1,3 @@ # :feature:interests module -![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.png) +![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.svg) diff --git a/feature/search/README.md b/feature/search/README.md new file mode 100644 index 000000000..c793d1543 --- /dev/null +++ b/feature/search/README.md @@ -0,0 +1,3 @@ +# :feature:search module + +![Dependency graph](../../docs/images/graphs/dep_graph_feature_search.svg) diff --git a/feature/settings/README.md b/feature/settings/README.md new file mode 100644 index 000000000..8620a2dcd --- /dev/null +++ b/feature/settings/README.md @@ -0,0 +1,3 @@ +# :feature:settings module + +![Dependency graph](../../docs/images/graphs/dep_graph_feature_settings.svg) diff --git a/feature/topic/README.md b/feature/topic/README.md index d74517e63..199a9cb55 100644 --- a/feature/topic/README.md +++ b/feature/topic/README.md @@ -1,3 +1,3 @@ # :feature:topic module -![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.png) +![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.svg) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh new file mode 100755 index 000000000..c759fea30 --- /dev/null +++ b/generateModuleGraphs.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# 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. +# + +# Script to generate dependency graphs for each of the modules +# Usage: generateModuleGraphs.sh --exclude-module :benchmarks --exclude-module :lint + +# Echo each command so the caller knows what's going on +set -e + +# Check if the dot command is available +if ! command -v dot &> /dev/null +then + echo "The 'dot' command is not found. This is required to generate SVGs from the Graphviz files." + echo "On macOS, you can install it using Homebrew: 'brew install graphviz'" + exit 1 +fi + +# Initialize an array to store excluded modules +excluded_modules=() + +# Parse command-line arguments for excluded modules +while [[ $# -gt 0 ]]; do + case "$1" in + --exclude-module) + excluded_modules+=("$2") + shift # Past argument + shift # Past value + ;; + *) + echo "Unknown parameter passed: $1" + exit 1 + ;; + esac +done + +# Function to check and create README.md +check_and_create_readme() { + local module_path="$1" + local file_name="$2" + + local readme_path="${module_path:1}" # Remove leading colon + readme_path=$(echo "$readme_path" | sed 's/:/\//g') # Replace colons with slashes using sed + readme_path="${readme_path}/README.md" + + # Check if README.md exists and create it if not + if [[ ! -f "$readme_path" ]]; then + echo "Creating README.md for ${module_path}" + # Calculate the correct relative path to the image + local relative_image_path="../../docs/images/graphs/${file_name}.svg" + echo "# ${module_path} module" > "$readme_path" + echo "" >> "$readme_path" + echo "![Dependency graph](${relative_image_path})" >> "$readme_path" + fi +} + +# Get the module paths +module_paths=$(./gradlew -q printModulePaths --no-configuration-cache) + +# Loop through each module path +echo "$module_paths" | while read -r module_path; do + # Check if the module is in the excluded list + if [[ ! " ${excluded_modules[@]} " =~ " ${module_path} " ]]; then + # Derive the filename from the module path + file_name="dep_graph${module_path//:/_}" # Replace colons with underscores + file_name="${file_name//-/_}" # Replace dashes with underscores + + check_and_create_readme "$module_path" "$file_name" + + # Generate the .gv file in a temporary location + # "docs/images/graphs/${file_name}.svg" + # Remove the temporary .gv file + rm "/tmp/${file_name}.gv" + fi +done \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b1318c7a..f62f5d492 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -45,6 +45,7 @@ kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.5.0" kotlinxSerializationJson = "1.6.0" ksp = "1.9.22-1.0.18" +moduleGraph = "2.5.0" okhttp = "4.12.0" protobuf = "3.25.2" protobufPlugin = "0.9.4" @@ -158,6 +159,7 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +module-graph = { id = "com.jraska.module.graph.assertion", version.ref = "moduleGraph" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } room = { id = "androidx.room", version.ref = "room" } diff --git a/lint/README.md b/lint/README.md deleted file mode 100644 index 3eceb434b..000000000 --- a/lint/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# :lint module - -![Dependency graph](../docs/images/graphs/dep_graph_lint.png) diff --git a/settings.gradle.kts b/settings.gradle.kts index 949dbfdd1..d4b6654b1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -63,3 +63,4 @@ include(":lint") include(":sync:work") include(":sync:sync-test") include(":ui-test-hilt-manifest") + diff --git a/sync/README.md b/sync/README.md deleted file mode 100644 index b100e27ad..000000000 --- a/sync/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# :sync module - -![Dependency graph](../docs/images/graphs/dep_graph_sync.png) diff --git a/sync/sync-test/README.md b/sync/sync-test/README.md new file mode 100644 index 000000000..34ce5066a --- /dev/null +++ b/sync/sync-test/README.md @@ -0,0 +1,3 @@ +# :sync:sync-test module + +![Dependency graph](../../docs/images/graphs/dep_graph_sync_sync_test.svg) diff --git a/sync/work/README.md b/sync/work/README.md new file mode 100644 index 000000000..f31359e9f --- /dev/null +++ b/sync/work/README.md @@ -0,0 +1,3 @@ +# :sync:work module + +![Dependency graph](../../docs/images/graphs/dep_graph_sync_work.svg) From 96d210dc352801afb07ad95d92ebcc5772ecf60d Mon Sep 17 00:00:00 2001 From: lnbs97 <45437638+lnbs97@users.noreply.github.com> Date: Thu, 7 Mar 2024 00:27:46 +0100 Subject: [PATCH 04/53] fix typo in TopicViewModel.kt --- .../apps/nowinandroid/feature/topic/TopicScreen.kt | 2 +- .../apps/nowinandroid/feature/topic/TopicViewModel.kt | 2 +- .../apps/nowinandroid/feature/topic/TopicViewModelTest.kt | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt index 3f3862c2a..7bd96ee2b 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt @@ -76,7 +76,7 @@ internal fun TopicRoute( viewModel: TopicViewModel = hiltViewModel(), ) { val topicUiState: TopicUiState by viewModel.topicUiState.collectAsStateWithLifecycle() - val newsUiState: NewsUiState by viewModel.newUiState.collectAsStateWithLifecycle() + val newsUiState: NewsUiState by viewModel.newsUiState.collectAsStateWithLifecycle() TrackScreenViewEvent(screenName = "Topic: ${viewModel.topicId}") TopicScreen( diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt index ff1eee319..9fe6a2dd2 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt @@ -62,7 +62,7 @@ class TopicViewModel @Inject constructor( initialValue = TopicUiState.Loading, ) - val newUiState: StateFlow = newsUiState( + val newsUiState: StateFlow = newsUiState( topicId = topicArgs.topicId, userDataRepository = userDataRepository, userNewsResourceRepository = userNewsResourceRepository, diff --git a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index a9c9d96dc..565732f59 100644 --- a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -91,7 +91,7 @@ class TopicViewModelTest { @Test fun uiStateNews_whenInitialized_thenShowLoading() = runTest { - assertEquals(NewsUiState.Loading, viewModel.newUiState.value) + assertEquals(NewsUiState.Loading, viewModel.newsUiState.value) } @Test @@ -117,7 +117,7 @@ class TopicViewModelTest { topicsRepository.sendTopics(testInputTopics.map { it.topic }) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) val topicUiState = viewModel.topicUiState.value - val newsUiState = viewModel.newUiState.value + val newsUiState = viewModel.newsUiState.value assertIs(topicUiState) assertIs(newsUiState) @@ -131,7 +131,7 @@ class TopicViewModelTest { val collectJob = launch(UnconfinedTestDispatcher()) { combine( viewModel.topicUiState, - viewModel.newUiState, + viewModel.newsUiState, ::Pair, ).collect() } @@ -139,7 +139,7 @@ class TopicViewModelTest { userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) newsRepository.sendNewsResources(sampleNewsResources) val topicUiState = viewModel.topicUiState.value - val newsUiState = viewModel.newUiState.value + val newsUiState = viewModel.newsUiState.value assertIs(topicUiState) assertIs(newsUiState) From abe798056e32f3f40fa3614670d6d24bf2aa71f9 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Thu, 7 Mar 2024 08:29:59 +0900 Subject: [PATCH 05/53] Add @After to guarantee DB was closed. (#1240) * Add @After to guarantee DB was closed. Change-Id: Ic29b7d12125853c71ddaef1a997ec123bb2dfc8b * Fix spotless - style Co-authored-by: Simon Marquis --------- Co-authored-by: Simon Marquis --- .../nowinandroid/core/database/dao/NewsResourceDaoTest.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt b/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt index 55e817618..535ab61a7 100644 --- a/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt +++ b/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt @@ -27,6 +27,7 @@ import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant +import org.junit.After import org.junit.Before import org.junit.Test import kotlin.test.assertEquals @@ -48,6 +49,9 @@ class NewsResourceDaoTest { topicDao = db.topicDao() } + @After + fun closeDb() = db.close() + @Test fun newsResourceDao_fetches_items_by_descending_publish_date() = runTest { val newsResourceEntities = listOf( From 1a6b06ff24e71554e6bcf9cf89d36cead15c563e Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 7 Mar 2024 14:05:34 +0000 Subject: [PATCH 06/53] Delete old dependency graphs Change-Id: Ibec84b6b58d8e7911057da046bbebddcc32ceb01 --- docs/images/graphs/dep_graph_app.png | Bin 49343 -> 0 bytes .../images/graphs/dep_graph_app_nia_catalog.png | Bin 38205 -> 0 bytes docs/images/graphs/dep_graph_benchmark.png | Bin 15304 -> 0 bytes docs/images/graphs/dep_graph_core_common.png | Bin 37011 -> 0 bytes docs/images/graphs/dep_graph_core_data.png | Bin 37600 -> 0 bytes docs/images/graphs/dep_graph_core_data_test.png | Bin 37194 -> 0 bytes docs/images/graphs/dep_graph_core_database.png | Bin 37095 -> 0 bytes docs/images/graphs/dep_graph_core_datastore.png | Bin 37540 -> 0 bytes .../graphs/dep_graph_core_datastore_test.png | Bin 36874 -> 0 bytes .../graphs/dep_graph_core_designsystem.png | Bin 37044 -> 0 bytes docs/images/graphs/dep_graph_core_model.png | Bin 35559 -> 0 bytes .../images/graphs/dep_graph_core_navigation.png | Bin 36146 -> 0 bytes docs/images/graphs/dep_graph_core_network.png | Bin 37740 -> 0 bytes docs/images/graphs/dep_graph_core_testing.png | Bin 37737 -> 0 bytes docs/images/graphs/dep_graph_core_ui.png | Bin 36661 -> 0 bytes docs/images/graphs/dep_graph_feature_author.png | Bin 47549 -> 0 bytes .../graphs/dep_graph_feature_bookmarks.png | Bin 48061 -> 0 bytes docs/images/graphs/dep_graph_feature_foryou.png | Bin 47982 -> 0 bytes .../graphs/dep_graph_feature_interests.png | Bin 47995 -> 0 bytes docs/images/graphs/dep_graph_feature_topic.png | Bin 48097 -> 0 bytes docs/images/graphs/dep_graph_lint.png | Bin 42802 -> 0 bytes docs/images/graphs/dep_graph_sync.png | Bin 38242 -> 0 bytes 22 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/graphs/dep_graph_app.png delete mode 100644 docs/images/graphs/dep_graph_app_nia_catalog.png delete mode 100644 docs/images/graphs/dep_graph_benchmark.png delete mode 100644 docs/images/graphs/dep_graph_core_common.png delete mode 100644 docs/images/graphs/dep_graph_core_data.png delete mode 100644 docs/images/graphs/dep_graph_core_data_test.png delete mode 100644 docs/images/graphs/dep_graph_core_database.png delete mode 100644 docs/images/graphs/dep_graph_core_datastore.png delete mode 100644 docs/images/graphs/dep_graph_core_datastore_test.png delete mode 100644 docs/images/graphs/dep_graph_core_designsystem.png delete mode 100644 docs/images/graphs/dep_graph_core_model.png delete mode 100644 docs/images/graphs/dep_graph_core_navigation.png delete mode 100644 docs/images/graphs/dep_graph_core_network.png delete mode 100644 docs/images/graphs/dep_graph_core_testing.png delete mode 100644 docs/images/graphs/dep_graph_core_ui.png delete mode 100644 docs/images/graphs/dep_graph_feature_author.png delete mode 100644 docs/images/graphs/dep_graph_feature_bookmarks.png delete mode 100644 docs/images/graphs/dep_graph_feature_foryou.png delete mode 100644 docs/images/graphs/dep_graph_feature_interests.png delete mode 100644 docs/images/graphs/dep_graph_feature_topic.png delete mode 100644 docs/images/graphs/dep_graph_lint.png delete mode 100644 docs/images/graphs/dep_graph_sync.png diff --git a/docs/images/graphs/dep_graph_app.png b/docs/images/graphs/dep_graph_app.png deleted file mode 100644 index dc1e0b7d7292c7425f86c2b3f816d082aefaa85d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49343 zcmdSBc{tSX-#)A&B2h#oTV=^wkrHOCl|7Y&K?&K$PPQ>cNGg>r`;w&+$~N{%C0WW& zj4k^%WM{^h=XwuHpU?Mrj{7-|`?-I=`=65D>-D~_*Xw+p=lQyVE@@q0q(4MYMMcG^ zdQtf@71g#ZDk|z8x}D%R&!#`DQc>NdQdL&C>TWz)X7!Hsf+rR?`IT;Go%QbB+kesYi>OnAwa zx5pDJe=@l(#~fX4-0ODMc4Q$YJ?9)T)4P6b9QN%shPb3Go75bx-{C40zVh--4smcd zc$CBkhkL};BRMLvy&ljUIcvaokzk^NjLEm;yc?Si$TiY6_d>IrEFx=f~EmpWJ@6S9; zBfo=AjP9lg)uDeJz>Hx2c%4e}Zl5pnm+gt$sM+tIV54H>Ddf5Tp30J{f`<3e|L0S0 zbbNnt@{{*WCHwGb5X-xau>dM?VoIRGaJ?4ykeD`_tfvS)*6K$Ci z7oHqGS>lF2C2{+^MqW$-OvHrpOy)(m>$&C<$SVmnBg+YEV+nPbULPCu8U{_o6i#8+ zCa|5zNO2P>GEh;5G=6-n>#X(B@?mVo^Z<46*>;o-QUGB8U9p>UhIvMt5pILSI{B#0KFWD z7A)F)I=+<};q1>N^F3u=L9^JE80>rVq&@=P9v$-vO#Ox^7yA&%7?lB9KJRag0F$~pTVwZDs=pKf9o53Z2;bxbIC#H zpj^i6(n_ zUVXkzdp~~O_H7H{opAN(4cegX|QhRjIAj$}~K(+*}A7XxF` zYud*`e?LT#o0?suHe6UQ8of4xeo`;)zbkWD#$z@G#Yvwfte5p8`~i$SD^50rvkzn9 zz?a^7o}p)2{*8+59H!Z2iw4PEW4>QS6Udd~J~x+=P-DVzHJMDc>~}@(^*!v{u^)EM zh*{447mp6xDJ1k(X1l2MsJUPLYK)S4(9{+<#2_Cb@1XMQ9zA!Qm7n0>hZI@23gx=t z4N49@i}cr^47>jJiv1O|LibOIQ~h`UI8;F^eE*#mRSvaptsm1hI$lKvGbUBAxx^Pz3EE7`I$aFIVkaE&`Eki zUA!zzFp!bheWy1{Ge(N9)Me~)vfVXm9(A6=BOsdH^ja9-PpdcGQ^qp%?xuF!x%~-B zy`qK%$HpyGpfMKqWx9I6ZLBFZ&0}u3jS05QqhpM8o9^ijsClLHa-VtX!@li_vdoCR z-ieAG4D4dpR~D`F_EjwW`l;kq@)Uvfk@ID^8%DX8==tc zWG+jFNrI2~n|h?B4%r5d+oEgk9>={-S$@hmY7L-?5hEhMfa(mG7j>SIGH;I zNvF)dKK1RDn}<~vOsm%yJY*C*m-Q{?OpHGRdo&FL+mD1XGLvz=YJFYTjQ4D{fE$`X z4tz2KmVXdoVb{i(c0QGC#8@^a_g!O>n~Rb{Mw5y_9CPe;!*_Ndv&#u@R{Y@0e!i&D z2wbeRGkvF)Av{y^SdmTU2?e_#Pep3JT9Cs_Fj<5yHC z@HhxtG)$^_hRB`fb?HF002TLcG zc#skg7Nl={ppsd(YD(WVyG9}|O6@k<<bYPoyIl2{BU11VCR?#$q2-D;-?(<{*^_qD zAa{zshK&X8jqE))H_?>KgsszDbx{w(p6O^%Hmq6UZ9Yr}2^WcJe&1844{7AfQ*Q>gufDJ1%EkFCf8ypJzmj<6pf7{vPAC$- zIVRWQ#`5hspZdNbC@X7R6?@>bn47>iPSiUwwaurKFbI-4-YX#G6qXTwOe+Cqbg8XD zxqI_5urgn6$9wQM!Z0lZj#4hL8YH%BZp;ML6n;GOs!O&KnXK{RL`4K|;av;Lv`~vb z>v$yofTcORcmfRNX`1Y$FxczkEM|}=Xjh*(uLh>3k3*cCS3%<2q@d!Ypn|Zu(6)Fv zuTCjNy_7Deko2TE9XldpoHlvI^c9NURZojdmt^QWMgKVKy9eoZ0;+Axy?RPLB;pSQ zFmW4SIv*NfD9KEpHH{_{7gqwYAznTTNaGT>%oKuErkO*ylTXt)zlpUUI(~AY-QO1m!Pird5XErq9Gj2@(;_HRxXsN;i`(7^b zu*6Fa#3tkkOx$=O!Kz-{fTVIP??ivCI9AdGO>(W69zuthN>|NwIoEeM8Kh$Dy3aY! z4yu;4bY+JYkn%>FyL*lbXvZIhSG`Q=c6&20PQ)_ zxa{0}rm<_L5ludwbE@2?X;l5Lv0y!}&Pg~8epQwukiT?WsBBJfm3zZkiIdTqtcjNNhsg{d*oN80CE5jTmOx;tvQ0Cg51pWLU zb61|^O`-r^8x9sPe>V~oNsMroW!+lD?8-^?Kkoy)q1elA>|U`(R?>U9c7Y$Zwmh(G zja;1U2qKMB5;VX!`6o3wl&vO|M%9C55b`?ijY1m53!`=tU|N*-eVVAG+l=uq(ioHT z7I+8CXTEUEoI;rp3Z8YB+z}W*13&}?(^%h9t3N+FcP>d~2XAv*;E7`>o+wzN2HN~C zTTVklrK5>|__fWvNq5uuzx_uF=D8UMjd>(3_giMg`)psqa@fh8$J|y-WyZLHg!HL$ z=zP`hGTorFQKib+{WsRx4k{)3zbm9xD)0RL_glrN^l2;h-(4??a_Au}MJbB(cT@n} zC32s+f+mL+!d=(twmiefbDLj<_rAyfnIH23hEU42YUZD4e0hOo=ulV5oou-^km>|# zB;7|Fc)eB)3v5-xbb~i1t3fH6TwXoo)MnM3##eLttaXc^*DCnb+F@1>AMfv4Tn0cR zMlgeI^L6qc^jUlEMNr8aPy(#=-ip@wBZXA%d6YEMn#_#=!R*AHsjia~?b&CXN4}pH zzV`M+uMZJv%H1pHwfF)Q9ymgVUba-En2}mbk^4-twEM3_Y47ECDAaIWlsly;8nN}} z9s!Bk&0Igh4Ni>w1Y?4fIJH z;IZ#2y!kx=Zol+$2^4<@{U|X+;f)A@w?bmR?~M~)E0G?PZE$NU6OXHxb{_sQr%Ws^ zzU;7qj0LH}Q8s!L5kjv5g{m=7>8(cFw!R712LQ$t3tlOz!jG1{g%1Y;vVbL4Omp7O zG_AlO&r;`IJy^~!EE5z>f4sXHvqaIq0e{`v2+@J|Z_%eEOng?%OY1WYF&ZHI+3L>? ze?y+oh&|irGWp|V547eB%NfMlBVtlWORE%Ugt70HLJ=1q*S?Z#FKA}E!j53I&Wgoo z>)Bjwr(y5Nx6$+RYAj20aKy5!>iOl>4}Xhc=uDpbr1ZADFIiZDAnsp`%P#LD5GJxU z!S|gku%;8;w^3W^2Fn(*iCn*tEqM{{aQ@MOz0MY_v~4!GgQ+ODN*#Z4~G3{+L& zNN%HQ0e1VF)=|=C(b=D&W@v4IMRnis9Z2|c%}^}xp;fc4TQkOECUNx z0BTc|xij_14<8AB+7rv#Hk%SmpCaxbS zkS&cI)LWUd?8{faxJk5cIk2d9Hh-qx#X5=lV^0K97{thO zaZ}boYwFp}JKMqN^|z}>h^XdG$G>i6N7&s907qn%^k?k+y{<>KTfh)lB(DNM5>jhL z!-;gRw;grkq%pim7W%{_=A*(&FV?nH!ZH)N> zP5bLB>HCN)gbI~9?ul0?Q91n3m$pd zQ_g$&mv6zCccIF$$9oa;yC1WeHV}(Z0-Dibud;PEQ;z6t<-xoM_u_dQm&j%FP3kj? zktROUJ%Mb3%L`UkvU23)OAZ-(N9q%}+qF3mYsrlChYcDp3gcJZMt>kkYCGBS1Mzdu zuB2(aCpN4cl(5h!Ej#I3o3B82Pt4HlJb&|iu=Fyl^H11->kw}2hTd( zNRH3F5W+>n-3LJ)J|(>~rA8xQ&Kf)D>W%d!pYvWR3H{DU!kqLAPB9Fd;@;+>Ta|5_ zzgcd*Q9&pBjKtlUtWiXprs3|HpcZsZ;ReZCEMf@_#~s|yrZS2>ht)0s*62sQ#tNS4 zkfh-IA4yFWDovu7FdA_w!n}mZ&bRuxlM`R|h|NY~SIxV2E-?0Lhi-n7=+q2h!Y@(O z_iDNJ=P8vtz}$v0sbF?{cobbOyp#xWZi^CHrK>t>BmDq@NPTvv`b5~Al@JZMSwsIH z`B8THhCg!~WwbngRnYS)Ti%xwjAW^zgS)K;067$DWdG7U78P{2& z2HN#gl>o!UTgR|*YAZ7!73k*vcb(c+OkA2iqaG=C8l)Wwo3^(n0jH|f;s|)ncH5rP z4iQ9QgUI!FAJ)79=i+-#FWdMu2*{FPrR2lKjZ1%c0z$`mZPlYhysQ^6hiY#U7Tv!B zR;_giNaTX>1pp`#Ox!Sy$txLKM<{C! zQ3KY=x&B~rexF{0{i8cTLAygfgLhdzQw5|_Bw-QHq1^>S(-}?~H<1^0R=#%@LJmut z0#0IoWaH;)?KM!myvkxYl4H}JmFBfHH8TOy`U@C}@Hu#FWZ{DWsX>js$r_T?#sDNUiUJ5QqYW4qG#yr$u_|ju07a$v|kml0lgSK z7~lhZ?~Y$Gf~TEA84|vMJmMm!b0*dMn}uZWOD1f)vu= zU$-L6H*4dnqZP;7G7V|WS&au5Cfe~f^rwrDydS6~#&9DNyk}JvQ0y&GYD~^FVEt>@p6WjxGQu8w=6J&U>I>S*DWWFhCZ*jLEMY9(EjbwL5aFAk2&x* z2459~8DIO1(myWH(T|Zr+IHtDgh4YR2}zgLPeXu6V5$adP=ML!pmjdp-L|6+WEHFO zHNu4NuC>%iTZh7TVspaNxuBjE^tN zvPxSv@NjUIt`#|tOb$*(#DvaE05(QX9JxN07pe7T{#qbn{xme7*-gA}mah!QC`(7i z2Q}W#1T0>-JFJb>0`H!;^+x}z;?F-~t*$SHA6FM%kF}XhFiYOIuJ^RozkmU^cZ1^f z+U;fQfjR%cdXgY0P(HB`V8vzD&!eHbYYnPGXwd`S9KU|}en6yiu4e-_zuqzCwrF|y zW%QB4FmPEaCFrsjNe}uizo7<&>Bn>TU@2=#4#%P3zv?W?-1gjCmI`%|6xes!n(jW^ zebv-zCNu8W)6599A)Y**-NKqaJj9DA@ZUnT6*M=mTg~q1xG*k59eG(A2yf=8yO_;5 zUiVUtF60Rd=a+wqOz{EN5BKZyy>u;_N}=Exfw3a>>K-86>0525?l?bw=70L+j2StX z(WgKf3+>1;S5MwOetGM2Wz58#xakY(&osax2c3GQzV#`yzF^+_Wq?RoP^R z3I+ckmmC+Tx(#=Wyo<76OpI*ab1~4Rd@uB+3)P%I+}$R%8x*+~5#lCxQ@vPw z`{{2{5&{QUttLXR2F@oq79j`0bJtpPOTCrc#0Pz$i=yZdb%8`dtu%5){_FyHMfxkU=P9{dUWob+n?py(WLWKPwm^qW@el0o0}n zmr^q8k%EOaNbVXnmPBf%*H05?FOG14$@8SQ!n@()I{~fO2Y#j%zBECzK!IeZR_P>k z1^8xkEhd2na&kZ0D)36SY2`ead;@n*aOa(v1es71syGkq=7yCfPJ$4Z2GS&r!m|Qc zgmzaB7*^Q5V=cesRk4J%RlHK>Q9Pu}|S8AnRIXxO_{ zG!maXl&9v^=P z`Sf^e1`F|No>}?H&cK`|>aSIM>at*TVyRB6dxrhk+NMDvt_hKdcN0@bA$b|-2J}0@ zn`#*>!d%C%8usGVc~yEJH6Fk#f%W9_OLd=x_Mf|PM8xxQo^|*T@TDX7Hp@^~-U6yV zPUd!jUAOg8YPMtl&`<$Ws2U4TpmxN<-*0jIgI7wS^f(GKO$|SmKV? zWDv>1f5{x;-D#r>+qwLi)`e$*8%*$h-tQFYCa4Kd2~6OGfIdIAj{r%WA6Ez8x%mUF z1mNpl?MZ>DI2_*+jkiWAhX!;&OamIgjiaN;`8KZS zDX&sLauA?zbvt-wDi;%E-GBs8FOA<6qGL}v3TN9@*jN{Hre4G#?<-VY0NztvCp&ha zF;Q|`gyOCI9fvkjUn?_0@*t2eKWasP2c<}G1z#%!ev{XtByQ7>`={I$$|vPTILVHD zkCOn&LaW85Iqk9jdsCHuxjl!^-Y9m%N59h6y9(GUA)>qFam~9{R&U+p9XCSdA|Q&k zp`Qb`Q1^)BDu`8Z{O4F8nWV|Z12QlQVErF>s6u#oAw&v_FQ8I*gaPcVcow;@!f!dk z1k@kjKt%htJTrhl*<2uy;GOe!pfL@E{9r6v8h_X2_l*vnxN$e`FjOu4P8lXp%7{M; z#mIz|b1CHARmh{PwCfr^=+(xY)5rFUvbRImV(G-#=BTDO<-7JTj({i(w*oa@~T_)-%TdGI>B z$n~d!kUqGc1uad*Fr+*w7g;k<(jemi+t`tj{xt8!{pkw~=Xy{}MiQW0X$GHgc`5l; z`YB`V56Tz%cMjBF0{p0(<2KC*kh;YMUm6+%ZdH`>3VElV){L=nh}%3`Z0>BBc?uC= zu7V$yoj?Y{#DofHv)R5p$NGUo%2x1)mflmbQp@9VXzrXBlsgfA-LSrR$zvU9R88N2 zS)M*?`uTyoVjNHaNnH(KUVnRW@>W0I2W0hW;<}8-R|sT0nK7WF7rY%fUS;|uknKU? zQfh`ku|aa>{=8qwplow1LCegRE%gLXG%M~l2)~#x<_Vame*CIj)8P=Q)Ll?(lL3Zex$vfL%LVu{yE)%{jpLL0dJwFSn*XHV!v;G6Am8F+qTlI6>p`s* z9mX$Dn{e#r;=IBpG>J~ReR2LV6YHU*>K8Eu<>K9TFZufO#8Fd0k&!qbgJ5Z{Sx_ds z>GGiX)eUa^RPTMRfS>yD{%Gs;rO6q~OVL!)U{PxSHU6NSNZoaUnn_Ug-@kqbbHC)M zFtmZypqB(b8jz|3`fh?$ohZ2p7-^uyz{bFo2_d_u8_1559$xIEZhyHkZ#R6O ztkqNBcWztQgu?&5c_kp6AN~}TQckH|J~Dhv*_zKC6t2ILoY}@n$)IoU_cqdz)o`vIJ68y))YD+4Y{FVBV z`C3Whxs3uG5M_`-$z>zc6Z-tvKN_%)Qm>b3`@BCW((OeUte0}2275=T!Pe_Op>+dQ zBGY>H769B|iZ9r=5EKx#xuwttn%x)mN#j!{=3Rj+glMX`q%%nSI{)mZM}3T zyBOjGcmN5Ae}i;BNbd{f*WBkPe3jf^89WS<+3>HQpB&3d?o4+g%|J3mdMO3$4#GSG zB%s)96ui))?#0cCOGcfyDOa2m zm8p*0DiJ^nmRA7`|1DKLa-ZuP)h!<&-yo$rADrSy_Y@QhY<}u*wDsglH?um`@l@va@EE zVTD`roA`F7SEB_DIKBa=;-Sa_l!<}E%v8yAG?2!kx#T=Q<1ZNrIWKrFPFi7>Cfe(F z-o9vX_#-ZR=az+V6%QOf%{}K|2DyP{M`P|1{1z%`Sv)!k2!o;vLoT(CBEy@?xe@T? z3MTsaa2*n$L#r0XTss$44Q93OVZd1W5?m^WdtxGrOExqwkn&f4r~C~5Ew^j2Zjhrr zlCBYD3a`q$Gi?lX^%w3XaPZ|fQ+g%j%#jI#Qu^S)&tQpBYfJJPsbCFw9a-(sD?^d$ z)(PIzWlR0|JZ8UZj7_(Tdpt(s+)KzZ4Zcid_fhLd@!5?Z_h335fnzwx`3mD!da#v8 zv&&n$Fcfy@v%oBdobK@c1apVa8bpF<|X>Eng1%*G8py&@?0T| zvl(baEDNzNF*BX{HvhWnk?xO_{9e@baR*_t5#;xMEFQ-f;#`F7$6H<(l;a|SlLHYbX(G-Q(!Bc5K1BAa_R5k!vuLyCX*Tsg0xL?OGo9yU>Z~l!*y12mbN^$Z zf=n+v&$w6eHM>MnTIRGmrruIj8m}JA@9rUuZ*FY`%>HD8S&|gxpBS?SM_>hf`3jYV zC^FUKY`R^(N^`hXXv+-y-=)d$tt(@H=}&Z`nHw}G43fp#XwI$YMr#x#n29pX`)-!Z zI}Us_*f;wB#&`Zn%etVuz-@y~-R+aEblqk<=^`lzu$rh}+dzJ1m_M>`lv2nyY$@b{ zsx@1mFMnNqc7|%6ms08TG8-`S|G^sJeht1S-b$|An>@O}2|+~ANpN#3NBVy)>-jg| z3aaVAJ)EZi4RwlQzfrjUXiL%mM!Jw+G4=*?J&3g-O%+gR&eS->9i0zmpGpaw((;U)$+BVMS6@&{Gye}n$Z za16{oc&Qwa$qUMOl>$EFzSc&HM|PFZfl9;ztY`}m^eh^aRV)CPHw-l;c!DwW2l@s!OU6epkgd>Vv?1vR7SvI!EpVXl9h7xZ_Y&+yFpW!$chU&OL1+QG4F8y1_%MNsg?05BF4#3B$4dOp73z$of9l=G+VdUt)5 zRBJ_>qO@Lr=FzqT(P)yorl`6dB8yeuC=u$zx};`*ehTEn zXk(bV7j-kPRpQ3f9>g~`W-4_8%i=+ZB9)!SlFO07DG62_;X0gHkf8-N;N(?jj(079 ztuA4(+t!5C)Qg09_7z--1Afx>S%1-JNu1mgwSN|@H zbEm*}=&ycut!4%yt#PN=K_%(TLI2RHGo5D7bU87rjD8$^t}ft|J!PC=JL+zE^8%_$ z0=>3cxH>=9JmUs0T<&Mi^4i&!Z36eoKai7@Q6K`iuEShfe>1qqwla@73vXfDb!5Ph zwUz3Y?%qCNo?4)--gNwzl z%EHC-7oLA|*lI%O?#$2vfP`m&-Bx4rrK;8T`JWXne^c|;4Wcj}2qxGg@!ciuK*Hqj znW7Zr^>RzGqUo)G5y{LAodwyr_FVi@kC%9l7Q;!)a4!F^GSj6j_9N5JhTXdY->DkB zFGQ1lgeh7jIzh5Rh2avysMsJSL&;!OfkD%tz}5=W9M0LR9sEz`{F)!@ZttR^(5z#l zSPJK$t_Snxejf2EvJ)mcny7NHG%GYBoX8;11PsmwE*V6{%LiL$aGETLye0?Gjuhk; z=YpGq-~uU6Q1h<$XJ5XBE)D~9f*{-0Hl12 z`$1_{UX@_s8Y?o?85SfEe^G;wclMKsWQFLW`>4=^c)yi}(c7JDo<0%$g%|0s6(D)guo&n0e@(M{hb!Jh39?)FOGmBds(i0xa)8?fx0WU{UUjf09 zlAV-X9|#JE+O@h`V88*K!Tw`q7X+D43xOE|({KA*5uvd52YhM6j{Td=|2OlcczptJ z@=Cwn3FUKMI`kKvAM76pv2hzz;0B|wvBP(w@o1d=A9?Q`>!A$Jh7*6$(5X-mB>ev) z3V!;-kssRrlji2-KWe2CX#Eqp8ohjX4@Lge{WxuT|G-<_l>>b&+zt0AtbiKi-FeG0 zsx%Gj;EP{=fQaMw|a{-*?1z}Wu*8=w)hb>lv;fR|$d zA_1Wf!Y^#2D&rTx<@f;Bft)xSAY)m6h`Z+gyNJPoZ5#Jf0&1&<&=$2d>0fH=me;FM z_`j6Yhw#x>Ie|;X0d$ajwe8HSw(ZE_12lfb76o-q(ANf7eEB15qW}=*ui>fNdamS7 zy{#O-zD&GYOnxusdDYRaYKCt4fBcX1_kI%}{TVEPxfzM{W_QgOZJ3S1A#7Vj%x71DgmlPC(qKm=&Xv4Kz^eYj3aL1TNxR*RqX~X!i2o zdI3@9ikx*|yQ;b3Lwv^fW8T^!}u88SM#b% z-U=VketP`XZz_R^?96+AuL`Gq>p0fFbKv#-inxl^b`5o)O+4Jd1c!tRM@_!0r8I7V zB|$<+A`_SF1AFOw``#Xnc-f9e-0+^ZB&0TM#jIjFX3<^HZ1e!)AZIXI_UaeEuS{7` z`wF=!WqNULqPN(!7NoH%JNur}qJwgtc~NH_lgB`|Ek%MpDjIzHNj!7~FdFK*faS03 z#m2hHpIav+)8G5r09D#8$Fl8h6tF%Q6#=7oS)39kze~9vN-xJ+c}ceq*>S7@qUSj- z9T#Xv1kc@%ci~g6A02Jmk2e{gd35095m@|EFS@rtrKuh?vAlZH3o1LwDD>LOh?{SE z0mXh>``9j{sCd3{2WUuf8E>h!OXvB8gZr!&>gQT$UJ{y{NF$+|xwKR3(XT;FJo)Pb zh>1_R#=MULHO}f$U-E5nyQYI@>=4P`z;<0wM?;aOxxPd;!DtkL1$=T5bh*9&1FzDI2)uW8!}ex9p!(s*gnw5kdpgKW#^s0Qwa2SgX~Erke1h-Oqk?<3VO*UNCi< zQk+abMIk2>%z0SDaCjZdu;{+VH>Y%hH0EydJS$));~}$b2X~q8P9arHf@HO--YGWA zi^aEIX%{!mEJeZ5<#M#VuODG)(c)uEq6_Xqu9W-zOTZ|&4jQ=jYD?x_eiEsj0PBt@ zS{GuJb+w3jiG85gF<(zX&U5|&E~)q`=)Pg(WD*s5HSI2V46y?6&;Z`YVWx5yVre(9 zO86{V^O-5>AuBr@rqv@nWy8;shd?g=H_~|z^*NRAmx9cfM?u&_IN5q)R*pd z>Zc%`tUpMnYfx3aXvOOpbn_WEy?ynva~jF9z#}bMnpkY-72S78+9@UT!o7;f5CEFG zV`V)~z1My%HBWqQ6_WmZ1baAjS3@A}6(!%Ajr0a7`!VM+%XguMr?Py|@U+2=a07Hl zge`SB7sOs`2jBX;mM^f{iB7opcuki9qd9e=t|RM_>C!o^(m3pe=mAIWkNj4ZU4W&@ zoX^E+xvrv`sM$s39bLz){j;6`cT9hn#y`qvH#$1fZfm5Zcm!sBBU6w`dM;zMMN%$S<* z+5`oh&5PTYGpVYls3Q~DTpE(8jN4Uf3rYSgRw04cz7@5)fbT!Pj8EGoW}tEgU?k-d ztztYdXXStPNxfdTW!0|yxYyB2TcH~uTre$xLO)%-k(N6#y>KcR-u>)H_Q^p=sX-cy zv0Z|E4ZVI`Z<}x50lk6dCUd|Z*Q;6^3mDHs;ztFJr;Psek;Ze&dA7*Td}aw+ORU_M zH1rcZPS&|m=|?6ZP!rV187tr5l%Tk*PWKzl_@><3_59nT^r2WM;h|t{!%ed=noH?Wh$6D`7L?BBa08gGr1J8?kc&N`M0NrkIG>Ue&lzryvSsm>AjmO#GI>LW`Tu7)& zXr%{yfcjkU9lc|VHoO1!xtTA2{=n;avGLBna#`1agK+$5iP6B98e)XxhAJ8F`qeRZ zS{7o2@ZXQ1JXW&H=q#hxl)thxNuPz?TB67JxuCe-U&f8BeW`|b#a@igAxgc6p6r-0 znI^r|vp7~$dzyNy+?BOYlN|w94~w*+15nFfZ3Dh$?fcf5sTlY#<;(ml`|SqNikW8g z&7F+sf*X!sYQ*;(TNKsX^nyc@nb0Q@(ZCT3{YLL{bb-$|Lt~CxK8tAc)$EElRS|6Y zMgZhMzt@sZmv#Pm`Ro`zWK=i-X7xPVdpmF>ZrG6j2xq{+h-U%qZi(El;d>G0XYD%c zlD%2c+d2ZFE;#)}_Sf9t*I)Jas(m*umwInsqz3N23BC0W&fb0QeHCm1B1FE#5B3b; zW|HT=Oy(`Dd3tTHQ!k>R%}2=_SLIXXGTGHyXZ&95y~(Wu+W}hsjrR5YS65b37pX-T$gZQa6ozO4f`YyO>6L`JA)F z<#aEx`}<;uS`&8|q8w?G>~pL7FU&8bM401~BQC0YUkS){Uh0(yhV?{1(RO`-{hrZR zUdD$gJuK&Y2_kY195e9?q#+uP-hUk^h~fw!#G@^&t?<@SCmnC%J_Av@yjmRCAKIo80dvhfgU)Al_`<9Naq;#?s- z-YPrqoa>myP9}8QYBiCYZ~ROIxX=&EJ`HYQha2Fkr5Iy1IT5UTfUud%zzY~3dr-RE z;@6D6YVUyGkRPXVf%C-~Sm~8HM*vUw4Vc9#{fWsc!F7Q9`v$bfeG8)~fY@KWOR79L z-!rugUm0X^1~rZ|5EVq?=KaDlMr3#yvT|}y zXQN3I${aq@OarDs$y;(lx=bPNU~Yf{iDqOR6i7j&uK|Qw&R)P?;p?wPrZ@x6$|Kj| zr=r(>Z-5e%apA!KtDXcb0gUUGfY`L%V$rcsm!d;VSp0F-3YB{&fW+xbFaxx7-NXID z`|#ZBLg;CogscOADb&3bX*}m?hGI}|%QCVtz+@3$CVVeP5u-;EvJLmEO%IGWrD)9(-tFPayuj#t9s^^pF#yDa2~OCs7(8%QhPz z%hnqpC*oJ0&rd$v9!B;Fzxp>@8=FQiMu;qfM?oi^j3QP5LQ50~eB32*{A2$lTiM&u zU@Hx8pz&aVi#`T46yl_;)>T(oE5G0@=GB2z)%JY+ZW?yg`V(W=(lyY=7v5?Nat%G=Sz zyUw|2?nms{x%(Zwy#lEzP!CggEUHY;N7xks^6iXn=1ClHh$V$>nNnw2__^fCnY z5ThL9bK`;ysZ_tXNg z7Ei*aPLp73Cv^?1wu|iKx}I9FqiF+CYl7~%!=E&j0o|`2#>6327qL;W^hn}(co7%$In=f+dhd|4H_u}$E2reV>GHyxK!ts3c+N|FM zummnzx0R)h++uw=bsEd5Zv{y6e|cvz!}2UEG?h1%<7VhddtuL0(A7kI!?EfFg~t6{ zn!_L_Xq9H?f{l}a#@j!eK$^TAXzcuV?3wl%#N*Ja+n96Om|ko{R88SIgAtOhis*wwD~jd$dxcc0gjaB*dR&TrSl zCd%x-)P3h0sIE1E52=4Cwcz!mb^#80v0?+qVBXOpMsf6F$8BU3D*^}yqOVL$m{X*E z4E#spb#x3}CZ74E-6DauSr%kEvRA)%=3Mi<-f3!frgXwzmbHS*lwBs411Y;qB*_QU zbq$UcfHtEhyO+D3iMOYX$gKHNKOes&548s0kTLpMr1~_%f@uCdz&F?hvt!IH2K#vx zu;*?`yTZd+5UE^PLxqbY?fx&&3^`qks&~|%+pWx;x*fgN#D$Q3acJLP<*nK|$Yypb z8q{5JZy_)IyU_|JF@q033z}QE88J5WZ;PI%(8To#aCjCOlwFkzR!Q6BdXwr!%I3by z%(xkRpBisAQ)Afn6?9U5b_H_-)LmfTl7hqCv!3|;_DP?qqP_ZB4q(cpqrDo&xbGC< zL)Uq1-EfG<=KVYY=5=O8<&IqzSAJWs4OLg1oJDW#IuMZG>dMyl{)v9CK3kHH689H)-=Ay^Tmk1lPqMu*=5yUlp5mP;0u z6zAn70Ph)$<|nYY4b;DU)*_Ji<5RYtE!v7v%vbyQ2`{iuR#**%Vz|I-RMc?h?4<`Y zyNoD4wN?&P&jkbdKJ|oe$*DauZj*upxrfhS4EdnF{IlDgR0V}EwQ48vGbNS0F1Y9M z0<%tbor`fUQ&#YCnRD!=T~P(toD^W;UpCWE_{)5$sK2DSKacqnip;YzQ^j4SN1NyL zWLj_67;#rOQjRReCFeZgdh^_WGQK5=h_*RwQ~0T(C+#BK*bRG`twUJE*|QLJ6^mQX zPfv*NPQtxS67TXK13DC;Poa`#t1lB6@j2{E_li#}rP_adHNB(saVGiEgA}IybM_;5 zQ-SA}vEtL47B_jTO;3A~d?kk_y`WIop9>p5bBF=zNxc2D%-WAw`nM z_FV_A`RgLGdB8Ofsc_*;S(pgck(Iz|RIMb`&ADlWKg5g(0i=!|tnde(y%9C?oETvR zwRdh{uiw>E#N$3|;)`m|Wml)(Q;bks&<6i{T?j~=uee|L3UMRQZZcy*6a1JdhEO7D zI_7X@520^h(C6`uEmx$##SCwU){*KMS3SghkT(I8xm)i^Il`v1@5q=GuYY^8ZgtLI zH>CK-L3c5?T{V2fbE3@5BMLMVB%t0` z=|4V2pKTkQT9YcW|9y?${&p~A&&2O@l8%OY4V@0f{mK}GJvM`0gz?@l-xIIbg?ghQ zzl>d!;ot>kMK&Q#Z+Y6wWVz11;u(%m8K3UKCx}x;!sOdIrOzlw?en>C^z)6(nkuRU zia_86l&4;$vr_{6?4;v&Y;uSB&#Zcc%DD6DW1sDYM)^-WK=y2f>+q9m*VXPp-`%%s zukm9@mQL97z=%nexy5F94OV!5?ItWGp3B_HUOa>NZl*SLynHICfNZB1TCzaqUlMI* z2EBM&yogrjeiM^^-e)zVBSg^lNLY)MPq>IUExXi3ih z>e~0&&2fhmifDeIr|LFVQncpxE>q8%Yy!N7xiD= zAsSO5{JE6}$=aLK2{Z+tx}PuDpxI2r9`Q-<^QOBoWemh}Zh5=MOgv{IHa(73oqbN7 z+1|w#PJuJw+C#wIC<3;JOAN84X7^aK*PN=ii|K0fbFD8P<>*JB?F3&z3!o_IwKt8B zA!!U*a8li%F&a1c1$h60Ayzt@w{)V@J4NbP1GbPO;m^bd7SicJqIh$a=onK79dfb`Xcn zB$l={k&AMom)}$`kQIJ%hbuckw$t^7Yf!;|IvOBd|?0(BysNVAh)X z=D>rVUW)nCvbb;dQ;q2N>r4LCMr3TLD@O-3V4!D{V*dnV8!0XtINjMj81Upo(XK1+ z55rQooJ(-QRDUBTPSr>6_V_Y*&P5~OK+tW(>)ji@-WQr_^u7j@1FP{cqa|CL;lrWC zPw+RyJxa#e8h;H@&VEG5*UcNhU}OS4y}*}fR$$xlTu`_T$k^WtD$1b!?8J66%s0AJ zoE{8xwUY}Ic?suI)iW6U)_bgWJ;Fg>&*IZA7XBZ&pP=7PGi?6^5HX%(+R0T;AK$f6 z6Tk~Q`PsI%nH{8Ii+2n+1O2TxrIa1amA2R)!4plvULk8ZwkzG9&n z{@U>7Xo;ETsltdXi6Udv#M*APs9qDGdEUJSb+k`_O~~F*c6;%he?{_`>91@9PVg6V zBlVOG=s;N)4ftBVMNmX#L26HCF4(q_I7g|eVz*dM^S1%F3a5lsQ;Mgb4Ulm`t8oIb zES_2JdKi!7Eo=gVFkjL7loc_L3YcFJ!{9TQp5s#~Q2`o(HfW8(1Ebo%tDKz%a8~49ey-K+n%ifHChtJ=y39w@;U!RSE)%h!<1w zzBw{F&56s@2Wn{(_UZlGMlt~#xd<6aBA1Oo6R*{FlqAZ5WLr>;>=gFmD;B+oVFKHX z@h|lkt`_WD54>Rhx`JIe)SJhwtILdYEgqMh9@*Fs#q={Bu^0#|!<1HW(_l40S7wKxChmeYuytR50jUqF7fa)OzarCbjX|Xg%x87^^R(iTLN%7rmt%gy zd1qgKgi;N(;y<1v^%eV&icvj7U~>~b`h!c+@!E~K;>G<*?T|qv?*eqEOGch{!;9RI zT(btc^KGNJ5q2EiZYj5Kmb);7){M6C*#|2-g!6B;-A!n4AgZ2l2Ae=F;*DH#wN68z zqs9K+8gPps!3EavYO2Mv{m5r@SxuBl{APN`*ZopZ8lZgeD5=8LdW}Xk#hxCpz1+Yo zC<0=DSG2_t4NSNNb?cfL5{Q%%pt#wiwyhd>WG^Ch7qpgI@Beu{5L`gbuL)o%euA zP}K?AX-nd=CJ`ul34@D@V0+x7J&|@w#rUg%&B?Tm3XxZhq+Z8WiCx z6f-V8kUhnqY7TBhn_nG?l^Lsf1Y`;JvJuF;=^6(lBf(|)d1$YfSD#YPt=Jb#cgLQrf{>`LdnN)KsTT^VKh8F_pKZL21uBO*dU&XOUSnc?yOHIK zU=x|j$(}M?IdE6p901|QrDEYWCN#d#&S|3j6*2K7$!5_nB$RmC7s|B1_tpTRe!*kb zqI*Akw@^}o$2uzdlbj>~G}pZNGv87-=j}ft?!k2|B{aw2spi2Mb6` z^z4?lJqcZyzfS~%^luFH`;Oq`$KJe?qufzl!r4(>0VaG)R>%Gd_2B&IhRsk9wHSaL z)82}eEV`wqIrWP#v}7I|I`r6?Qh1(a|3&i;T#%vWcjwb9ruD$(TBlgxKTXO2OS!-7*I`G6%FM$ zcLaTUu_`;J>ks5-+rj+-bm7ax!Aud0J#=b*_xePjbp37Q z`EJ15Ka~4Av||t>cwakd>Udr#xMJFc&PEer;Dxyn-g^U%vE5F|`O|lLlB2@E^5E-m z@N!_sT&OQ5oJowZxO?hPrO=LQoTB9xShAtsoF6MA2B3*`y)P92U)=-&`!*xT#&%d^ zeQD{&EZnk(0NCu2GP_mKg*?3S;u$w3xm}RPp?&|K{gwR{9G1pf54y`EuXoR0C(leGQV#KOV zHDCNsbqNb4I&GDDxR4G;B=t}kx7NWuCZ~$j$ujyqU;lOL1s24-tJbH4GeyJS7!r_- zhb){D@ak>$lqCi2n6TMuYdGX*Gm%uxbYPC=V0kcHZK|E_Ul*%^kmKp1EV6V|d>pB78 zPkvKKgW~8y_ah-VAd~P(~h9d~npCqSy)%jLe&Lo!i_70|%-E@MZYXP$TYVw$r4bKWy z{9ZKeos${1F?1Q;(3Z($cn2Wcls(#7eO4jj7NXxXXDfz29?wje(kcjVf`S>C72&`< zst)Z3kjd@+i=4Z}C4U()(Y=!ze7 zu<7H+-H5SMWB6Rs+US%-uDT-L75V?P_vZ0X_F>yNMYf`nRFW1Ein5k4A+m-L*<0*u zw#qiLq*AG5t&DvwWF4|J?RUsdjAdGsB@ttrF*EOZ4Hfr&zwh(>KEHSSeBS53JNLL; zb1mQRaUSP!9H+5yj1uoE&aIoAB3nu+7c_GiR+Qg){dgRwhISXb#;3&QE|zI9&M*!| zvluGrke7O0TxZ1j&`57bn&k=6;AgJs=f$8zPosb4mITgc`ui!6kZ7Vw=f#d-eh8AlnsjToGafA zjjycX7(?-B^+hFpG%_(^!KVfp1?ZB27gWU~N}47>Fuv8_;ol;78MnTwLnSrmp#zhv z8QooezO5Uq*)r$euBFIWitO$}-wnAu#u2xoiKtgZBNpG+FUhd|iro}_BQ6roLmW8| z&Y_FDunIAs%{}g{aY7vmzn*Hj8lK}##PSzc!MS}t`(omA2)B1_&$nz4E^R7;M0X~9 zirCsoc?jCJDO7O#n3cyxo`OJ)ZQba@*iYY4rv?e~5F6RY(i%1Ws!zZvO(_%I^V8Ef zhruqgI!GMP`1AIy3m-$B`wn+q`by&{xW9PcqHt=(glzrR3D6L%svFXJNgM;WslN0O zdLDpFOL+wV^=-s*4jSO!kOAMzSp^Lf5dXna=V)#;ubJ3mL(&NEPx3r&a>6_B#)`?( zPAiUBJdWoAO>)u!az9Pa@`tyE}lJ`RDYg9ycrT0)OUdID& z4jvmVB{_<+^l7=F>LhT;^IZ1BSOdPP1C4J#-H5A$8^n)zuE#ar@Zkn>w)zJ{F!o*F z9SY|^9o6EKXp{a6N3_IxoOUn=;eESn)i}Pf2+Z8+?tuwoNCI&8tpkQ1vz|$fLOdQ@ zY1C#Z_3{LQRwYe6NI^2ektQ|DWvQGv4Wj%(+w-sMY%^Bu!KsRB>0eC$Y&lDipYSmy zja!n!X8p~xi&*5dixewryAHnF1F^ZHZ?@S4wN$2CvO*MlOv`JIkI?7|t&yI*={^GK zACY_KAzh5CBMongn5~GN-eM3HsKnv=CO&7pb)T}=D@ot)AN0w|%Awx(+49rL?qA;Q zicXmB58Ae|6gBO7lKaHM`Mmx3@!s*p^U?a2sVF0?W~*)N`@{al=%FplTnyF&A6C}u znZ?~OWOeimXS)t&@C;(c+LVNV6CWYB?5SItd8lBZF77$G%T9DYy@Fo@U(zq3X0pew zC6q1SVj7d45Yg5Lo((1tke*rgB`v;CiqGcLeg49R z-_}EwXNavN$>ol>>Qq47>Z(A{trrw{UaSQ{;+3+x45dtz>se3~rYL#asud_(<8d+G zw7;^)cQ@462$J>O_hddB2)xmz9;idZejdm@!T9AHr?<&{(wh9yV`E9uV=kQK-yAk5 zFa*S$<=T&Ow3O7`kuG+HJXVV`jY=|ZmJ*U;wiKO*u@|0&@1e?59X;3cT<^r5_lYvv ziu2agwp_du_QTPz7N<7W+kGMPwb*R2(D^UOW6^!)cD^^XLGo0Cd7CO@^EC#i zw^&mL)1rn|jw`>$dv>AOxhoqqN4iZ^E3`lp8I3%Y21Jbe9-bqd60t)};m73r;Homq z(qI24Eb*9<{b+cdyvCy(i$dAj=b-rXhD9Gi~W*Xyqc!QM$mpX3cGZO$Dl`(zE+U_47 zN;}?71o0{L#m)YJN!@G#Z&f%5nBCKVFV)YYFR11=9x;}6c5KM9Q;_*Vv-D|y?^Idv zSoA3g{e0x>!p)~=+K2|9KjP7@2#ctT$HU4%xd*R}Bk=uZUUF@Hw1Yj1&nBJy&S4PR zVU1@@fUUj|5N|Kn)L!yzqzAdY)^BFb+v2!zyw}3wOV@YsJWK!Lj96l@JhBLV+kq=p z_}k&=sG$%SZXV7Yy?8EkY~bQ?C%|)6@A?3*3{ihSh5HYFI)C(8cI+brSval|c0Yg3 z_Jv*p^IGgpX}54L@s=va3bwxB2NDaQaRqCS`j+xaHt{s-+pGfPF2;Z_hWW^^sEhHS z2udv<+Fd=`pCCx2ea~8}wO3-U3wQ`PerFf3P~28a7E%KEju#1yhX=#I8=5a;-FmiZ%FK!Ts8H69J)Ja&z9 zInED5K{cBzN^Z_K;_aj0)s;Q=ndQBc_daR+;!Spuc7-nCD$olBb|ILOwXvzs+|!>t zdP;aF$lU2jN?$WFwzc}_$&3C6;Mol>czqdDzjou(;=rLk^8_J@J8o4gIO?dghKfVyd-*cIP!W9Abzd zygw{s?>MjHRt^D+p}t^?g^#VDPY2CE>%8ig+UG1LiuA?&W(X#GUN>QF?A`eQ2I`KR z*1fAbGpvnlBP7}b-u{@Qp?Z?+>3_q3p1!ttt#v(`jV_S5g$6o|E)@B@8<+iT^`I$i zroV0Qxf>@%gPsMZKY@$eT>SXTnipgEBFjR_DywbuZ@l!j!9$f#yCUk0|KWCIia-6G z-9BU6Nt5iNtk*e3tJXNh$~hTLemz?gbZhbLK{DPJo`vVDI)$@-TaQ&UsRe!L-O>0x=^=jMv?uK-ix z>e33)5HWz9$da%Iflo{(ACG#>6)arhD})K7<2lToAUtn}9l!1JN*3Y_fF>g_E$D-p zTOSGoV+c-Qdwdr1zArRgfNgvjHm(#UfW}RDVff#VRg)nP6(>0XUW&>wKtNM75b2#k zrGfxR83QPJ(6&vzUjXtliSnT0IRPbrA*}N4*8L#SEXuizMhwxn3r2(MH9jw%FK_rQk$S)qhHJV6#Q0_R25g1A@yFZz zzdvcpDv<`n!V=sY7jk>%Gl=SqW=1;;Fw`K(k|X(>xse{3K2ed7QkDcSCP4-nH4&D& z4|dWT+J>@BF5Q~!M~`$)jX^eqa(^~K9w6qppLZ3a&2DnukO!Nac1_vJB31c5q-MG2 zgwzVO?IJvmPj5q{`+-3u(tUB+Bv*pf%XMmkcqbq15vs&R{Mfk%2B9 z8N*!qnvksL<5OzYk!K=7p@1Piy*BH%Ba|9VQ6Vomt(}TPua<=7K^zasn%%P4s**sO zpKLUSYZ%fgn$ff~V@3SFX;Os?%gbM<%(4yG4y=#VrL%Gc;8&$JB!9?3*NH>;`Fb{9F)_)+wXSlEsR{&QRE>Sx-*6=z19F zCs2fkz6}IwE9Wp|BCdxG+ZIYXIuwgEI1HQR&EAbX(!M`qkzfY-mT8wE*$4cqiDM9W zk+Usm_B2I?InObRjRzV>oHf=+P2ul*g#VDIpl3xw@(!T)$RH4iAjO89V7y1z!Lu7d zIqLAL(hGr&X}%s1R3)0RPt>7aDg_?BY?xP|CTjWWsB2@aTW7*IV?D*Gd(;_-LN!2C zOsCXMLfSBP8xsSw62b!fy}s77b&u+og+?|W|I&?X&on(^?H-yf7km487zeGD@A{s2K5HHDw zz_4|&VA0XvD~BFJs>oy}N>Md6=cn}Mkj%VR9=3g1V*FJ3FYw~{99EPtgE2Ck6*A5p z=|sc;To^b3T@aF@-EFEWKO91z+l%g@oBQjoc=Fwd%u2OKtuu4r0?yk4v#S zZthhn$r{AtG~APAi#MmG%fiEZOdJBo`EKcIwDRn%o!I;D$G;=38pSS;E|#pm9Pj=j zHvc5}-q-3F3On*muU4$|lyZffEUws@p;lp2x7vam>3K@s#}?6ejX=dJQ0(>9%R+1z zzgdB4414lrUd_QI*m?E(jA^o- z^o@TCg~j-p1bWeT6PD;(NCgvK*cQWXvq2$QQ2FDXTXG?FhKHsZCZjh#KLNLC2+^k? zQ2qB`V%4@>3W4dRGh)3v!C1d>o0(?$%1=A^!HJ3NBoM90yq^nFg% zw0Y@P^&5Hq`*xM`=+CaQ2yFjsJM=%zo*WeB1Kg3YnU z!DNlI$oU~keuqC_X(=i}ZrQ>m|IZ_X|6i9HZZ{p&|LY%~8-XOlc5rBy5M|sWD#VuJ zlZj4n`sWoDNsdC2x60`L3(EirwHwr@+p$PQkkhhXG<=6MHa5>3vky%RlmVZc421EO!qgcbgoLcclD%M; zx+j|^edsgfvQ<*x+(={yL0W}+0c=}41V5_4x>CH4PLI|GRrfU_jHfF<*g@NB;muz5 zdWe(~QlGmfacG{vm35|sP(GZE3MV1d$v*2E1>zQnjWC97cFk0lSS}>Od@DhfD7g#E z0jTTdx*HPFEhZ}32FXlD5Q}Tr!6&;{;RggE8t6hM@KEP(9+R>);Ncl#s4D;J^gZIc zNQN<)m>%AfZ&jTu?=zep*IJw|oODs;Cja4+r7m5PrqduDT}6R4p1)_pxj8j_3o58; z3s@{UIn6pCul~Wbup=OtEz(W2#J~e?2!MguNMEdsd!Is^04_#xIlM6QxP$PI-HrDU z3NcW(|FL3h0;S?1S?-5Xvb<1Y)h;$rxhBL7+Q_x^p&>^>uRKY4#(i>8UywEPCA`OWKkGe>|x14hhb zP-fOS122Hb;(R{6ymn8P>W9n=YP#_5o(OE9JiAJFV9#CDQ2X0fDK61t02tG1CM9o8 zrQh|tZaF`v98})icdyBT?1UURFfY>zMTu0|J`|qv3w#P3~F zZSR4-LjyFyhkq4qjdk0Rh|m0&qZ*BYw1{cUedmxH#ymyth42wYLw^|0%QUP^jr56lN}sHm7o z-~QPZsdWxjnPx7()u)FJc@OIIAD3SDBA{l+9LU92nYc+u-z_kC1RFQ|HvPNHKp}^= zUSiMb71y6fWg2e5eo;6g2$maf;8>_~+Ky%UHm1)V(sPchq+m@iU?D3l;5f3Xf(gb!QSTKFvD z#zo#r5aF$)TChvdgC??=`Tbh@p&9yTwg3N&ApW+k{o*`eS8>|FDgpkjS6tXAXvaf*`Az*GhgZkx z8BsHJShY2Slo)6WC}%0ZL%(8>Gi8=D%Q$oAH7C80=M8KA^OgQDLJ$xpy%aQf_Cr`x z9!TkdukYjJ$Xa@b>jI(F%76FnT?tGIWi5U2Tx9ug0?*8ZYlo6X|M1=iCm5H&#~I6I z5aMr#<$}Pzw1K+Qrr@kh;@QJ^gAN{iz}5ydZu+ z{vudyGGR$*K`Of3M~`l-&Icfq14>3n zsTh)4SkXTgtegbKes0+c4!;gON9g#I>TgN@#AAnkB4!l(Y>7D1c<1Fgz%lbZmwz~g z{;qE3d>~XyS>w)Qv(gjLn>OO%;b9d&_K(HYEFL{{_8~+v=PHo~cTueN^>Ow>>wBx! z-qz)N@7mbPCB2B>Rl17l@V_+_IZo$@@jTNRFN7O$d-bmy0hzU;!ClW)#fE&3D5QTz zF5}{=^qLW8Jo5{K(Mua06<~%Wmz6j1_uz?0KepvpiSxGw>fW-4^KWkr{ZIb^#eZKJ zm(~*Mh_L<9?@|LQ5sS5%qC83jmX=vqIElY(og|= zkb&WdpXO0zPzv9Ch63)rf*{H>tI2U%gneFpi#C%9+cP~o)<{eJtr}-xb~FP6L6AO( z%IY#fR2gybYHJcuEf-@gJQ`{a)b7#wf3;@%+r9H_h2WE;t{)1O;a%C+wrb?~QvNmW zK7_RE$Hc_swb!Mn97YWV%ny zK>i<{o&{ZGOJg+{OS!u*Od_OhOCXR)d9^hVAC@g}34%BYr9))E&^b^l=0QkD9#mXI zn1=<1PVjCmRdsB~{-^|fbURcD{F`86^x@p$VJC_YP}WT*l{=wkF)9=f$D9fR;px3m zbOky{zO$cWRJTt37C;bD{pUt%la{l@1Y^e=fTk zCPKc=P|KX(^KuxJ{m|2!AoH@E) z54dNm=aGJBEV$hy2m4`UmkkXeP-h;d7eF)JK)@gUo!|tO7-$B$+CZo~RRa=i?S8G2 zg);!lBf`w=`o+x1H2Uf=3dlGaWmki`;u4$q*$01Z7IbZO8)-@jwK`tDZitL*t`idz z`th6Tf8aMIYEwk`^fyijfT@sa{E8ZnkI(g=UV3dLfCD-|Pyc>}d^&oFtV4EZX@kk` zJLB%NZ2`K4L2LZ>_4UhY4((S^aIa#1VE5_gG_304BZQ*zm?*+0yznItWFpomwGq<& z9Z*1<7xr+9cdxSMvJ43t^F!P=^PUhmcP4DsI8Ha};{?4KE zmDji}zChU;(g|Ov3TAgj#n#ByJ zjP;8SiR|mC>)hq|u4;%|4m;TJo~Urcy;Z|?nlDxJUk??nbmtS5JjQkXknS#l!@iFY zt08g5*W(T(X>+K&3wr^A|Iit8Fh#fa2`_MxBGNi^;*|BH)U2I&6-Xrcn| zktoP&6e#XEOXrfu$Qbt}J81xCKCIU{uvfVH`1oX3D{YmsyU~Zae*L=seJ)ZBZ4Qv# zA9xjG9VjthGls5N2FV6Y`Z;RcwHCUfD31!W4PkE)bU({b!HXvQHe))Huzw%0*(2%3H0yoggE$Si@p`IAV`H0Uve z!{-##Qss&A5H4!~J8U~jj8ac5#whxqbRPqX@{{xZ&Wz7e&?ZHK2CCieQp&4g+>0L! zRcwbAOFQ&tUw!_3{{-VQIQnY61yZ*|&K_%xFjPH{K>M`O%pErUT*xU93Dh)GcdZ~s ziOz$AoVCLpT-kmQ$xWQ#5j#0(3tz#63pMXi*b9_f4v2J^`db^-aE@iiKC0uN%w)jI zNy?3`EgNztHGheOTJD|?5-s6CySYev>UIg8g4*ep04k}aQ|@m&wn!{N@`R}jjP#zZ z0jA3dfCf(9C_N|2F-yfIf}yl4T)_=(HH)Ohwu8pV#`5XleZtP1al;h3enTuIv5CwE z!Aj=GUwQXHUH!=9T5Vnn*jGDg;69T!l>iYLWPfo^-+%6lG@OWo&3=J&?(-hCMg)|O zPdXcI4{zVLz;a~8heW!4Y>r{mEN`lx0E-dJNK33qiI$uI+p38qD~!0akxgh@pqd<(ogHR02A5MvP?rpATgA+^nQ~F zaOSU~llYrEOI(mHD7B=Xm{oJ0+$w1}o703h(I;-bUf|BsDc2v6h7m{@1JLkrVzL<- z;A~ri;0OnQ@P~D{g7vHB>qysY5XP>!?dEerpi&ZmP$JlMA}awAW*0>LTah$U>3cd$ zY;WIjwYHMha}ltwvh+(>VE4E6i;n}5c&!%`oAA6*#zd#=e5hC}RR`iZ$}>2`rIb}A z-&6TS+7K|-g2`tEF?N2z;6*g%9y>C{ZO^iPR)^2%b7<-nM08vG4P_)hbaQMz$~dXm zd-4nATYUm|No!abmg1OTIXiU99DpjZlUP3t>CGY|Z`Oz>HpIE1ll*@i>Wvl0O6ta5 zEvA)062eIs8l73g?%J7eS-7T~*Xc7Q5O6f4#x1DZeizT3r5xm4Q3|Q374J%#_wAK3 zjJhrysApK#5Tgu17OMC(P%?1yX1n*mW#144p%~XzZ#ZZtfTR%@1@#arJqNTrMv5S& zP6VHdDFBfJuF<)CH(S07NGwIhHe?61tg>8}IOXt8(Yld0W5qv9?vYB6XHneI&=(zs zp0oi%io_z5LvixcJj@NjX;i^L*H}Z01^NDX@_xvB$+A*EZPPCw$!Ae=>yq0srOA3J zKYr3BAXT>QZ9L{-TTJ_6?q1E~a$o3-MYW%C#4MedMW!rO-;#iaGUjlTr7O~{qIY)l zoq2t!H(qI&sD72*rdhrkX3z2r+e7O#x&$RLFKBruUWDXre6BD4z92T63qy5F$Hdgi zCTM$P;L&%5Zp05w7=YhXG9LRWZBZG?hcps?JtkswaZ4a%qZOt)!UXlD7 z8@(%V;*Bbo;)W7FN6#w>C7(c;Aw9m6t+(|ze>{@r?W5-2kujsz>?P3WrY&&)=$Ksh zld}=j#B#6C(-P^#;%4EK`d5*LeVdiQi9Ibwv#`iDB?P_$8}!rLvA?UR z{1pdBNDA$)-*SO}X~=8*ftKf82TF{8k5^gFT1_wI5%()xF(#(jKZc=WOAAUAafbIpa^ zs9!Q8w$b@7s;OL@LtDd)pC)l-e{~&OQ}PB_EUB`1Ea{ITmMe@Gs~1R>QnFbQpe?yu6F)Taq9XEa2E4RBLU}Ixpf(sQns)nUkgZ6sv7(hwmR{^G{xPrqF2M8-oO0Td3;M zoCsVo$?0WFmT?5*L!y7l;7P*DYJ8sXH?BH-Ow74u^e@{( z-}9N3wf@HM_-?qG`#NP<$Bg4H9|w&)l7*^-eq?h##&8wW zbA<0PQFq-G4iUS|T}IoE&6O-)IZ8+!JG{nEAB{TK*VIIs+s{AGbfxefGj-?9UGTX^ zmxr5}cmp4B@B56ib=%DuFT1BCNa-E{9@j#3f&fAmt)FeNFIa_}YSX*fQum$UHA zURyfV8^muEIVW*87_H!uxxR&{@)^m6YF8}Rig1+5_q|bjTJ19!#`)3D!NX4*r zN6=~uF8M3{?Y)|(ezgy^N&RL~75KHiBKP#?E0xvxN)v2|Q|uRYu0@FKIHsglZ5^pp z+oV9-QtIcDtthbkYla268_DtOaIG0h#a!xgU1=qdjyLmlIaOF2R=?1XSri_w?;eX` zBo(uYB%3LI(3*Pm<1tBrhIQ&3xlC|+^d{YEIHt8#W#p^svVKgAKKJp28-A-|f2~G{ z8d#3WM1{{-`u)3a(+UD+a>xlaTUB~%>H-h|ZsZg|V|7K+VA^oIiM26o#vD`OuYfm3 zw4R8t4@^ya!%qSzRW(8M0>jWiPN5cFTn5R*GsO0Bp9ImFu|(B)$d&_V!eBa)Rkp-l zw_n)b{oSS%rLa(ZTtfRRFb@p z7C=Tle5zW50O>nWMZk+8W++AWG7#hs6MH`hnE>N(*q02X-1^Z*i0sPjL_wdyA+UH9EZbK)#DJ}e4?~&+^h?Ef)T12( zIxr5!)=%4jJh6QUCy@t5MFa^1S)U7@*x*8v8v%tH+uGW`^8?Rz8wHU$zN>TYyV?gw zZ1RPPOq(8^tv&vLviV@)R|)r4ufzU_n6anaU*FiA(kZ^29Xm8jyxyGKn#?lAcXRBq z)16e2Ei*kA^a^hjU?M>kdJ}wPDw*d$zg9K}8A9n-e2%t+;mN; zPaWT1r|}e0e<(f}gjWOK(ulbWxKn`BA$=J6fKw~qg_IyL$zgOnjH&;+P|(k=L1fZde==YP)4`;TA7~bx;Z2oCQ-vuXK+F%X@y& z_~I$0yz8MaO@K0ZOr*fsI(&E6!eNj}5cd}Pw#Z@LD1SUeJd@3j8@Q4X5}D+aa6UD` zzbf$kgG0(>7!UzIui)`(+YDOT4b;@af9NS2T3SA?%@oUmq4f$`lsh3KFjqj?n#p7u z_v*Ju5ROZ*n6%gScr}m@2UVKRf#E8ZdI**s1wz%~Q#fUv0o-p#6yMWZnexq!HUFs=bJGts(=m? zGhp^~6H=oHTEGKD$A5y*K+!s5s; zdol3uE2P^HsI0fYc_l8KAiC-gpv`cSMHGMGL#OT}xE*hSTCV#dEgfguUtV7p@Nuwq5jumUlqZD>5!Fp9mL+v^_v+)n$p zyb*5}HUwb0i?~i_&Z8+gvG#_pyFv{V0of1v?9qdwE{hD?^KX*sOWicA`C*(Ft20?` z*GEffnUDfhCWFLCt5qitD>tTIv^F(`3Yi(1(g+T;n*^=x4Wj9C+wQ9zMeo0h{t|tD zf|`>uHMxT>Iekt#52NWw8!>YZ!gt;J)dC6PdmlmVk4$4;fUmnf<}>X>RoW(5s@onp zPpSm6?_2!MJ0W#7q)f05cNTC>g@%I!YiY}Wx5uaHM7i5{4LPgUIu&rhemj$nGM{*V zcq|+G3nOSL#jKEU!{yB}EkeEfw_Ll&Kbmnep2o9l-unDPqMw5ax&HKTGgyol%6UB_ zeNxw4y4_tmQ>*|1wSwVW0W2);Uw;}1`C%<#tI2_~cjJv&Pg9^j_sjSKK;_*^t@VHc z;itd0F?pNr)nLyL zo9GI?>m!qQ8%9HKT69yWdhEUjUMEoYkqj5iEASKI+zW{-kEj=m{5+}q+rRW>=1yGJ zn(E0iR2do2{wE;idG?dfSxK=bwMeDf*VhlW@g=5~wHC}C9aEQb4O-RZs}P_B=zp2C zk)2SV=Vg59g(trSG43vai5n|X2|M=sDxcqeQv`tZ@ekBc8_(CRV>j4Kzo{}X?12eb zrQ-~H!ias31%3ot9sWG=K;K{KHwe$$4)8R z279e)1&r1c34vx@s9xiS zdEfkD+VBwyCENIHTl|GL;82nID0BXpj{^msfu#aWtz?SQKCi<~oZ_S!WDA@jX6eo@ zK(s%iikN5iWye>CIKPfboN@d~kSt%%qLX)D@BNXb=<*LlZV!;W0@r=j7rTA;hsH*R zqoo$4v+=z`#KFZtd8xZm-hZ+^<~0&>P*~cJfAScOxH6QTYW8j~`&>y+jv; zCUI#$z8$yx|K1wI`A|qc;B>FK-SXuIK%?Pl@V*R==_M)TY}{*_EbQ&lTWJjJv2X?r z)NUa#(%EvdGuNLucxS>4LYr8tIV*syw87_{e0<_tBZg~ghhs(8#$~pY>TQ%80S^!2 zh5!4S(sY!28Gc6hkDZThxakiaK|JaLCtP}}E_r23XsRXsL-09uP`~h}s}~5{5{uqL zL$&>El;XzW&JssMevJUko&X&Tg*=moaH~@w%8PHE23(TYUFHhSFcTy1`R_HFL4615 zfBN-qa1wScO1rgWuo@)6AX1!4z10PPn#we6_&n(GkP&5mhZLRtKV1`U17oc*cxggy zF_8QCPN@qAG_^lPBK$U+G1%DMXaK`;`)Uz$CIr>yLD!fCHuQC3ByUdg`iCw&NVk9ts_3Z*LbF>8bS5c1BGesM8=%@9Y(l!gnpG zNIx&ANT0g_V=FF7MNB4~Ox@EkSM7uwF#j;n3q;@fNLI#*&cm2Lfm>w6_v8y=YQPYB!6bUV$ zYe|P>*>(K+!6V{a(_m4i$M^y6Rdp4>er@g`ty=~7GoMnjv<4D3e@&+fmnpd@4bAkMvbsq23nwk7s6e#eo zB&giyRh`fUKhZ78GpsY3eo4JOLz_2nYTfSI+#=vs&s`D33p*|sl2&a~j07PmrvB@< z23xWcf;hOcyqED(kKH%QLxp}Y`=Q%kKV?4$Gp_U&VBe&~9{?a5F<7Vgd}1=`88yT} zn>QDk!eu)LuCCC|^c>>6&s&!um`N}edV;a!BktZJJo)wQl|{kDRL}tlQHS=#!qc@T z)=;1o6-U^jaIw%Wt1AdVUi*$G(A~YKB>k$-1(UBd=oBg>-1IUWW(E!ofY@8}l<;wn zSG`n(uOwz&TQ4nkr_W0U0HnK-p78>D3B5at^ipl8idEwot}d)I{q6Lf}CBDQG_X}5g22Gv9uiLaP)DcTKr zLL3Nc>npR?{B~)mYl9c^om_87`pki!zMrA)nR+Der)RiBXwS=DrSP4jGZ6won>Ksg z?V?s`mXCo=QrFWhsqGQVcK*{pmibYNI!g&V z7xkN;pl1 z`ZTC_vZ~4s-2ZDcQktwg^sDj|EC(pn6w4Pzv+CQtTlt(b0+Dvip~I1wyBrnSV)ki+7keaDUONHO~ zw2o9pyO`p-zR|NvY(Sm!JGteL;5EmNU7S3}-5~g7ly0zuVN@w`354AIe9kEh3LVsh zQMprY&rR_#(AHPDjoRVsn5a*_3<;v>R)Sbkj0!Xvc)J;-2rHA`Ag4^ii(FJ#;`irkB`X z=6XNLR^!BAywa~N7!9fW${29>=D;JA3uKXnUZ`B%&qEQ&27_dm{O-{0)A2zvTAq|= zfVZ;|c2&^yJyux=J3(_>c&oi6-}Nq?0{;vPWhho)>_w?NM_)~#IYG;VxppUk)LWDv>p`PmvNt-=XOiyZk$4wEkp0jv7yo}`r~J?BYM@K; zrvx6zG1y+Uef4652i=ParqLX&aIV?Q(m?>b{(~3}EpeGc)0cV4f@8Lt?R z-u(Ow?*^8Z_?=h=28M%dAsh@0!6w_0e_Uh^5nCA`zc1{SI75CY;d(IUErfG0VA(?= zae7wZU}dmaiL=G&nX>K(;lQ$l)P-OQ*FN9E=)uMm$Ba6K5DkR&todfM*VuPdi7|*@ zCgg@=AVK-*|CS$fEOSb_u?1^y$2xr!7OnpdM0Fm-HmsdMq7rI)mYF7-_93TlvTy!q zc!FZk{Kd6OWr%`lYQT4}X~$qc-Rt13&0w(t9I7aT({^5L`G_iLV#0Iu?runlt1tsC z&5SKfq)n0CWc}xJV?7mV?!0$_bByG%_yRqMl7LG}M?D5iet$$^sOw}VJ^dCe5Y`%w zp0D98_aQIMd}!j9N2K+ktv}FEF4`c&2s_9vNTgdQq6-=Hv9bGo_CM=|u%G(O(t}f{ zuU}_J{DvU&eQ|FJd<(HHn2?+9_n!h)-!$^9{`cMZeCjP>C(`tzWvngkgoe!7CIOuB z!DWXWJh?5LR}%ukrht;S+i_xl^Fj_ zQ3V2Hf3N8JsQ8BrSSBzG1*JZ(p9b$5>qbq`SfIsmPypvPm1#;zt$WSQ5C`!=&-IMr zyRdL#@IM!IpH;NT^gIcYgJ>VG-Ns)ZGTn+OKwZ0v)cQlxqi%m1-GBJ^xv%Zx`Smf@ zkCy+3e!S#;73V;_+Uv}oDXz6xjjR>JD+pUy#a97yxYw4^V;xf*1LD2j&FHb2i5FIh zf+HS`3=HG!%l{D<9B8wBuMB)>=tAka&`8X)wXsDE*sH|DW_NL~!2W&uCIdE%`1F(~ z{L6@1vvI*(MOfc5W~a%*i@LUBuW`l-#v_3{DORyY9y{nEIcpi(gj>dThj6Iu*~rQ; z%sn&%B=e3oEwvTFBo)%bqaMnvr6=w%B-h*y5?*JqR^_pgAVao9dcP(tlKNsiYz)I3 zLl^!p`<41`D86$bn!~!`!6Cy249Xg&ylVDVU6RUZggA4$o0{IbluuW!d44!?%%wQN|Eh62s1{YvS2F|PXKIU0gUh*ic- z;^AwAkWp`=N0BqQT(QkKV&2D4YOF69SljQsi=RwIEVNV5r+ zsSah;x=PSPw$PiEx3?bl-D?_zWU|oN97K`j$!&2C2-c9b#VZ{VMhsm!kv65v#|)r) zpCQSRVFI%<(?oQA*O>xLoiD?FjaqG1@pyyE82c5cq1A%(tUN;}o^%m9%?1hF2%!S1 z3MiZ(E$`=yg)mKNQ#Te9a8eK-tC&GE=$*|a(4RJ8+;$}n07YN~UE_|rp|aD+8r27v zzp0V2RgCA_LgXUDhhKm1lcb3j+$ICiejA#XxvawoH%sM!e`1*Gz585JsLxoRrNmQU zXr|iZhCuI!&|77;Ar3Hl3sAG;IN@#*o64Zw764Ga2{`Uk~wwbM_9W6%1W!`-VY-_LDOo zR>q7HHDdYKSe`PGBDK>sCVZ$6MuSd_c?qzYo^$H}ZJ9sl(1y ziYBQEf$&^&#ul6^7Ai>!^l#GOmb+Ms#o6k04|Y7h-(BIARdc<#TndHeU0@Km~@ekqq zeB%t8N?8-aVK)HWcN?NpV`ocza31uU`siJ{{&Ims+~OAxZEe#dh2o{k9yrsMtaD9tS=#;$k_L(245S}YfkaK2w#aZC0~+xpiuyCE zo!2^Gol`^?EIynPdxn^j*KWt!SY>kw z(y7qCe%ro6otE#l*<3y0ZV7@OfM*%^Fu~U~5y5`9KTgcFr8;hE(v4ol$(08^_U-0t zE%q0*tbTc+@6s{7m@M=h`BC!IuUih%t-rxKVEPT~4qyVT+QtmxoD^Bi<>-P@hPBMF zmS#8Dd#rMIqTjj^8N3ET=BJf$!NJ_{x8ft z+gOr{ES^?ZJFi_$v8J?JxA)U<0`r%Vmoez3doAT8WsF9ZFi*RJf-h+T9h!E$lF#rx zQaPF|Hw7ButTp*6Ke&EI*3L#cK}W<1*5qM`ST#gX%AsF89i*g>dO4=53l(*tS1L-S zK1mInLrOnHeE&wmdj1W1KB7;^a-S>ohI*(1w4VYjsIyS?5@%OK2FHMX*4eva2DMxP zd#_<@8_$zh5;%^p;{C~u`pI4S7~*V2)QHIQ(ax=>uDYX|XJluTLn`;h3B1FUz(qsdT#`Ry4fW##8&#fi7ONLsBf zb(u|MRW&a#?4^uC7V_Xu`^l%Z}MU2O7U1Ul?xFtPRRXS}BU- z&sL_40<%+mfR>ZJc4$mDZQiw-ogtoSbNA~kqo(#Ru|Pz$Wzt^&Y#@4 z=Fyi(9ur-Uh2)dOQsx_BFI(gFX-m!#$WfEF-E3*O>62SO6SHQy%#gLH^z^g@q)`#G zXkB>M5{W8@uJBwqVH4S}8#igbs&~O_Fgjf2vp7G45jxa#j>RcW?15b0Mb&CpriVe7 z-CQ@=bwa#}M+4jlA(YIs?gD5~-&|2)G3n`#_;r!ruj+&%C}bLeA-3N5w|k52`CDAG zAVk$#B1^@-P_GBk(vZ4dBJWQQ_yAWmHfMYA!C7*$C)yq>|H|s$5BZ%9$%x8mN|K$2 zovE9*TbP6?7;@*$RT<-gK$N{0c^{|ophwoT;nw;{kyD2l&4^j%E=Jj!i4RV9#6Y`% z+B$lmmG<_|F4*z63{xLt*_9+N2zwmRCy> ztKR!#dNg?!;ut~)UIxzeX2qe%--}89iN{?@HM5^0MFQC-yM0qczfjkLHoU1Wdrxco zoi&P+sSIf|cr|6^b5`2y`B*ZopGN5ipX3RNtQpN}@{gy;G|oGX_)jX0A9bDteGKQl zSj_1Lm)@Z9yN(CIt7~$*cm6e|+SC6HOJN*mwhtZ23L4G|@%8f(S8hC1FR4kwRN)?A zVWJ^h?B?%ct0ox~=qE~nKV)<0wA&@h7d>h^l`0qXSuUgoZ~*i~_FC6il*99Jo2(i? ziip@xHhzB#CF2j2ay0kgTw-rTzQ!u9ZI6OTS!nqT_pOrrX!0<;xRY|1y!sITz){Md zt0;*bj5R`%%=jJ#5EYxD8CHG6&AOTPIxRiHd6n0v?(#RQr(O4o?mXHvidR;aYI3=# zKR@kG^KFW=D>}bX+#(zQUB&n&sDKeg`jwUFuUVze1&s(X1pQpHdDg|7@hqH~LMi+{XuA z3@z(QwP~=s4#_^%=kY{e1?}CC?FQC)iYbhLzhzc+@kx>jznUzP+?~_tPU&!GZj@f* zt#-yLGP6bavQTQgSVgv&4p6Sr_yfbc9!&6CXa)(uqxWW%D_G*-It$e+s||o?Z*hPA zI5(F)wzXc;&&EBOPrD`5?>R-I&H*w?919`l{1n8+Qc$0pZ8lO656`jmoI zRz^u-ez>I5hFWXkl^{}^9vvd}EA{6;0W2?KqDH)pnfchw%?J;iu4%I7<|@pc%;sad z58iGh>D^9f*tEN}i)K(Ha@6A$CGaYlytN#~P(v{CFgTw~n=@pLRXTNnkc=F*H2v*@|JB#hk=?e@@{NoUuSXj z!JoBoYNJKP1nhR@ez9HP!+I5R_PB*q?`#xxFv>e68Lv8@z#)8pR5(28bd&JWrkbNX zV|&;uP)xf1Sy8r?=RaRjIzA@^>)1K=M0PZEE+0i1Y#roQ9i*HFQ&fj_r*PMwg=$A5w$3{_fKhU}dd3`Xn38FE>98H~d? cf<*n+a diff --git a/docs/images/graphs/dep_graph_app_nia_catalog.png b/docs/images/graphs/dep_graph_app_nia_catalog.png deleted file mode 100644 index e2698f0b0c01e5e2ec29ac8ef9438936567b0748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38205 zcmdSBcR*8Lw=IfN1u2Svf)p!?0!o#Z04fSdlcq?q)1*o0geZs&5CjpaL5lREw9v%@ zC`d2TBOnkU)X)-=ytP66q34|YzH{F@?|t`ALbCVTd#yF+7-NpPp6F_yV`b)LrlFx> zRX=~`A`Q)!Y#JK6txOEy69VVnR2rIlH0ozm4BX8pW4Gn*szFjC_~`Ff#Z=wnIP>bX zP~>UV!jM~Hemg>|F4cwxatKXnvgdL{98|tXr~2VBiQ&K&2B!n|F~idaF`u;Wq=Cd5 zbiKLu@u5w3zO|gQFh6@M3-nOAS7q;f58*tl6(!}QTF+x@#H-nJrpGAT^zzKc4d{C^ zjK%o{Sb3#%HD4arE3)sqC~M!_WU1;x-&rSKnOV~!Q}uzuardx8@^Z?fo3D zW#JK{do6MO6H^N6{k<)3s}`_+?D9kBf(7{Nm%a$2cS#An;elS^RTTk6_Y+Ld=vlZ= zk;8;_p0Q>-_{>K)ET0YFrl0Sk=U4ydnjasrGgh7STD+5j8vOL+ZPi&8+2!S8=TU}v zy(8Qbzb|NBeD@HhQOXhfKBl6l$YH`u$EnI?0J((oGHkYEVC79BSv3Ukh;#oQLRI&S zP)!hD3f#HiMh%SQ|E8~_#FgJ#{#Nz(FfK9gs95dm&b*xW9h)En zi%ZH&VTZ5gVrNg3uPp}sVvqUT?XOQi61rezt(dhOEpbcZj-wKp(CT^Uy3~X2Lc5H9 z9}+&MIPBRY+}e_RWm1w-;I(AWe_dER#*vsM^LTP@B^XY*E+zJhZKbe{NB}tY1)d>j(YzYtq~9ok@pb zz%H%bT18Joqr8hr4E&Lx{O2xyD2(>r`R}lCbB3ye^r3C%gSWMCCSJS63~iI9i5zlw z4t-8n4rM$?o}6o6^Nc^kD9hyMscRqTEbkPr1&F2z3(8LmhMYa*deXH%?MR73bK>H| z3!N5j)h`3q)7upRS}(e#r(NsuPZN0d;=(=nU~(Gg3)T?`^&FTFW7mLqJ3J13-d^R$=scn=4@*M`9k3ECy3;kN7;HgZuxQ+4QJb7~Fh^(K z#q+C#6!^DD^l~G0Rfqq*w|6M{wNOq#)|Db|MO2%&-$c8y1*@tQbAg_qV5NPZJlW*T z$~>IvyuepE%SW`74;$`jI}Gin_WfkE{R=8FhkBRIqyqb{=~DM$=2+2P;O;UQrV`_` zO%%1)qgFM-tl3F9Iu|R6?K$aiQXZUTB;f@05o-C7npVy$R3?(}zPqEMlhF7|M&27W=iu*VemoK!NAiO(Bo9_t(=+VW za3v+c&d#j_JI7$DdZUv z1&5}n7quQbL@E7J!j|t}2D=$bE^^jAAGAmEa7yr$hu%G?Kk7Bm*-k6r7^i-0g?MYvBdT`A+*W7_~YS1CzIE z`YQT?$F%L-5j%(O+IAiN@eR$cVABi9`9V7q`f73`ajD~es`1d&MD`8RNZ^X{CDnRehE@J z17527nGTV7P`c#ta4=;oxD9-_eZCQno-Z47YpOr;ol=6{N5$Q`R}KB+#c zL-g#&I33vS{PQapQZP6PEeb9YYz|u`RZ_hcW@`j9T2pi;+WlW%r|WFW3O?=L8RUyi zKU>jzikXZS|G^?=Gp}N)Ge6oW?hXxzM|5Xez?f<%v^}lE_r~^pngv0jQU2=q4OGIu zJ)g5b9luFQ$`Ot=ocl@9OBMGVQMdHWXAV7W`4C0!L}j7W9IG@=GW%w*MTlPEKE6}v z$c3>uU$eWDEZN{56XBM6W3)-ljTg8iU}>M(#3a5<=s!kW4m1~}tQ5kR{oqY1A8L3? z;JZQ*Z)}YhckH@I__o`>!J>9Tec+YqwOxJe#K>;%fj6px*Ww*GSHj>coMeZG4NbT! zdfDdX=|x&Z`Y$W**^hAavnC2*=0YfqFU7i=R00^44fxKu788mp7DUTg?IuWHKdm z7v}xFD_dsE5wPPJ%u^Sv*C5A-RD#P@?vfW887FXww2Kl4khO}$9}C`e@iEGdd)!}l zq^SEH!MQUP50Lto?oK_rJl3PeEow3xn4?MabsJs8eI6TRiTBD~vIqY_!WOi8&FQf) zSjYuI-8YpIjz2!ollvYnX5@x4E6d%-O3bMGb3ELtt1X1tUZ%V6!E2fqoJ?Z0;s#9D zj{JHCF4f)t-LF1{!dX(2AdC{Cd!u#x9Uy_VH9W9m`S{;isMQ5 zS=CGUt-AI?nEf-p{v7);$}9J=Pv5g}Zyv>oWB>b4^#8_tI@(|Cd@jqP(%cLCeoKml zuY&7j6R8ql+!P&OucfJWQl-<7T1w8vjd|9X?Z~a z*&Uge6W{2dvtNptrNdT+IW4180lYT``>=D!IP=o$hB&2(Kso1;!0tTD;O-&^w2$}d z^6XV8Wf~7y4)t7e!*?fx6_<3o{?%*1a?%=N6-EQ!R<##9TasT*wSSA0JXb#V^%$|j z7(oI2WeoZHBta6-=&>?)%VoUnXgNQ*0`LZTuv2iY>2KbsP0N<65lm)BZzp%&?^Y*y z;TB?K?4o>Pt*$7@h+z_(*Y=5^`o=O%-p!hA8Rwzqf@?YCenG~%<&5a%cb~eZhQEZR zI}B9F-S~3*TNI8KfjG`ThQA*<0(hNXgACvS7)iMQr+ZsyV^*SN?9xXAo)uJ`B}sbB z-L#AbG=t$s0oXNt9f0q(=UFyhy+Eaq4FM_ht0Bnuf>655zsugcveXry-gpsbDIhP^ z|19w{PnJo+*DhD^)v8Mtj{FL)7XaWhDr%huB+{;7wdMC@p5!$(V$P@z;$sZvld_73 zEo1$zMrRo3q}%tE;3^)n@{M2Jt>l>xG1R6)=h23%WvpTf5lZLJp+*5T;Sa2I#Yc?; zZrF5gzN)WK2RYalM4Lir@_@1K92p;?mW*$=6d3nAhI~l-8C3(tWil1y) z#N;`Xs25Xv@HQ;j!7$?a0^3gQB12WH=f9WE95zbHs}R;Ilz3m#sww_zG{gq+`GGx! zt;tz3cHLu(&kvkqz&Cr0U3e(Qb&)iYQz?*tZaU{II}wn{&WPF6STVkC$p`@@Pr4y6 z9CjswuA|3%kZgZ#Mof@Z^mW3m&A>m=AYf^t<45fxDke%350lbo&PQ zjP#rZFJ6U9i8iS-EI3@`S41&<+Dt25>2^jtR$h86>`IlN=!c0Iwe-J3}zf@k`ixhv~F-Zd2F$YB4ex%wk~9 z&VLq>QhIV5C=KiE}G}3#XF6%qN};mhU+m#K6;crEE0Li_nOu_MohKSeBjHNI(|@1ybSE zmB!KI{3%`%u0Q$tU*S#`unQ<&D$;x3Tjn8Y2{ZBW8LoXEQP})!74C z`2h{5Nw;fwBr#TeUg+Sxvi33k56#g)nW4uo>@am@Bcd7Qdy-_BB~9w9ik@$zV`!RO z5ON*{Ce{4qvS)h;Q++*qEb(n=`VEZk0OQ1dY3gD{cY02jFO9^sb17h~wp&o_lRF<$ zuAr;Vwj9zR!M7lcY8vk(Z~K)z!><#Rm7GT|l)pRSdG$@*eLzK z*Q-pk4rqsNtne=_U0lfJm$1>B)3%@00~p6Haw7$vitU-B)5#cEy#v=rsT0L`$|q*Ye|Ebtf`$_!E?t#Y~(gc5Gk15Ccho#wnWn|UV3 zhfHOG_3sj~YZ~USf3`EOfuRt_^;Eh20`#D7c2U{=dFuMjuE^X+RN7+aq~9HT;-y zI>XtxS)Ry7Q7P%S>Rwh2iJ6s*Vb$efI7$e? zJ2l5+e#GWW=%IAIL^Zh{MauF}!+e&}rfDhQE&r7;9kKS`b6-PwwV^78ZN_z#LM9o8 z9oF)N$W^Vd}HN}dF!YIa_!Bd5m1&C4#KS3(GR ztXqNdkf@UHHf@evydl_{TnpYc1C$M4x_h^f_W|j_(jJi((rtkvFT^81JlNJSVGy+S zp9N$iO>8>Nj`NfDZ)?vmb|xMvtA(g!%`O{+n%dCO;bqe{HKf$TYBj&dBk^9Ei?fUP zo_3(t_|`~EOFyX*?h~{LVCal?sECy8XIQuqtTa+@_~-R)#A}pRXFh5RE@7+us#H)_ zzVzBC!X&=w_30;obU?4et{E%uI(ezVon*3okHn|Q4Bm}>1hz_>O+Hvr#H(aTrAGFG zl*7P?G%2njS$>NO=VXS6%f>aF2G2CO(-~)P+5;v*u({d;#H(5?yR2NU(6ym{~I?S4oG!!<){sjBg;*Ti>I5LZYZSU^A^~E5<=0F0? zi8$E%o;O;2mNDT(tL;Hryl2#*SGuz*ymIq1WVPJNha{ZQdEJ|67!u(=Gb^kU*T(2p z+8dLEP75MVVj!Ivn(!T_D=eF0N4uCmJ^d$0kAx6U3R-jN(^#Gnq;Wchfn1w3(VBZ4~3Tn7v-KMA5GG$A&2GYS5=-SiSFYoWM6#=Tkf z(zmU}>p?S$z3kq;%)|G+*TXG6%{>jq_4r9clZyD4K5RcY({99JR1z<-9_$Om-1nWn z6tuPLSK8oPt7_f9uzoQx*5eO2st$3jhwvdRJ3sCM#2ccA3@P+Wk{D2Ji0ny>+=rZ|TuTl19Ek_DF z_vXFfk2~XN_;T~on_v3HZ(Nxl%>W8HPWP=VzFS%bGgz(j>O|EZ6kwq- zPOzi#%&~$a;+w}?(wBSfw6?O8b<3x1K~}m4`2koAZD60@ykD;MEsnQqK2q^xU~LOM zq}c}IBH?Gbb?X}szx_D((CUz8FVn)HGUrk4^p$Hqn+KHH2NmJ2o!BVC$*DX?C>CXZ z-eW!bs9^I3&UFP?c{kl>UwW1p%9k+VQM$7&v%Mw0$MCDUuA7%l$JCFHkNo0a0nXJ5 zcN+W@6MtSl?uxNva;#v7*yac8F2DQpsSU_qY`KmlV zJy2QMYAiVav3v9Ozf=UClDXk7nD!L7@b6-r67MecnsZ1(^EnrI)=txM&jJwF9-9={ z7^ai&{}GCE?T_wWzUyq8cl#SOHrV)6u46HF=S?Im{=U^KG>{>T_~j8yTYX<91Pdsc zXhlkV<^wmnV%l3qPQMnq+Pkr5S*{hZ+}s=h zqv-Fh2S8~-_bsO{X>DCu4^O~L5YD!aJZWfjasS$f>e!4dp-hCzt$XVs)@)rVd-prU zuBl~_>lXuKg=+blBAbBns}0Q7erml)>9PLZe+vxzzsh@U8cx&w!m1s|+z z#BKqZo+H{O^afYh^gO(S|KDNi z)_J!FP29OD2Oshz608mN_1EMyNLGX7wd%k_9v2tzJ)L_xGcQXP0O@1YZ4%TKL1D6gkB+4QuoGyN!&~S!Aqe%BNM(Xh zSCTrXuv7vFc-}3v&MhlpQ3w;KU;(DzL(8rhVuL!kc{)NTfdT|OC1cg34D`D*0HAAHR7A7| zZ(6~{h4nqtM0yL@nvpoku?Xsuse-e35MZY!Ksn|_Tm!}=-|BTwPl0X98|~P1Ad9`| zM5cQ$o=e!24Mjdff)3;Ih7Y4*+tZ|>Vi*2bEU_rCLQ1{~FU)#my5MyX7wlRhjS+mz z1t8#!1iqH6g&~QlV1>w4`cbpH|Gp~Z*)?9R}wq=M+nblDx zs?tr^UpE+zSMl?u9mhBg5k?=nPJVw4gih}Kb0Fg`rvfE16%?&}fe6~cNH)wcO72EW zjpV`el|NC;<-HQ}4w;y$u!!@@+GqA8MjYS~Gu<7S;=emzPt8Y?B@U;zuElv54dm5I2oC! zp@1}PX)*WLT9Lwq8b4y=_oY1~dN96G1SGbz@DZ>V%EDi|1Pj8=gNu4Do^QVXkoXFo zwlc*|&nkLr^u9)fq)yDKAN7#R??NRnjRqdFc6#XG;nPBXet7fFeKEDKSr(>iwaixC zn>3Wz@>9lSzjjZ{Xq-E$8*H>jO2}vDkW_^_8Rv8Q+H8)@X}x%djrV^vcGIdHXRJ&CQKQZg?QGX`22mI6A#)C zhOqy4v*AB^Gm5UFoB4wVj{(DauIr!|zsZ!LC&agY2U|ZLaZsNM*|td|+K<`bDSOMV zZo>Y5ahiX7RVWLwG}V{UkzTM>S6FBAg9{0%Yk3@(#7sQ(^5gBOH zUsl{|%+?RW^0c5FaOk86_M2@2u>~zz)7bIvZxiDjKxInXV&8tuSIx~C6S2ee#FI^t z(L_BChBRq!YfHtoresLlcBBFhka6-x^(Tf1ht)qEdyqBG?k3;~3*I1?vvk)2QGrVe zwO+!i0oC%`xR&JcFddlFh?WGZ4Wzy_AV05(TA*-|&dMi~3Q(#1P=ftHh1oYW+=BXy z>zGk0kXz($h^TKKhgYyo`h6MDnPG>0~N^F*>6$Ot@ppy7(d%?2ShKM$?tD% zfZFc4y+CQ^J*`~MC{TS2fo}t0@$n&RJJ4j>$C?ujfjZ(>7^~nmaz}r2RIoYp9Yj_v zjgF=8E(U~$1F$Ui(|Y_$tC%}{>UG^Lk!Z%w$*#PGOQB+oU5kJkaY@0|BiQXob3g0+ z76C&V_qvC`g%lRy5qp}SrQ9MG#)@$kTDPhd>Cc?CKx^#SgoTp5ethu93Mu?%NsMz) z;uCE+FAtt`to~te%KHSEeBEnDb$PhDrKzY%eiI%Tob>fmv<*Q$ZmvHfph0D6eysm; z8<6NGU?oXkiZbXntvJIHMs|ViY{M+v#~q14Q;BgF(pjTThhpKprih21YxHZsQ^4g8 z#SLh@Zq2uDy?Q0I;X9FlODweOc`4ZetLaXX6sMFPQ`xix!q>Q%-%+#MLu;8;E<~8W zG3yxMkAke(5$2v>_E1;n8yU%nFXFgWJ?pB^oAauN)$xTcC-Cw+AjPk#3Kz!xXlCWF z>qANQmXv(cuO#~%O0uJ14Jbw!P3ghSB!-aw_26EOD9XIt(pM{QU^?=fC7i;o9u)OR zd4B~eB)ZGr$g7NgS<LeSm*t9H1*XyYPb>@fE}&Bi}_Bhn#)yDYD!f zP>xJptBEv26R!tJVSPFo%SJioS?q(rc_-qIS{~dk&(~dG8zDgb#HmAv*MY6vRGAM0 zgm-(l^*)9y-lRsvw-`A|t6&(T$;^&EL3zGJl5KwO$86UaV3V8gHt_v(jo*(JXDn(N zeYSjG5#)Hp?GHu!tiO0e`zT<*@2R~rSkt~E!qzH`qF=E$vhwT6V5wEPcc%cQLSZNq z5jhKVeNFV@cen5-|Z=ojGj@pNk#P7*Iq(iMU>?WiascBR08t{gCF19s(fn0%JA4E}8u;kqzYIz0~mqUt zN!iDt>)oLoy9P8o$C$sxvLb=yl!)P`1qK-`{*NF~f7L;%tALB+annZ4q+rdn!Bb1O ziN#8@4F6)Wu$iq7bED|y);T5@4UGu@dRE;+6W{W$eHixM_=?IUobOkf^*fYc{ekn9 z`KI57P&l|rCmH8(5aKY)Dn|T1*9bjef|!7xTKO7KG066`&#VQ?3laH1h5aZ0Rq?-xJR(V^e$zSIu6N123a**Fa(9yiPTR37&L}s`YXL8s zL_T|A@ZzBocw3F%5nfX$3s93e-u0ZVu_*U61b{@V2=oQ$vhvFt1OZ(P;`3HLz#{|M zLN+sPNS728f@(}Jk6%szwWnn9faY7GUNb?zY4D468tgloQunA3xia@tMIm-uvyyxX z;(QOV#X)M{q9q8Oo?@XsZ)AWUws{3qldcgP6sE`SB^MWg^yj=SM9jAPEuopVNBaht z2|$@2C(dhfZcgFnm&_+soIgF@p-lxgnY+F~7_~PG*vA}+-ufC;4NJzmn^Tp> zEL3FL;tCa+s9<`W*YBsIH@1ohf$&PMsJi88B$3c;c?yv7Zt@d`HsI4K!$TGcS3#Sw zhO%YX(9N&%r~u6S)TvV~8gl(WRz1^a2}!&5W-8Bb`L`WG_$n(xml3anEe`ltSUKoO^j_m zgaH-zHIdiUWY2jrVq4%6mpoil{ddwn{qBc~X5Gs4{)uiulj{zR!va3b*HX~kslnXl zO_zG&4q_PC1u|>&?#=#OfMnEj&-OYM{>c(s#9(VZ72#k{pokyNONJ-8Wgh3?w!U0fXAa1eM(*9r9sM5q(Y$5!*>{Q!4E@MsmPF-sGz(73S z{NkuS;f4Sxr(Lm*Tmh1?->u<;{<}o8&r4Fli*6$?4NUJPSUag9n(1T*$glH+O4zyi z&%yPhrzw|1vHOo+!es_A%9x2M0UcS=JZe+;6VWSqbY?(V<@NK%DhUXWE17W%!tmlSrf~0eKitRQK8g-1lpLozjxPR$*IAoFsBW1eRdseL zdyXwT*&em|qGF~Z$D@8L_PSBn{VRjpOAelzb_rkkda3Z#kXxUf{y6mT6TUnW5897} zXyJTW>V5=Vx0_i9MBo{pFVfa(&2AYcN^HO)4L(yNa<~qU;cdZ+xuaPdhLQx z7j9L!Y2A{+f9an{aCl7ppc~$WYT#d=)s5OkFnBd?{YH_a7J8A_5)IyvXhm9+(!9_C zy&f(9$zopJm`!+T0Cfvs7#m0C`_&YJaD(BBk!+G zF`;?D;Ef&QQeeQ#s-^J^35)0?iGa@3dViut<`3v4Y?x}mvdR>8$f%F*F&Md$lUm;- zZYj<=C}3Rmd!gGono%z=&YJ}IINg>e?g_`Otn|V~o?taHf7x`PC%jiB(z+_Jba5YY zcd;9F^6ql-gu%#%;ND-aeAC?$uHE9X%=FQ@B}Oh(D2!X1_zl_T>j6wc%iZNge#19Z zq3}J@0(Cz)H|>sv4w>-CS)0YiD1z6eTP6jrrvpDJWuN&yQZvUD#rX-5Jp84_{*Ga5 zk@?R#H!DAe1Z)1e|IMphA_&lW1Gnuc0^!vV=qJWNK0pwKj=SAg1pA0w5#rKnUKC7m zKNxHM+}LOGpN(uX@Qhbl!=l3ul64rb6|)S3fbwoB_oc&K(ve)p;0z(C3gYlr6{OA% z_0+CdY2f-a`zDUrQN)z}^<8hA!`mgs+C)OtLXd-{@oqJ<+!ogCvl)hOG?ymPD(Wj_ z|6jA)CiVYJ`BAJ~02CFn@YsOjip^ASu?-MF#zBir14eb}QDLIoXnkbj?Z!BM1-J(& zHeVI<^ae(EsLmm6*DY0W{WCM!bXjH?vcs&d%r7{JtY%)_J^Fq z`DKV5#f*`*morAiXTj ziEtvYy^I8k-b5AJ_wnw%nRtZpZF^dB$4zdJ1ccJ<(vWz95pa;S`!#yVwxU9sb8JlKz+0ll8L^g{Uqv#5>@4b9Dv@-M6|x)ZSphs#^^d<#LA5GQd<4cfe(dSH}(Mc^&InZ0;xS-g|^`4 zmz@CkiX!D6iP?57Nk9eXFsX-u{jIrn!vG*N$DzdpyBB}fMKIzKhtDjHjkR#uS&UJ( z1ErR(98T-Qo*TMg<_LG~!%BfI7obbi}jz@|OC0O4Iy!PTm*DX6*OFC~r8 zZ1$G08TdEoFhX_jhtx%hF3BWN2pW^z3k#OUQ_j$ec)sDZD`Jrv%qQtaBi?ZK-3D-# zC_ST&Ty>in;9Bx#=|f*Hr&!a^9WirkU)(ahe=Svl-K;eZxeRDovtFzzTWuSU9Iqh> z7d`Sy)*%kY0>Hff3HG357%VQ+7G-r!#g24(-!)P&zXDXI2@u!Dc6(igq%F&1unBqF zy3Ud~@ylbBT|>~L0Th$*U<18`dH(zwj=lK({e4FgUS&X))w;zBv6 zk0E?a?rPmH0-lbTS;WJe>~Z-oqN!r)?rmI977kHxWA^(IszRADtB!W}AD z)isk?V$s})rUV*ThejPHkwrLkiajeTF9YX&Q84I9L-aw66_**PbH{pQA-eF8Ugqlm zsu7~3pMA)!Oi*B-TRlw>nK_1jY2Tk#g6bzNh)GnD$v5J z=HvM$2wkyj7G%Z8q0fq1Bt~b4Y8dNk)tQf$6r*obXc^g3Nz;`B9&jtCdk!A%EdYVD zm9TUELf~2ef#cq5TiPk+;_l*}a0mLfIoWh<3YcP75NNDxU<%LVl z>z`k%fqn7f1NGm1INQ{*d3DGjM*%o@0fcr>E&(!|g-}Pt3T!=;!qb!ml3B8+&776I z)o&S9Mv&uAk_Xx|9Dc#TUE_m61BOB0WRD=m@1moYI!5AiMq>HXmrnmEkBqP}lIuy? zgxND>f=#~&^x}5Xf$n4ol_|fjz|0f~y^2Fu*5gnvt*-6wGavIU1dYa0@_*;|b;wQs zegkqJX&W8spsSMhYFA4^uY!i(af*0wG?tM3`%WGVowj^_eyDEowgnt?mj-kGDH5jz zsic*9QEOTFN;S&sVJq5b!$l09@L4RmaP`7&li`PE>+d=K>cBvXybE4nlG^nAh98VM z%gdxUqX!53{$XLdv7_tJ*G>K6 zI}xpoGFfL?Vj=3*z5#n@4Hjvr%e9kAIaUJ(^NfpQ8DV17@9Wrpmrb#`$iZKZO@PSF zW3nVhbTTccCekE0eVmk0i?_mYf|T;~`cAZQq`uoatXAe-XE=8Uiww~BgNKhd0NiVD z*^@uA-U=v$ZlRB0O(`Mt(XJt2>*GZ~X8^}i2X`3Lw3>HXT3V+>$|fJ#g)FJO5|`82 zg=lG%4}riZ@)}^ywg^JFPEMJ&#R}o}mx{S>JY-|;k@GYn39{} zd3Gj4z{Ul6Lw77uxZs$v9!bn2@wEE!C4&*?rCac6!f$47J-mf$w2xWLJayGsl*1^j zOyHj4V1MNxqp_Vpai|iewG-CdSO$mmfu!d~JMLPfUrw&vSFxg0nPgIAm-9x<3=hR@ zWh<32Ubh+ApE|u>#=w&fv3MSG8fSk5H1AJ;=H+qYMqP9QyxJ3r;Eu%BuPWdNvQt>b zuV~Ctc7D}DclAtYcO6UL`eYxs@IqP47(cJM5I0Cj3HQVLHaYZGvA=*jO`Fa7W!$i= z6orR*iCcXXTW9pT$1C$(9A@w{AFF-(a5~2rtLU$lIWa2h_J1mO_{=WWc%8mRoXt3r z5B^KI_&n!NKd>!sKwtcV8#Ee6mE8`#TR2|GI!#}h^|PIcSY;!>`>IHe`I<@2F4aAU~&H@~n3n=i`;_aU}>@nuiE2Bz#C&6b~k-CGtfL25{^?*gQJ zArq2Aeu7hF0%fOYn7&41mhe+_JjmGA_caF9$BmdKC6#aW_v6;Jg7Xu$SC-P>HkKz* zQ*TbV;@d4@Jw{YLb)sLWW`7?pFh^VtoNhA|q(I|4cX$eU%*WBLJDPm&q(#UM7s|vh z@x?j`ZqZWg#lEz%yT^6)mh@7PTP%M3^dBRA%4gb%dLw~X@MoNVB&Zi@Z1YY~#^>&Z znNhrC5MM_9m!7G`_58@r=5gHJo*=phk17tJ6ras-OoP+&4P?WHH$PJr=D&;{Jtrnd z^NHKN&mc$3mBwdJ>P*x$UWiOPd?A{TZa#p;!nyG8`D4x2^7?Rfj@%V$3pd;|kKajj zxI6nRDl|7*ch%i*#wOG#krq3HaXQg6_`l}U354Tq{S2LM!KGw0C7T&3|@2mE!GuQAQv|Szvyyy-LH_}KVLKHgYV_~-&4c$+zUXoEScKvz6uHIZisVMyc zVZfy^;QMzZZo0uL*3+r*tCa0arF*@d`nL{)b<i`8MkZ*D2G&cWyp><+BH)u=7=Rim`rdU(2=jQAH(+2MNA}| z4IpggodaiTxDYe?0E``9vRrdkB=6aHJ*(J+$|A$Z6K)u1D23k37wgZ}Qj(+a5l44e zpfeluA-G9o0~7BxJJGOA4E4j#c>#-}sKX;BFgxj)dx{yR2iFQZ_fs~~N8M6A$>@x3bO2~zF@Psk+p`mV+vQ-q_vX@F(&8mo z!y{w?g_msIZEB6y!1~cJ@3ZQ(w9x2A#kssivwDN0XktC$eB{e^l>^@UX+CUMzW3gU zt%@aD71N!dHsazHz%6P3RrH-e6~tKd%I)cuP{j1}tuNq}*LmG&E@&XX(as&1T2OP` z7OtO;O`zrl3)DwRSr6{5PpooT7&inBJhFY-jJSW8`V~eyaGJ~ZYVc4Bn546em7sKy z4*GM)<$SQy)IYD|FFj5mNXpg_Lx<7~^VqosDHj%Oq4TO$vcjVGRX1BFC`I>`2(0uB`oX=Um z02s3h>8fCkY4Jq|&}=pTWJ>=nh~gu(?3t>gTfRK;Di07e9TBvNC01NMuqMuj>p#UN zkajPU`A%Mc&{K@noN1qHcch%Fo*Cd~P(EtO5q6 zy55844s;Q^a?P@@c1Sd!*IYQ-_~qaY**YeI(F1lEzW zSB`@oxV?KH10fDi03JxarL%s}1}+I|xIH%cUYH-VVw$gfwZF{6W_jjEx_-)xI9pS1 zTTM-v3q4P4*7wgGh=GSoaL@u)A})r}jyd&QvZ7Gv{5xtsb7OyELh)G30rCYB5ioji z_FC+KNe{&&tjr>u!&EWGhI1Dh(^=4Ssbp<$zHbP~q`i&z(zg(^Ei$do$^AeHZOWO!rgAF#EUaS`Hso#Vk@`p#1yReQA>36BmMyiwmqveM>|HV_?zwss z-t9G;^PDOkCAcnD?1(&!37x8x_Vj4t?VARp{N=h0hg`S&KGhuds7zwuVLx~&PVFe@ z8AnUM)qIX)ar5|9qYx%C%qNJx@diE9#29w6Eb!ONjQ1&!_=7>iyfJ|`J)hPKbA3*Rin(S6y3Y-j`vvPcn5K8t3 zCHS$s2iR#tE1vuS6}!egnk|F0B}qK|(NdW6@_z2%>@LEi+ehgHJjeEt%9}@n$Jd>w9@Z3`G@}*bx z7+O#R)OGS5Ktnf|ja*ID^Ec9|nyo{rdw z|0zl2O$Mf~PhHu&Tasmn<<0*45RvUm{-q}(L00X?s(hyZEIhSPp-|;AuDuw1x|{34 zO}~dCk~427Z>ho{Aq!L_*2mg0#UftDaeN|JW8i^a52O1;&zREwP?$k|Wh^cC?cOc9 zV(yo?71#3;r#?KLc$;AQN=*m-ed-vf?yq8~#m zbi`q>zi5zwM~sVG>u-v1&>}`9f^M`tTf$;b9k=Cb_C}uln{OR|B>r?SI6!l@nx96+ zgLA0@kkIp_EyHh?Y3?GwY-U?MecQw`C|^?oMDo}zR$dr^TdGz%F~T7{=;kJinR>Tg zruo34+KKTKJc1hRF9qbZQv7CLekVSWeh-2{ZLl%wU<)H4UZz8A-pUM4(-yOSb^Wa- z6<_d)@86LXbT(?CPG<(J9_-FE@?f2z6%0}7B|XCKwAs)t0P8K~F&$Vg{90BZ+DZRo zK$Y3ow%H~e*J5_-VbH}$796+ZGDs)wB~XhLuzqnanfI4t(>0m1!w6b@&np86bE<9? zbWq9xeVx}I=C;s>tMqz3#qL}$(XwYdXd6Z@C=3>$Clcx&p-Xjc2?#zX=9xoJxL)vO zjBs#LTi;=SIKvHguQ|hklGY8oXL@t3ifs0)aSA8~;ktliCz)(?i-L-u*y{OPZ05B- zU#9*cog3|=;Vt06ESD7cwU!g_+G79Un<3zBtUJkph=y>;&^xf?d_`}xa?0MAeeJn6 zTCPAvIh%UnR<|27?f8##1|#9T;gO}Lx8n9DO0e?Y?BSDb@L7K4utu`}DaHR6iqcxm zaIJmrw{*0)1ejjrVXZu}xVYn*mbt08dKgpTCb~U)TELA2C#$aA1x2>=`1MyYFcfftevo_!Wxig_~vrn9p%3N8@9D+h&&Ky(m+{-Hm<+* z-+CFMs(m%?LlWHO!>C5;U!I3G;pex%;$J+iAy=`t)Gf!P(xG?#4SLd<9K!%+28s@Zue#b(j@`lf8E`D9F*qo9TldkBgx6<~Qq>eTdCq``>6VoVo0jtJt4n!6+bI!7mXSsj{) z$hP;DU1!%KT%_oPe%J9`DvlVmRVOFv3Y9Fgtdx2dNGL^rCPFVmG zT>8onI-`dID95BOSi~&dz@5l)>W)I6WMcAc{wu%50;i$slGujHNq2B&&v{ktD5<00 zUy7aXcIEwuR`}y+gI5J1Sb1>dPHst~@Y<|eX@g^gH7suv2EbuU)02IrMUoxez~vXi zeg+Os*=pD=7WAW${|^s#y~%liB)O$-)`nbNQCM3aV3AuY0<>AXM-%-mO5)a2pL+Pc z3&(as)-nMzdqwEDic56Ho|~$UTphunO_|V@vowIRpw^QTTa>b(erArLADpA0p|c%W zX9>VUwm(yF^RNC-IWXq8h3j{tuo2Tf)s05s4YL;K@8+pBXBKq!8~}tX?^$+#u-RGr z-#x9t@Sk%Xw6@lJ<*uJ>~A>_@$^K&4nz?%~zTWv${$q(|L^qUGA5`9J={&)4G=JtU&Q z(F^+a6GW3vPwJH`xs2=2d3o&q)6X#{uBoNgZI0M! z;2ck{=qTu?c5rVzJGW>2^^;JmCI~GJ#a7J;2ITNUa2AW$1JETLn_l;>gJ@y9`3a9h z?KiO{t2URUFrQ4uQCXYclx;Hz$7ev$cfWo&JhZ zJ0DD0rN{jS)RBUK#l01ge8v*DKpA$T_r2Yc9!E=VDF9^oT=udAhm{o?NX<=Gf$+gM z3XXi70#??f&|(rWSi{gclIe@RrL*n!we540U1)@PUM6dET6csjS@oEn9L+XOiw881 z>L)24Ezc^w7C(h=&R8)!1$;9c>My`~_dI@}vIAVUV!qz3@K1nSG*vYUe+M<99WxUh zN23sl=--aIuIo)4%1dN8NTR&EiFu*@-w^Skbf!c=<|)>nE!-r}POrB!RYj4NP-^S( z@l6qG0pFba%k6Z9*5kH6-2E)Y7dZY&*bf@MbbwfH1*H1+l3jZI;|IM#aN-2L{{{h& zpClEp>qKhhVw+9krh!~prSHMH#Z^T$N54oAAJ)c3=|pQ?Ks11oRCZ!9bku2q170Du z#Je>kCCLnO-~FTNgno~(x52Jdj>!D4wBSms0+|(CDH{{Xp28?&>?g4bp*92I$OBHQz#ZoDHJ1_<)!xCAOloIV$M>X^_n;B z_{YoU`EI+@tVlkKhx+L(*A^*h?iBpTr&{UWQjyA+`*Om!dy(xdepvwGJU1b@L1i{_ z*qQZrQ{_yb?3f=bl>1Gm@!P%x#FQ# z9M?|B!K>~!OJ_wd?6V20!~=zflvPbP9$T?tn$92e+M{yq%LTJXYMUq8@+9)3qn*9Y z!37ZpZ?I@ZUEHCOm$Pzw2c#zobpk5@UQDN5lNS6ASZd-69ndEe9$2 zWTEJ+CRYE<^DL%lnwj6J|Nf=;lr~d(Hwg2>MwGFa7TGI3KgGQWpxIRq`9qQvM^3&D zxy$e_!)a@9@imj$H9Lc>rn>_&l^FcEfutrL;Hw)GaVgA1B{y-MC!JTRj>rI(LSR^0 zXmGBdk>OD##BOqrn=SMABn~^-^V7$M`M2FcfK>D5IY=kO$VOBve?gfS$~5^vF-4eN z5h%9ULIK2?*pt(axLtKbZGkQ|rALsRC>pNf5Oxp!)*~s-Z*#DK)%)PUC2U33f_aH6 z4$<5y;w39F<{D#@eQ_6{wDe2~tu`gZ*=m}Rf&2S2JR>GbL@TVBKRoslB|T7jmA0#W zcBJv`qk-Y8z?so?G?8}n^=W$pg`)UA}HjV7F|cEMvk%bTN6enPMksN8%WC^G=CY*cxluH~=xSD~BtmyhZCnruKvCgJ~*? zUW!fFfnARl4c^%2RJ3d+JFj2ixn2wiLKw#-VRk2cF{BELBc&e3zKd0mm^o6uuwsoG zIe6h-1n@|5qRi4I4X@zaX}1KN?m#`>A5DE_SzhFJNBlt@Q!Ta%HxxxZ6Tm zcTU-w1ulE^+9VFyi%+-|MV8$CjO+06;7`^57R#|f_Bz$;TLiS8^DH}CHnth=f9(^d zJ~Mmsn8h=mzpi&vsQONbiaIa6w#398T+g86^Fm!w=8; zsTk=KffOYn)jdWQPkz27L|ZR#h|UPt4Pd#ZjoKOeOUtfUIe*54cW3adco{oYAIOZ^ zLT8Ew$WnGNfc&NbNN*@)Jp~*;7au4EPVwl0POvt&3IXm7MzV)?ZWEuCiu_){IZ2NF z*2bM%DX&3Eu%r-Rge!C8Z;vL6=}@h_(Gk&FHWBx5B|zdXeaNiH$zr<6P!9v>>(eqn z=Hk2&L1QGXi}V>OU7G&vR);~bdiqh2V-{#1Tx;Sg@X?vEd*&C1XCvmmc*6_wl8DMo zhuhPAy?RgEIsdaojdGUdp9%z_h^-9mF>2&#Me&R0xAJX> zp5L?cuoL#$eJJ6(eO6~b&LEAB`fZF_-5U&=i&3hGATOt5p1(b49QVxk&v-+(1j9Q0 zx)uAq$-9Mv_z6xsE@5Ycsv&zK&<@IX%B3Tz@mMbqOinJFD6L(q3x7D#X6{_Ey`7(v z1bN`P4q-U5mJ#Yy=WZ%O<)J$cj)rb?!hqU)TB)akrA>Oot|jlABDYiHqI@ybarZH! z>t{mCur3uWCS4yum{)Fx&fDHy8IC0At}}u0wWvQe5AmU4l872Kj7h@A+@-t5DnqG! zyfhrHUEAES#V%E`Q3J;4O(>K|@!(ESuWUw^G9kpDB|=tS`!9mIM+ z=(o`kl_Xi@w^=*hnh;Ut@yDja8ab58|6x}g^5iZME2-OvLqqL zi7NTa)F|%6y3)kWh}#d=1b8O64yGhZIQwYfcFFDBI5o*%`6X}|-0amNF;l+^nP;C0 z>`jWv7pnZ5W+PTXE1ijVuH<9;^n|hPi1KiAq5et}G2Y-vV8C1iq z<2?By3o4$@04 zbWM4}p5fHB{+A&uv~{V8@anQ8iPU_&X0}nJwt3*524z4;6CHX4^ovbUt-&CBKBDdf z02|Ix{LI50g(#>z{N(pm#%y)~MNrDuOV|Qpc&gB&DBjSC?s_@W_kJon(aKnoOH1@f ziq0z?KDXhwO=Z6EhR`n^d%j{K3L-@?&G?;?DY$FO|zYJ z5Uo;Mj%-)6H68ueKJgvTDOAt$Oj2704GOk;@7brAd_iCtCV+dFuei6$^mUAef9?L| zTMQ;~$n3@M|Ka2Q7OVXK=hzihfV*%IPUC5xTV_7Vuh@r1`8}{ElR;+d2uPSe$aovG zWyPXS-UJ>`z(3Q9j8FG=*tycmJ^|qqlxMxLs<(T_gq>+VQWkp;;K(6tzO8M3225Z=cz4j%PTGYLFOgIk>{(fdBg$!S6jzfJ*B0nw*9l!>0YW`P1_I<;mV zeSgi-qaLHYAh;$91Sr3@zBdR$@ebr2lOf(O%(4J4{{*0qQtFf^Sg4g-y&yq$7jK$g z;(e#m5pff_)`*GHF_JA5km&!@v0Ig2JD@Y);qu3(2G9h30;z(s?yy{Qr;-#i#$`K~ zyGTxfwNQC&DMqN>X)OPlL}o4+`S^3$3I4>u3OXwQH&F1>twB!y3bBLVIL1LP=%#Dz z=_LnFyf8H&e`ttG{@xp$yD3nF% z!6=X+Rmj(qdqI@KcsX(QX$pCXMs35M9s4VWhkX%p@ldeHEdcY|t7p%eJ#^;}++wv#bo^fly%sx@s9 zGGSqX{H<8G5b4Cj&X%?;=#r+IPYm3VyI;SuaRy{*Zn`pdV;1)PRsw0OA?O$QN)f^} zK?-tuKUmy9-cUr8s^<{)tyc{tJ4tN)bykxf&VLWMVnCic6J_iN=iSo!L{>UJ}KQh8$p)V5q0<%^4>j_4;)U@<&=Bo@e|B#I;kJy zUH9O?K3}p{RGy$2Hrzqt_&%;}(?m}w-;dp}=4*#%SBTnNNnHvzGxx}e)X(npy^PDW z?yUp&rl9Xqs8i+q@BFX!oxJBl&OHD*s8+R-pxiAh1FMi!9ac?*N9@JO$=^o2C!rjt zBjeconRA`1gP%@WNViQK1{#-Ry_Fd+Kp|B2|24%7$my$D}hwrmj2Z}Mi_rxK3f_Ji@B zY&YA*C;k49Zcl2T16hv-(1>~DYTkNjEcTZ#+jVhn6W4&G>lL8-9WV~fw)y4Wi0}HR zgIE3KJxpk2P{a2Op!*LH>8Fgon0fchFes`ld-JilU+ze{2c11E^TAaDfztvv0Os0l zpck04>hl28p71i@v%#9djdYVz3fDyc7(|kEAIPkA9Llh)@Q#iahAyjEa)fa}r7!r; zB$W{aw5PslQJ7>ijf!dKHqz`I(_I=Yi=CWu@h}~kV)Nez9XNu*=e)NqO_Ir*0l4(7?$Xn64b*M!{j&LLUO9(h zo^+=+wFK~)pYg9vg|Di(pTcow>n-0k(l=n{@t-jYsA4FCKH<{*9Hu*jJFWKb|KJ7( zEV*mQSqsPo2cjS;@Sr>6H+Xd|_kS2~J)c`M3hxouFObC{Tlf(8-#k5$ z(-1DWp$DD@*du1P@ciW`i5%uFlyf&5Tm+%JzVyd1rucey{Ud-=;YWS&PsDT<5B@Pk3U8+ekvlimzFf zg1~X+qAu>o1~^SXJaT!}r?TIN0mZ8R*d_71jwolvl?vLL{rru<5#@a3H#>j)#(b~K zdQv;I`dHc+MPh5xV3p|J{`qr&wrx7?SmU0*Hm2i9w|^$rU)u^*Wo)(iuN}G-I|EA4 zOS|oV@@v^7V*>p5d;c%$I@&JH!tf?}dx|&Lisg@PgE#OJ<=8KBDMH)P6-!B{lA@$+(w1m?I z6kK9Ac8*v*SB~iX&%CND(WxGelm@V;uMwPk@(j#JRX< z9X~HZPQdkoH82d_1`BW(h)1F!Q|grO(3U$4W*}X$6O?#0p?%p^M-ymWTj&MBd=Ue# zdh6=e2TZRr&&i1e1>hCrGJymklTQGPgKdK>93=r&BIuQ1{b;(ewZ<=YuOAR}lOYUg zVhGB9oomTMUTE|aL|ZAO%a`XMA2|B}05D8Zr?-8E1;CLOY{Nrg0f$0E_3K`iz`2%fCIQDRJFqY$W#h-wiB;;-% zOWQ-O{+z9ZUs&a3XCO0G7& z-fg!zlT(hMYYVNm8y+gT$qaCZ?Dug@!?BRq41P_jz0A|Om<3(Bi~r>Mi1f|EIS#}{usTgGU1}&N(uq<^ z7DIw)e7SuisFvnh&4sPqExQGaVRoL}vb6S1bzN#!a}nwj4_=Ni-!B&|Yw7#-&tX8x zt_;Abhl@5@+;_j8ncy>V#n8e(PG0>&hWTI-GNrqGZ)63%3R4xRbqTU z*6D*0B>bIAP=q{rYQ4Lk0ZhJ)=GKcCp4nU)f;PP!O>~|*JrDG_Cy-Hl(u}uxQQc); zhs>t>>pd_xavB@|4L>~Y@z-7kgqAFx@~W)*uqrVmyEDAn^hUS3hN=piUEHlra-l*m z?}Uh6$LvD-b-(08x>`Q)?_SNuX1E#4#&%(YKNlMtf5j>`Hs0@A8pn;;bP(1^^SL`S za@UP_DHl&4JL#aYDy!jnRSE}^%()PFYopv!B4_o{WjoBaY?KdTT}Ey|K>dGbhxrRL zAUAOj(i>w@)KVdPZNxU1Hb7n+1KNOEUem)3M&`6%ahUe4$Pk=!hxkXtH)07`I0r7i ztG;pxjLDKk9_cqs{5I?_z)NKb81UK|99%M8Sw;?-nXKUyZQ^J5Bt(}%y-EzhP}6J8 z)%`PZYhl+021ePNNBfTftD^xD#s-73AC5r3ip;JOx3n?>^p~@Rq>0ngu&s1Kq4s#9MW81sJOVybX~STIv;gCVgZ`;VYFjp?t*-v)od}WE@A=k zLL;>W@*_uPR7}m5MxeT7qZ~q_n6Tn}(SKw`WaiJF&SN z^!>Fc5ESjAfa@}weE_e01dN(*?6Wlf7s^YcA(9Cjjuu%3eZ)s|OChmRJOwCAs*ptP zktct>Y?k<)phCTMtss6|JGy_ZVT!km_+R%sZj|r$7uIef^B%u(NWGaqX2#Rfm=UZ0%ta5_Tu8qwFyB9Kd76Y{j!b!t-J95@y`3-g;2jWLnCZ)q!E4cTOl7AZy*Ld zff_>$sKTS{-H_-B!h#Qz__?xlN6|4Ty&9*0E`RUDc_0}|y;L(KdYZp|FF6}kr5{NCH0j{DCTFewknVRH-{AK+FtO$L; zAh8|r!H|kH!}{aW5@$*DaX%gkF_WP|vIanoD4+YVmC_3LB^~zt{>6wus+c`rq}m~r zxov4dP6HKJ?y=|&r{bPlwvfqdfP*3A=-On9J{z>)LAgcb)a*ou00kJ$f)>C)B9%ku zx1`U@X~oSKYmS`<8Dv|O4SwpHmBjHjV3+02ZoR%R`I3Sxu~$J9qXeFtkj^|1RlBnh zfddbAfKOGQhpdx2U3flRm~)^G&GMB5fbxo@-cpLN!zgJ5Hb}gzVWoEYO|=Ueu`QAR zXwSuIXZTHJ4GVOAKba4qmy$<h~-O3=dB};^z+t z!LTkMdT9l2k49~(P2MP|ZfSPC$7J?$WLE)_L6#@$U=J2szo-VSYeU8tN^fYtylHKU0SJb~s| zHgqyi7f;`k31kf(CdY1wm0`?Cnw>%7w5Ox-nKC}mkkEcQ+u2VVQDirmG1Wot^$AF) z+ZHaLFniupchkD+rc-dilFf9`A0Qs;r&}<&YLl~=wF^}iS*lC361=}Ex_nU7>U<0N z){O#bWU3wXacg^_Myfl8QcGU&IcG}!ui3|c*$T=BK+y5{oXGO&?|&4LfGu3bc3tYn zQBk*7nDtfo2}JQnSR;u{Et54^zFA>gZWGyJW{)saL>ZX*U!c89L*3%LIt{`?8X+TI zk)6C)OCGnp4YY+*Ce5Od(Z2@;vVDv2h2JbJh>IOv3=4?9xFjivh(iYMAtDlzYSiTDxXtNWRP5NG?W z*>x8otutr<5mb;ew46!?V!q%v?LKnWq*ZY1d4x4(XT=z|K?^V@SM**gg5QDC|g{~pgC(o;htONOpAGG=|q@U97w2tArPiTQpm*mkZ=h7>vWn7Yh*)s+imt2SnuA1VU3}t-}_4p>A(Z;k|{L`wK#-ijb29>esWEQ;v+BZ)m^Z{AM z=`E$VjyYbJ3>Li15y7?=kck<7iywb0CxFdv6Yk;1_wXkp*)Fg}A;7_^72V}OgZaLkZZ4$EDepGElQn0H&?2?Pl{u789EaB*W70bkSFPt zbu=_YbFy@5UP4+sO(I-dx_O;R0iCQ#ik)Zr4jt{fLTF7~tVt|pE-vJ-N}ceSXEohh z@!cHwm(4)MtsH+J%|A{mo7fOK159EiZ#u1LoB5sO$@zrID;|2PGe+)I$D-&0BCT?9 zsuo8J+)E|mwIAJl4`FArJ*gyh{D9Rw#e~w%CI8%`3=!&|&}np**0P_|Tvr3Zu>p0m zDLwKio7iPalSVj`i~K#9Jp94VogVL0TBAyED*=~#Z}y2seN7enFE+S1g8KzXD?IXZvsm zA7J;KL{FbU_dC_b_BTKNJ-{CNWF%Rh6WG9l_umDw64lW)?!83v;=r)I75#h@w7xhy z>xQ0l`%M7f?Tx!V44c<1*0*$ux1&`c*@9Ti-0ft#Tf;0ys+7FFgAi1y2A^2`G`)uI{iO`iW_FVXhSmLs zngs}qpLSaLYrg>g!&w57ClzlzSt(O8dN%bD!mBZn<51Rf?Z)>Bbh)GzBfCYg0uot0 z%5mex3CUDFZmgM@*wKuzak@gC%C`2dD{lo!I_pX{t{(}W)>4~an5_}aE1>U7oba88 zQ^g;1m+{OYf*SNyFOwElbTG9=8E$m_vSpyRl;F^LOsbs_%l(xGk0MAJi0n2YFBl&V zX?!@Q4e}OOsWGiAXh!Z%-8xW+{&HF%ls&y%Gnt?|0hHUb;)?LTCmI+fwmvF6Q^e5|?EEu_nTd-Of1PjI zRxH><66b-wDoG@d*`3X+LV6FRcCII!Mx_2hYF zSW_qqvj&<32k9L{e7(wZY z!9^Tf?Hn!l+3$~Gem8EIHIEoyvTBxq%_8mBL7q$_YLDl!cjPrOv+X3y_A=OSdAckr@XH zlNDR%`z9Kftq^vMsO+!(bsPHYwj|5Shtky^+*UDZz7ccZZN`R&MG0#Typ&uOOI*bC#Y$>;9SS>EO+KTW?O*;*P`x=YT>Pi$<47!a4kLj0&j zM{iYg)bg|Y=?6_XYwf3@b-nz84B&yC2>UC9-gn?rTJwgPs61iU_j(hxZ6&{hHzwWh z4hm06RD1s?V2=lzkY0_^HLLVdT`EvgH4ScGThNw%z% z_lUQ+WgjOre{(odJLcozwI!P;>-uxme$$R^s~Q5xDrg#< zm6NXR_pi{DGhI-gKPZ>@ZlE_ATRmBy6du}rZ(_RBBL$QqfXlD+U$V5=jSFG zzhE)*f{5Der%NQ%$FzP-JxoeFL(5V_7|4?J+&SUJD&Z){Ay69Np@}&x20HC*stj4o zxQQYvCL}WmeIbX{ea!BNvf&VvHu7y z=S1)(L97|2fQP)Xb6?`Ff!n$s<~cgjVrbQc8`92&PSTXL_x*0X9r%VDnM9&^w4U;m zv+G+28nZe>Y2H1pXbb`y`!=(1Y=5g`eoY`76j$&+!|C608j4P#m~lyDVAR;>o9~&O zwwMYqh-g_)`pbUNlVLjqO`xIM4}4<9Hwwo})rW3joYqPD>oEyRjo8c%q|F zM|AC>j7pf2HTkvC~>$V61%EqEOXYG)siiLl)&^I1SZMAcM0NP}#NFW?~c9kGmispB;$~2-c9K5}kPHmjYKzO- zSh)-E#*<6e<_XilbHC$=(n+E02g&&BiN8nv=~jcvvC@Kge;;p0VsIfxy$sM~7JE+` zlnl}%(esg|^V^@00>=76(O0{it4pglTnJfm;cRBr{1F58(o^J(@8S>FF^Z0Oq1Sq* xJR1Xu^ZEkB>TGOmcH0q<^KVCrpV=oCk0;ws-9dqwKj2^4v@mBhNa`2-{~KOGZtMU6 diff --git a/docs/images/graphs/dep_graph_benchmark.png b/docs/images/graphs/dep_graph_benchmark.png deleted file mode 100644 index a724c2fcaf307debb68e0144165c80ff397b84b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15304 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 diff --git a/docs/images/graphs/dep_graph_core_common.png b/docs/images/graphs/dep_graph_core_common.png deleted file mode 100644 index 8e56280684b3278b2fb729f5d83d3e15254fbec2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37011 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 H7Xtqmy1cpe diff --git a/docs/images/graphs/dep_graph_core_data_test.png b/docs/images/graphs/dep_graph_core_data_test.png deleted file mode 100644 index c3762b6006354acf358259fba6227eb8b9013750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37194 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 j{6a!`KYa9qKp4$lHlO}`?+xfhE@W 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 diff --git a/docs/images/graphs/dep_graph_core_datastore_test.png b/docs/images/graphs/dep_graph_core_datastore_test.png deleted file mode 100644 index efe51c7deb097bbc644999a85bb9ea121aeedc1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36874 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 P;5epxLWiJrHt>G|FQ)kz diff --git a/docs/images/graphs/dep_graph_core_designsystem.png b/docs/images/graphs/dep_graph_core_designsystem.png deleted file mode 100644 index 1d6002d2a9c4f7a06facc7d89c3a8c7bdd1b0453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37044 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 diff --git a/docs/images/graphs/dep_graph_core_model.png b/docs/images/graphs/dep_graph_core_model.png deleted file mode 100644 index 205583afa9fdb1033d3279b0bf578662aba5cca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35559 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 diff --git a/docs/images/graphs/dep_graph_core_navigation.png b/docs/images/graphs/dep_graph_core_navigation.png deleted file mode 100644 index 5ceab49b80b816d1d1f5dd72384ba5f08b6e55a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36146 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 T8tw-W%cie){18FsY|#Gzv1a<< diff --git a/docs/images/graphs/dep_graph_feature_author.png b/docs/images/graphs/dep_graph_feature_author.png deleted file mode 100644 index ddd1f03f6e7eed21327272a35caa8595886a3054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47549 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 z zYMX}QGnbjEkJp`8JQoiNM?)GNNFFnHz%jzq!c&Z~cI9kRf zEn3zs%U;DwtYSvFWwv5tvn%?H)0=1o-?9nNfi!am4ZB!)mg)vOE8GvltlHUXRM)mZ z+WrC462~NuL%M6x^=ad)mj!PtUz6`TikKE@6(7Ye#vbRDbH8(u6y{27d*$%;9lz)x z5`pw%P%CD!@ix#Y-lgqrlIGBWm4+JXZZh-U758Js>2HqawX&2gNxHcPT^szGb+R6XB@JCr}q@R*As||Fab5g z;LX!tqg_X82Fv$vggdEF9_T5ain&t(@gO%nl)PLAlf?~sPgj=2+piqO4MuR9`7E?w zumxSaEI>tZf^|lKT9+S*fQ1-C*r5gWU=>eF7vF|cAk>d3c9_K6mTZ5%PeLI5x&2Eh zY1H}w;<(Mo!7h}DgoUvdFl-W`2ibD>(s>-P+XKbvJz$k=>gDJM0M>FwqxQtybugK* zZ>W35o!$t=*eGlRV6c_C9Z&a?nq%JhJIB-oqhWMjpH%8W2~~j&A6NGQ8K&wq zt7WW`u?j#s?Kn#W3171M?DW8~EQE7cmXVW;$X|&@0Si&Npndb#$l|mjv%(Z9Df^UH z)p=&QCfhm??PTlHHZ5hgQgq3Rv*TgkpO2^`c7$&m3`#jV4;>;d1cQ}>3m_Q*3%5~X z6loZOKPzY=0o!%*MyCUeAd7qI8Z$fE9MkeXlVOw7cxitPN@3&8Y`)R@F5U*+pq6tM zTHc5I8)D?Wi|ieWQrVJfSgC`U)3!G#%N-ea?+1O z?Mp{&7dH`Vr3)4v!MmD?{p~pz!Q_UbDf*)I_p+61AXfYz(#S z5ut&EA-oMC-Jw2_Gyr0=5~i=jNhMD zZ&GX@X97YIy2L4&Y`!f01N7*OZrn&F$7S;1KV#H5HqKB$I|9UJR9K1A$9uHZL)!}- zZr^r9g9hEH^f=w^8P|z|5GBkDKQXePNzG+jZA_cUQ-eqti;SsIvTS)yF9H?BS>lRA zOIeqL&emuF@>f2LNY{yT9hxPlZrhkshvpubs{a5H_-}s&38HTY$VVw4&<~sX0Xq3b z3F{U^kVkjHGo}K$EWWJxhW%s>+<^&k{zm+|HjL*G~p%Bh-c~ zs{r|u?eJfZZ2@6F3$!1ddcS>s=t77T_;u2NbqdwFTAw^>Dh}!2o+|#YmQg*JE zM@U+LumPVU1D3~05@1leebgUhWI6DqlwPe^O52n$e*bv7G?kjd@s~Rw*lZ{Oq^h-A zG^NP=ktkn(be)i{INn#9FFM_upKkK*>V0&jckz!8gp7~y%75Z zCW zM)b0lwM<;;Wg5a{Xa=Om*z80oIVS0u0(Nt~4^f3#&IFSH0$MGeOVsR9BW`FoSfyli z-&fH6TSGKK7u~p3HNfiYia*sp-4|wXp?GLwa?-^g)U`!(cBFWf(brBs!6ihb z7(iLFNV>c^f7DE3>d0#47ci3MRC9RWczbf37cfr~PbIka-O!=^fHY!%fwnfXXBw1i z0d{TaJs-W{>}DNl9;S2detU(`-3=mTXNr2*u(KSfR~N^fyyl;q-sNUmbf-OR4g^mF zTx*t5_OP?bBc<$xW9K4HT-hBtzohm7HmdUVNY3T6&OaVS_(_j+)(!}$JGO7(Kt<$o zVkbg45pBw00EkXHmwot-QQuVPIzmrpX>Xq*yp2FLL`+9GD-_iyY8G{wWp7_(aIj0U z8d?1G7&HsBIh!XG5+J+t3){+-BY6ODD^Ynb?Y#k7L-p!}ZhR+6Y=j}8C4H|C<&R#bID#*s2e)MGA9L_ zpzKdguB$O2fm5vNmMW?VtVF=B!M9c@Z#d(By#xFt)S9HMW4rZws1#6ChaYlmkw8QL+Nabs@9>j39bcLi+f>Eai?ys> zOxe)Y#GVT;pn$GdO>r#XIKH{n5}TQ(6PJb2>tz{=aK{;60RV*7)Csg566#{}2@$1nk+MS7vBexWs0mVB_*2kCH%XwdRKVdFMQWv1&U zJQu8hNS~0L1?46{ZP>ezM_yvkm+yBTb^`%cGxzumC;&vD z;&VfqeyD4fu6Vy(S$r7b86*4{;x<88t6;_-9X)rXTFSofO#kyO0b;y^|Azp@&_+PPq?kSY4?yu+?q2}KrSXXeoDyxy4%asTqF-g_YFA#@Lg{q2oA-+noMsAW&IP|*EA5AGCH1fX z4gef$IRF*+)wnP)k?}-T+KQZ)5l$Fp!O)+qInff?SRcS%dQa5eZC3Ea9xD4I&zIrc z=SQ`z%demKv7}uF8&M$JtfNJ>?`4$_jYxU@the@ile7_C%jv!??x}5{!&#$Id=E&~ zcqj)KuEr^pOMtdHDVh-|L(iLxo&`k!&wVoL{Hm-=s09S5pyF5OTjj)u?n#nIyG{?&b|>AqfNvyJ z6Ku18=9xs$g)Kxo7;gt5C;B|Z{Jp1`^erZ~1k`dmZt7~L*_iqjhJy3AZNdZ4bLkya zK(phB@6J8G3fRd!WH)S{P%r@1B|arD&Cp-ZJh8C;`s(YY>SNtf<>a^M3xkPm#T1u` zWEk$*WOUWpl%T3tzS8q`Y0WK*Hk;bJitowSx&)n0R`!$(WKukrl)3~=cAduY4!BI9 zK$q3Ox;9LssEkn9!&Zb)Vv2H6<_nK-vVUW_2Nx6Ya zEAd-|iMapyus0;ag9*7r1(x*32G+H1944)U2yMEqwUK4 zxsONhJ3>xGG=bu@IDafJ@|!e2cGCn4LA~nR>u%0cauV9^R?0@ zg?yU`z$eK3`QVNcpUKEs>q4I*yB-VD_Y0G;IE|!DLw78%w(W9KYxme)b;>(88aw z$L}KOovGY0wZou{SiCj8W#xj@ou)>aV2N&oTW7CyPT)tzlMf1ygs?&dBgOr~aGA4! zWyVe|*Vr`s(Ugwl@rUV7(tQDp25suYUuh5;(ph1tc|L^IOy3dq-yh$IJ_D~NxH8#k z^Ch&coO4Wd)c9QC@1u{P?WK-(B1Cii?4c6X}I9iUMO7)xVkze2qPk|jPb#J|v?wk2z6L&F}qa#5K zYYh9clD6Z<3k5{-C7+_Y-dqmAO5VU|G~RA`fTD3ge?eqlB{>aAE_La#{A+~cj!(J% zmvvI*`kSe03NN8a|}y+2(z^pCPU{ zxDUbxYi+@5_cya{4|XocvbGvON@R8e`kDpWAHYdz8d}B-#yV}R!2MJ|1GEy$2P(;g zNgesOJipm`;h)AV_GSsz6yeaB9+9VOs=E+v%ucu4xo`@Pk@w6VS4#mBpzjW-QdcH; zjY1X)w)#R#$8ZM!&iyxA(0F?!yf+nAtjhlVVS@dOfX1(Y=J3Hs;%vQ=V`(m+w~Hn6 zLzg?GS9RlnK1~5e<)>sd|Kw&y^P+~yra0zB;2E)sF63y{O`MG#QKm{)okMaG?R zQbtyRUfQbMRB!$TkP3ap#+$}H8^ zXnmzzt$P0?=w8My-UPKiNT3%>{#7q5NEZ$Qjs3BL)Se2SUi6lifQXR&oX3|LPo1(E-UKY;FH9gf-|?08e} z02tr46P=l5x6TyM1lH=TC?9vkb*rU@?$4D2lAW&dylzhKtcOA@ovn9z9)oV zW#QbpurucO&jJl4#m)=#b7qfNF>>|SijNc+4!lCa)2T^Cw5PUAf3yV7=DOsFYmHKC z+j#eDQl1AP>QitEM*kK@&#_l?6x;C99)EFf6Qr7FrROr2(PPtFlg0re6GtTluzQ|i zDC8yNi^iTjOWsIKb!Y)1v}KnK?7O&Cif_3@{mO@cV1?~U#H$t#Kn3D(!vZyZW7?n; z5JUq%(q(`3Q*>S1s_OYQfj7VSq#bVVj#1)XRm!cO?qDN!cU|Ory~uHBR3mvq zL$Z48WRYZhG>MtM2a?xMA|QFaTL43$&wb}(CF56K_s8c70iDFD=npAG-6W;rE1B}< zU9ZOs0TBsh1!=9TwhI*@Fv^_PM`SEPgKq()OR(*(NE^Gs@nlpA$#cbCh5f4COyck+ zVk*2eMV0y1A(QnRT+W(XGe-Inj~yXt4*Yy5pibWLBzNYvILvYA-h5T9Pc?qN6;_9b zbo~YnmsErNCqD%;%ivU$LV%q%v=$Ii3FKEUvAFDa*NLZt7JGWqq?%W<(uRil|DdNf zj!-51w}FmPhZHO0;u^ zkfmdL*OMzdlv?4Qq((91+ezhWpmj-&UCg0Z3MHi*d5-SegI6s+h_y!dOji+Gz^xRN z+U~`k*FSuWR2*j=ZM8R%_C+F#9R{BZlBsFY#ba%Uwn*HKo&&OUtavoriZk4+>V}va zU*=BwA5dqs0lU3b%fCPplPfXGEZPB-`xyA*?s<^Vjt2@DMhcWX=||-Ihdj^Qc8bV( z6HQik(G0a;nU%c}I)7BYRq6kRQLf}R?Ze~g*>q+56Km)s zv4swU7LkC`C25be?aC^V7m-XHlUs;NrS?e+V*3ly>tAth2?71>XP7p)=9+@P=s^FR z7ZCsB-A7AzMG2II{zSG{$=@zml7mxzJlMwWDxZ_p_rWTdg?~W0ekF9j+1Ze*R<@Ab zh$?)DFsO>{i%=L-p#V9eKwgrHY1Q|3!T!+?utW`J#oO()4%R93I~E@XW9M}%cJ`2; za+vRn&facX)^V!1zGJI#2dP+!`LLRa#!sT7OEej)@w8a5SwmgCenr`_+Ihn`re(Xw zL091H@%B$NUbk*WyuwtgcAV2-=JgzE$DKdOaKxAWGqAX6t>}W~d-m8~co+khx-lE1 zP$svX2>hriR+$2`zNw%H&vVw=Z>GL97$M++iilVQ$q31Stp(f!Kt8))ee40J_gCC@ zc}sn8-%Z$&w`bvyFyO1;YgV)%zj9OZW-{{0w<~GeO&(pVLWHbN<+l!J)0xQB6$?LHAUzl@iudJy5nno6bTTSw zTN@*5M#yG<^XHE1JK5PdEL_7?ig!2TBnbOc!F5vYy}1WEa-_X1y{|F#-@^NT6V(D7 z?tf9H{vy;@gc<(!yRI%N)Kz9krts5!T@<^Y{lJrmFL9Agio zF!TJwx}QbI@er@-08ozrmiX1(Y-YOgZL^{X$M+a9C00xKV(m;;P~!cCD1T9@O|7;X z_e%)5EQtO2gkQw!OXML!WO=SNLO)8xGP6l6!C;?BC4ScWr~6T`Xf&A{(PHr&qp@9l zdB1awYQmTFguA{PzL4-_Ba-tj1Lg)--k!IIyRYmO0b(Do3wEe-k44vj$uRTYF*Dw` z&XWcc0iYhc5h0td1Z3;Nkmi0b%N1{o?ef6<^9f+S!@^9yWZcd0Qi|oqxB7+Ob62aS zei|X!5!vDnmD%DL@|3;7A!wqTv^d7(A+IOY`SAjX?y^&xs=ise88F$6%x;QGFdY3M z6<#`vD90b|hSnkIovx(vj_xd<9W#$vzwo(|ym)Laf8d$x7jpV{nm#k_l-iX)b zQtKXID*yvc_yOoJ~H(dHr7?hGnfEyg<+3*T1&1aK){C^ZY-()*yr zY9+v~Z}67NMCz>2{56BdhtCFIx6irh8j^b|4M$rjzxH^80thw7(35(h*D<<%s5=iG zyR#5CScYG-6o_MfHf{**AS>+WOG*H89cK`8-H`d1Vj6Jf&3aQY13fY!% z>=0ECCnh?Or=gO^E!$$UNI`dPm<@*-jcr5!GF zKhH-)m=WlY2HSox3MI6adVi=^9iZrjuSAv$&-AXXG*aU|e^B;=mCR}xP6)N?u<@k)(yQgHR$Dy`zY_a? zL^yl}OL4IQ`%M{b{2j;M4(DYHU&C8JE{8`+b2olt-}He7UNeMjqIfXOekEVv z@cC@59((&oFFk9+)ixe{uq<zK(ei)jlwHT}1|-zJE4`(}UMza{R@Gj&RPq#KC^T zFXxf%948HruHvyUHXiHTGXXB3>&Hw|;L#`F9$ildp@m@R4eGb&q34Wu+H;h#+Ncz0 z2C6oR)Qn0a4sE)L?5Lz9Ej2feH*+L?h84a&SzumTzcaVX)G!U<+nAuFzCsFI-|+1i zaP;W2_MoFO06OlZna`}YD{~{ZfXzPvF{g?^FUJ_LFgoGX%f$SkOs&Opq+w4N zNcT8JOj77ZfxN&L^sRFkdO$A+Pi~V2t(qoc-;;Pae@Q6Ns{L~Pm@wvCAAR7X_H~Sv zYxOc__mOvxuQ}Y@caXZ70(1M>cV*|nvuDT@yB}X(W&u&`>?GjdPbP|EaDzxo{CNB4 z6+}4D@gi9Rb)n@)uXT5Ru_Ou8K=KOlK~TtD)!}{r(3^dV9y;WWpGXBwFm~imbYV8Q z=i}cv5P!~r>2#RuP;(s4O>;3SaQJ<{51^()232R!{?-c?5Qiq zv~lb}=G4r$&n?r+he|>>r8lG>{*!U^LiykIzH+z2mCAgV8^;Vs3y=4HIJ6!%jV}Wf zXd`Pb64e7FZ5_pa1zCnd4|UtXcAT&D-jBSB-kYsFk`tFbeP$^0`Pg^GAXV%ui@oU2DnV=vxX zkB)n~S#lHn2tbgxb1PM}y2x%}>&hJX1&&`() z^(N67^}P$8t+bs4ca~|nfy?_uNOu}CpWS86e;p7jWf$T1;&15!AWN_q=(IN7wmB;@ zn&=A@I+dd7!g8qiPfs~RsbIf26%&#ci=G+eDcT!Nv-0(Rc((RRz+^yp;L7J4zp%*q zI|Xmc1vit{W)q=y1+ZP;xsmDfW#Y*cP@9>S0XK}L=e!49CK=vGezP@PanfeCpAjBk zum6$*g0Ry{GyenxyCc-}pu4OFbQz45K!NB*Br=R@g$UlVVJuiU9aF-cZop2)+mUH+ zn!HpqhM%1ocmEF9F3#vfB^|%T+1mfadQ>4FO5O7NxdaknjTSKw5pTl-^g|E#vL=K8 zhJ+sA6tzu%V?OtKpl$1yZ(&w;)MR#qH5XAj>9r^r-aBX1$oLFvna_(DwKv{EwdsG; za)WPlpYy zoQP=#2*pf8y9&);=<@J98WbtZM%Q4B(J>ie5l;qsM z9t&R?eut?#_isSr4f6Az<+=8+wYvQ{jl_-kehs_q%=M;ZidPbD(b+CEZpMr{h}v&+ zhdqeDVjxvBPle!@28Lu^k8_(y?C&FVndal|ihcn?D7pBJqbjNk<%na4D-cCLeo`(* zv4|jSE>W~aEfT0}H$nI9Z;5#L>5}o7A#F#}${SP4JmO{o0zNR-olcGG1aKwrYrEUS zbmB~L$T>ok(ufpkgO!2O-2OaD6dN0vA?zS5NT!%OV8!2kj?h~%;A@T z9~}}DFKcdDdC+1F@T}M;rpGn=9&g0R;{MFR61%yfOJksZP0~C_HQqS14#ktyt%`h7 z#gRU_Bf;)4a#Mfq*0lu0CvlF|O8K(p+$;^GB>np&RV_aD8(jzV3T!67<*EHBaO;je zyS`_8g6uc9_0(`f3*#r2p+~U%Lu;wR<&pJ`fbuxPPHn%$xovUf!0#vc`IWC8^0;5y za`@NcuP2w(s|)}lsxf9GtYYegTqwvs_`l|Ac754?g5*n9175~fMWo*Tw12hY{|QIM z1|z-H+x_mM(0t9cV&6@N^4Dw&iJpy&PgneRVE%*CGEi07VCMJ3e$BWy!&`2%hoV+0 zcIN|3kzRI1e$AKGGo@cXhI&l_I0EjxjSOMatr2}Bm=G%IhNe8}_i6d_feYF*0wrXh z_8iIz>_aP3dfMf8E}Xjn;X+7VqY2u-8pZ^2Bx=1~Anf4y(qQ1uwzQtKqO&IM;rLmG~b01<0`g1R_=`Kfo>8v42bj;TYwpF_FNs@zbDTPzb5( z7r(!Nxlbe%KxF0{*PuIn<61Q^6bp;%a*hNcYilFCIo?- zFW;t+@}PPTbfpHcLp;YChC5yjZVldi3t!gz_ZP*Eea*Li;kCN_K7Xfrm=m~Y!M@mS z@{-&1fP8u$a&<(EAl2K~H?;r?kk3j6w0?HJIG*2JT=ETIyIHaid1Y(@K;8+!HS)p$ zqK_Poxfc;iI7MtrzQD?32KZE8dW!*{sty<2kMK%>WJ#b!l5N!(flUBc+6)zZCte<3 z$&v)|?G%uzha{|BVR86q$?Z?c^(DEvI^asaONBQEv*tkafs8s=k7<{P4GIb>$)g}E zPtz8^IWtcYlY7L*#&+c1BPG>KFI8{uvtrJ;x0l0XSBQ2<*Rkwl*@=8_K1{z!HM5qEn=3J>}ZFWy=MNllR-;53!p0Sr!?NvT|uLZJ^8PT;QREO*?Kx-&v| zz(#_bh+dGRT3&tV^#l4$2j<8vZ3V5jh}irXJ=aw6e9Nc32lB2&z12rP;z};wBP%((6;Nzj`&+cK$Z0dTqwO7W0En|nQ7oI@5*p} zU^AlepWaeYhk*heFrMTh!RzrfK5v zSTXCS8wO(rvgT%r-5gC4I~Un}k%}c=?lqHSe$HSklmJ6iiKI*HLXp#A>^}qukZKU$ zKGFL|*#Vm@s+612jX&EPQBHRjU`BASnpLBXx#V(~WNCH5ww7JXGtP_8MdFGuhuk1yy_-M@*qxq| zu>YsJH;;$~+Bc!ZhP@n93MY0SbsYoF-#E^Y2%f#4131ipfb(=f2PH{@v$3=W(CEJ|8kO?|Hvpuj_SP&+BN3CKOYCggfk`$-WV_*>yK5!zQLKWhXdtK7DGi+M15E9gU8Tkusdl}nqLP;6o z@{n6rkNDMRpfnO0VL*=&N_apv-b}7KoxyA43GLNEKbAA&0h>9VPpCVY7gNrZDWvD7 zPvzKnjBajipXn}8i+n3>^489ZW^={Ky8Xxp!VTzlIU$5z5=Ni=-odQX<&ve-mE6lK zIlq?BO|SbLgL~@CSP9&=#E!2%PQY@+9cl0!ns6WVVJx9th54eX>&_e#fVL79+LB(l z4xpuSd9LcxDj07Qw>%8_{loT!@eVa2X0Yz&@Yt8%&!IOALHVrF}`(FcOPP0jL_!zRYrc1|tcw*Mr5Y-OLG{g?a0yeM7lrxvS8rl~e|vhowvbjqHGZ*PtSObtvE(AO?sZ^$=z0g2_^A!AN+)8JRP-{k>+lN)%hhXoMpUVB z^BT+1nf#;Wt)*gO4SnHds{cS6G-Uou9W2=l-vC|Q#JaAvcuTR=HAt}KkLfkcix4s@ z7Qmx;ew0bX;c%YjB*vR(A95xks)j*&<)m`!Ns5p%U^fl~=KZ7=pYqD~>t)}jL z{j*uehCEC4E3h57b1MJHn~<>lfR6)uDS2tB*|Ft}6U z)qx#0g#HJeBWr<`%6;La$>W2=NO!x8gFkaNQOk7PV7_y?g{)Z?>rUg=+G~Xl{-e-Z zchqRMfaijA{E*)J!RH?O9E`-0fB6emHYw`ARwh;Y0;>ZN8Kd$2DCpd~kqfmK`%Ed4 z4jYqGH_g*1Xz3|{xBKhe*Iv6gSn0gz`-4mK-j= z+bl@yV~8p|)^EUfXBdRXf(M2-WjD#i*O~M`o(^hXwKwy#{rrz^XL^>-gh@E`utR%XDdrh%y z&lqZH(B0{okkQJ`OW#oJ#`53iNa>jaanG=%*)@Hf$IjWFPD_H8Y*auRqyba`l3fRF zm}(!*9e0n8`I1`#!Xk!HkoPdu5g)j)ah!x zI&7Nj@o6=%bHo5y?wr1^h`_a)5Nvj_0P`<6f$R{HTCz{x98Ar?0=g&X*_kT=+F$JRz$k}1eIfLINNeE`U zGSBDbvyTZm|)L0M+P5UdH~0pAo6;C@$o{>!Yub^$bRubsc>it=r(2;P%ce3ax9gYJ#qw2=9YDXxTHOwrV0@p z*B@%Do(O|?lglkD?!)2w{2=6lOo8m6Hdp&EhGl{Zx8YlF70}U^eVlXYWhG7lP0qJz zOMWN}qaS$uP_V3Xv$#!rO$1_UghM|Y^;?)P4FNF-sng#Y}9`R%mfclx<(byV%-_n4jI4}%A9QZG9!^h$x&D+WNqd`tjCSQfI+%d`xqdWq z9h{)(ILF8w-URHVZJeL-t=sIRHMUC)JC9{TDTwz3vjXcGFwLOP@^}Pd3ZJhhGCi?q zh#DhG^*M*3b3mJQRCGHh$Ts+Tp_iwIO+_{0WkC)HUHcfaeO7HQSC8I7o8~wlcM!qs z0PS}Y&JHverb1J=P+)9OhM(`YMHIUMrcKUzrSq>B_tob;N_hebtRo3|d_oCo=4ug# zRok91U!<8`;LC`5rnJzW8r#?{zw~K48h48CjO9rfjOn!WfYH2u_lYBDmiiJNXr`D! zTdwo0y+#pa2x6v@8|5iv@*3Gqi&uLdG+45VX1@Uhx(U)v|!S8g)YZ z*TS1%AcCY+>$s=V)oCWU$n&rt8f`}pSHF_i$D=H#_4{0i#^ix_yxu670X>`*)JT^m z*Kk<8=e!ux5?N3))^4Kj!cD)xrt_ch6}ovA8Zad!SIi7tjBAPLgNS@Y`fcjiR&bQr z5Q9E4=EOn23+qq@LrVp~_NwvN1su_=$RxD~C5`W)Wz<)VTA#RV1wudP4^cH)JwP-7 z%@k4x{K1_D>`)mQ+a%(WPeczsUp5!tS`{;<;#1cX>HB9WP?dCWYI)+;7CX(?(tayy zvr=2fSkRriG4+6Qmabw~M`O)}z?~u{nI|2fWVW_v*u3j9QIki;Sw-RM=ZHQqG{Kd6 zoDuh2bV7WD)|wK_JY95=7+sa^st1mz1yu$K-uPl3iVUUx3|uy$54lj{-=-ss98@=L zBSN&^D^dQ2WOIxn^%El8LTuRYgyIgv57!R`z)uh~0Qv#(Ia zeenGq@ff~Yv8F_1O6|`Z$F3?iXQep8a;S~=jVE`uGfwoMHydO%ViH{n#pXuq8`{A{ zU?9SEs=FhixG6lux$|t#Xm+GmGWZAegxETTIL|a>UIlC^WH|Kj9~Uh&rxvz-REq;G z>o2lLS*r&I(wKKnFDO)J(&7?S3Efb2Z$cMpacn_DB>{3GK;C=hiR%IE83vRAkoP2ekh} zK}Q)mwg6;K^jmxRI+{IWYk%6I?!+Q*9%OugZGK6WRRuY5N2@QiZ#75X{}8?f zRoAsN@|W-}CymlINS+ZS=SS)tSIETuTlkhi@j~yN;NQZxYl-U*;agC3T}MrNe{1d1 zYovFT(k;-aK&pg^X*^vCkYG(8e_DPNp4B&)>Dk9q2X!I z;WjtgQgi(iWC;idm}GX39t7w>X!KO~F2v#rY4Z!7f0hcw@npShR9Yief!CVd)dM~} zTF-K`M&ohFK(YsZrXR~3$ao-#RkIn~O>C01Y~0=F09lB;ETWP`EC9-)%5oy-A5{?Y zAkQ5sv>KFL@Ki ziA5FI=$gr@Y~)GLF?y99CF`1<4s(Ou*D2)FkCs7OT?c`mx(mQV5fPADRmb{?gy{hG zg@TIeF~=Ix1ag-h%ntxn%|N8fuj3<~-*LO9!T@~wnTMQRxp3~h!y%Ah=_g{G60HP; zOQ2g{=H9K-2}#B?-2R?H{tVrW#nKfEEk ze$Xd;%3aY@c^MI^K7WuQ@>p0cE2vAf*pIHXh3->pg%dQ7nXWCC!A(Xjeioi>I;0$F zu&5YkqTlxM=x=O2UU7OMy%!G(5aZYJbXIksUY|m6D4xRA-~pHp7_6f~w6JfjeMGRw zZMPH+JciESS{vj1d06;leD%!M7IQo#DXDO%p6d52*EjDO;*=_ciM>d@cLOtFn({C0 zA>XX1!H))ojI*My+)`Ph0$|A9Dr9`>+MP&Xbijg^P`mx8onK?DXX`$RvfUb^x4^Wd z1LT%;VeZ&&PcwxdBo@T_c!-5idcXF`ms#<0#;Gh!rUp$9eMM~iHdXAn9iVOQTe*D= z0H#7Vtx1m2aXwFl5uz?~VsmXgDj$PJFe@N`Sev(70L(WYu5Y4x2z%`6U1ruOM1-*3 z%mej}8pwXA+AmEAK|-jy-UwtUIR-1$h~9J)lxgZ~h~ydkW<>auW5_Z1kw6V%>G!gKhC+X$2p|i>3^MdukC7y?ux_z$IiPs zF3#_YU$@KLL{9KOQ5|?(Bp*;g?`wX|XvRuC;qN-J0RJ>1y@ch955hnF4u8X3Aqx~! z6i`gR!UJr&}4bd;An*l=Sbs%)U1Nmbe-jamb08zff``o-~W;bwCwd42X?+N1k{T;4D zi<->L>=n1j#4U?#7hu*>?lLG`0AXoFVfjz2>;F#50JC@he=-)`?|-HkmyZ9HL}V;N zKeSxv(4jVj1*gTb$BE_Sy~@SS69x`CAVp}0#zI?NQ;cj1p%xl=J+n~UbYIt3Z!9di%kbK+23Bdu&s9ns zehF0(nMW6yv9DvhgV`=(;kBTxA^V4PO7EXf=+57;l0*Opl@UKQy<@YW)@VQUGNu$j! zVv;`$@P(4oj+gQ4n*ABIb^khcj?`mWfa}2wXG-;`SQcW)1_!LWpY6|PiH&1-5Vve+ zgf`cT{Lyk)8vU-9zmEGNLmEimrSf|b=*x1+XX_iggs%wg=Rtw;#Dn}{t$**&Wnf~T zOUn#tx3C%(Hmt4t+gRo?!{k&dB(6kE<97 zYfY)2XEGEH5VL`$siX4O+3)|N9m3xKd|O!~Ai}*6x^)R6++*&aNf)B84$tvKey%ag zy|Zh<_Xl)cy{^J#>Bl)rolO1L)q{)|&|b!UvXzU2(X0PMoAl2Zf!f5*bXm>mc#3x!TN$|-zfNt^Pe2SA|@-shV^HyFcFnYbxb zY4j-=3DeN9?OQWNS43QzSm}K;d{sx1_f;P61yq7H;>jM4AH`PsAU8*)7F!L&8qTc8 zFjE3|7m<@i;6aFmFIbi7B7fF=8~U$Mf$|?OW-ZB6-atU6@_zzQRLu3i{g3+n-~y(H zuuWikQbdbUB|A|%z9nNGsL+8IeM~uJl!C&S5 zrAu2;xqsqaN6g;^aU>v&6r`(60xh!)qy}h0Pv1avIL9%Tu`j210PiuD^!mP-KMeYr znFLkC#wRQsqHiKrKkZj&S*FMiECnAC0A$Upr=O0<;=Op1;tu|+<1w!N7lA0;wop1< zwme;fi(Wvwq@aHr)?MP3w}Pp=B^%n`R3cRhmQ#uDQw2mMmUe)OEy;3(@PsPW{S*I9 z8b_)$-jy!_`RH$cyx*x!H1de)Dw&A09}OD)5WtHgXf0x9-|=|VM+97YzoD{ zE#|5pMD#>{!Zd~tS~2$tGhPeDD))@<50a-Gy=^DPD8_o3m#*|^*L;UT%2zJ=Q`7U> z+${W3g{)90$4x+8>N4tEM?&>c4clqy2!3MPKi9rV=O85 zX&Y*9R+#ugVcBeW&U?{TIX}^f{bfrHj_Hg%w-k|~xb_HO{8r#r$Mwt830BJhBAUAVa!1b!a1drue*w7L{Q zdDQr6vv22ECuO;OwOBZXaBq$Z_I~(u7X#UQARh6F(w=5uHx?WwR6xS<8&Ou%h`M~` z76eTJ(r2Ew@D15m%A{q8%#E8WtF061IIME*7Z}Ryxh_>$PshCLuUpXWIi8j>Sr&)6 zRk8xCalCLCRi@2YU*0z`2m1+pg2FVr7v}60!Z~7ZePl9%&(HD`VfZ^XzMz`tYfkLZf{;%-dWVI}V zwxf`Xo!T4h=sCm{GOu%{`OPL9+q$hN3?f+g`=LkGGQ))M{<$PEa@lJU&kvh$z0BEg zj=hdROm)fXh%=>os2?92N<2I!uFE5TbIjM4a))RrA!9*lu51Q;(b_@SCx0%_r@L@M z$;sS8u#k4&VPPcehlYsF!E;J)Q_8tU)%~6P0+lP?iFhxm$zJ4VL(MtmutbSEcE4d3 zc7KnV4)BkYS@5yiRuPWDyk=CpbOH~qa?r?W*CK(HxxT{6*GE%c@ia0wJ_mIJ<;rV{ zfxQS+EA%Q#=b+Mc@J>ZOmbLQ99_h6&iNKJLcdy+s@Wa^mpLu(m4b=WA^`qAQe?wLx7?J&i z2t(=N(!wibkK9Q*til7AZ?S&nHETrZo+7vgXmTcPgnx&@t@MBY$7_q<6jpC+P&@b7 z4z3m2uSnlhNfd5lf#|If$P?&m*CSpfB~{8BwxU$Qd2H?f3G~Rlfd8i+RR5Rn%m3=O z9|R3wRYVh@7QTqR5NVH2=0evvKbHk(KWj?|n- z1El-h3SK8>(wA$1rr#fP!s`3u{c)x#u-G* z8%~CcpyhR>5G)yfF6Qv(Tqtl+(n3m%oLa*In>1+kor!?PM~n@C@`gsCb*aLU^JPBX zAS85i3A$>j`X+9tBN2a8d?s+}#;ds;^C!THBoFCXp*669zHOP0Dj#+ZIjF%MCmHPb zc5Lg#t!@n(=tWwQba?c6DlQ6m%p)vtVYWqBNoj|==(z{I`{Hvllt_UCz0 z-w*)=^6WD=3J73Km^KsHG4W^y(7j!ZGvhk`5k1 zVzdg(bJHAbeE}Z{#TAIBGc8?@18#p`GmGFpLT`)rzy^_NIHotAir8ba#jr#-1wB}Y!LDad%`U@D}{;a8oasem$p(IsQHdz$6`AGTY84` z>>YgGsaQ>h~p!(OxNey`Bt!zA? zeKzt%y}BIdi7^R{E=fxUM2Ro+5e%gX3Sa0coJys+M~#9>~Y+z%bs(V-mKhf^&Q@WzPE}EO{YCCVaANItz zzDM`l`lY^vf#3P9Zk(2ZWW{MPFX}w6E!86m!%IkRWczMr@Jzu@rRI4EYBk{*4xKNJ0_Z$Ce2srmQ8zH#tPoAzW?bix47 z_Ozye-&uh!%~llaPAn41a`PRk@ZmPT8Rz|E#-q5RQiWM=YHRZF@EU01e(-SM8|z2R z&fFlpxqCz*DVA)dY-Zdwx<=zcat4F$dGLZX8A!=u&e$1~txbwHwl{6Vu$$^j{_zg$ zJ}ndqK8wnX@=8wgLTmKc@=xU*Lwbpo*O7!|hawM3r;`-lGdDrjm^j;Qd6k+?P%{Xj z+u*4l@4e)$Fff^HD=?M!QWU}ZsE57o9^USydp9dVJGUh6<&gAJ^H8U&nWTGZ6htzsl%DV3AR84S> z=eRt_=HNdI8J(}FjwD2`Wi+{8YEKU7k~lkDj`!Vi^^o`)c5r-tzxz1RZ|CNVCrvn$ z>(avmh&7}H0m8^h8kz&Ta9@xA(?^-ltV3;a2Jxs@V=kp$eU>%@HM2`cw|L@qAm}Ez zzwGQUwn$_aCd=#>8mcfC-Z#ICcqrFXKJ#~OWd0#xM*fQ5M0OKPtGR=d+}96n=_U#8 zWKy5V6XHlu-CzuRr55|%P4FFYlk?Wx>K(Rv`U{ynSNsCYnEUVOHONS~-1}<&?FzN* z-;fPCU0rLyf_yf%=lN}St9JsDg+ahX(x$Z-*kK@SdUuUA25UTfcj78rF7b^#c|=~D zoQ}t)r|_PF!Jny)RA!b_-6L)Pc0N|;r|JDYs0?-7V&W2dXZ6IU_}_W!@E(e(5q7%& zoNk86k*Sr=f>+}DReHT#)>uvSm!ApnAvJ5k_@()v$FA}{3c0AVIiN+Y<+Ry{6CM4_ z@m(E~aaJ~-GxyPRuPO&_5iKW)axFSb?^sUkFp%f{W6|ym_OcCP&Wa9jx!1lBy<~|i zTU}ko5JyfznE8=a*HwDx^;!DepT6;xd_N^6m9xNRluTF(*Zkuz&OXcWoR!NtJz#1z z?agd>TwDvw^5^9$h>Z$zt4qz(aZ6F&#sU?@mWF{ISi$lLViox4N<%{_`tEbY>bI65xG5 zcfqX76WPU!Bjb?9*+4Fr4yjo>Fp9^4gK<&w1Q=k!TxsGFb==RCr(G*j85#Zv$wQkd%5syUr3 zyIzFl2KvFYy2?m4`Pf|aMsHwNn{rJ;1&>|ArtB^0bun}g89JYWVO zwfO}2bH_{Mq&3oov@i>cEhRuF?WXiAG$gq8JwV`lKZ`V$fnWlX=ZTo9`8|cA?9@Pg zvoI%tdzWZF#uKUDnQZLssY35A8=5hZyxCM#SYq#uOdxv^!{Sk=G=)@FM*uu!;JnZ?TEaSz;a^d*Z zQ@N+#P3UCs*lYFocW>craJ0WdSaQGKf|Rz|T&R-Z6HpqIK9Tx0n-Pyo?uD3z5gBm@ zV@@C@EX|yR1b-5Zn1YYyLdt1~MVlAPLAMz>*2Deh%DJMIt_*(X3vurq655inQ8=pk za&Q}x-I0E?v~-etR)!-@&wH3I96lWV`$`j6Det$Okmb4GE>QTOD&045+66OoN^Id4 z%E*GhLAHaYl9>CP6-6vYx)g>Gr0q2i6yBWax9{OEtow02 zZ;L*cAF1Hb|7xh~)IyZ+$Tl{5H3po^#8@OZGbuFPx&!8X#rz&u*4?=T?u@P7W_fZ{ zK`O|L)s`h$@s4)~&#gVOErv%=DO|266j%~g+0ABaPimf>_!b92PpuEG6)_v+9t>dN z%?27lViHzEy5L%5tzcm<;r5xR!it`^eX)!nqZ09mL+lLJ8s;31+dq)^%|QJu=WWuW zK`Oth2xtJocOHa{FVdED(Xn>{>980DVgPe*nEM5%=Ya+x-FmlVJUwIb6tI(ues6iH zFc4x>x`Nj?OO9R}&344vI~7IFfUq=2npAaPEaYrmkNFSw_TL&}_E6ncp-WvKyAzl7 zjjNq??U(x>%X9Z%o1A_<{062?WQBtEqo=l^#oof|6)>%M!s0;^TE)H`s~7@n3g{MJ z!v!=}B1DgV&u zJwCZxb`1Pv7J(&wd5(8>++07xxru?P=hxHd`%Rt&+f^fHJWUHXZKB4c!@J9795cnTpGj$2#_L?5LS8U z5arcAgd_=GxS=br(wB8!yrAy$%KKRLizH6dBtP3h-%;8c>Yx8SF)04)< zQxkZ_lf`n*_M`dv{db#6{uQZP?`&R>j(+@9cf*xy8<20P=BDU>%1PW@(j6~ z@70JIA$Z_9ebQOjbhHb1#~1wFaUWNnpu>?O&_qS}UylLBq<30; zFzfgzr{_hs`|OuR6|{UkUB3^sP?bP;b;oPV#`C%o6YcFEBreYzhmbutP!p*Pn)4^* zPV44eG=@=S&Ds)qUU1q;^M!LkptH|$zhy6_G7jE}j^?%&eT6Q~SXWk)y_bsYhfkk= z{dS+uTK=T`kQNJ`d9C!d3>D#iP0ujt4E04u1>-GeBe-(hMz*okkl#t?jtIa_ILh@4<|oUi`O&#;)T15;{g>H0a@pzm=r zQC=TfK&vc@(4gi>Q+u8??{*T|WYpcX&ttTi?}$iKK$7I+$nFv5Um$DvClDP(I@J7k z1ub{WdtM?s_TV(i`@wh)akh(Xe))qZpFa;^MBap5YvOnBjA=->x;)q!f(9O$njx5GN`v@Zt^fwl!Y5@a5=R{s#-IsiCG4e* zt8IG=Uka!A^cj}})p)U-Jf0!LYSjm7Kq|#_yId*G*6sP;pjTqQgqSlTVxdWL-2v0{ zZt%?o|E$Y6uz&*5f`Mk{-&Ub!72u59R6kHD-PA&uhrW$GikKBcu zJ{ifZfSqnBJdr|^X>iYAbgkN{8J5aBkxgWcfDW@xNS z>!M3?h^|W%6L94~dOQywcV%Lgvw#_9Z9gh%4LR)`2e&uNib*)SAJr*x`uEx%`aw%i z=Sd4&o(pIDyELkynML1K8GGHSvGUb|+3SgA;o z+8_H$nUNjM#n{odPuj$CvLzwF;pDoi6hDxl(u0A@{kiJT1|JlA+2naFIFRZN0S{_rxx)qTLsR%A1POn;fk+ia**XrwH7+=U04KATgbv*co)fufgen@ z*6vVow|@Y344JQ1S8&8lMDqWFee{HlV-pSzI5UODUj0a_1{ms6Q+k4B)W%~=1f;C)-`%~Uud*s61KbTbYkA6j+(N{1EC9~HZIiQNS z{mrQQ>(Ac%2A*&peH;;4_5IgL<$n;NPf_dX*2Mc;vO$ZjTXYtTy!wX`-ZkP6ldO(; z?kx{S5s7^ebV)J?JX5`p-fJ#>j1rW(M_X4w1KWDWzTWJ5HE??847w3zXOQbH?O{&% zbyi-f10C(2WfeZe?HgAQfz+<1NDCP<1{sN*3BYQT5(`q)Zo_i;FDB%hLj>kB*pf{5v*B0iEP^VGb3s%LW+Ai3O-;RmI$kG3 zPop79Ld{fk?+@RZ?&1m(G}b3@`HfKcngnbP*Z%T!UPtr8=~nadbYELgbi*|OusgNy zG#7wSO2v{=hOzyEAcf$t4)PlbvvI`vdQS?fV$LdKqBx*!ZCw*5S1sD z9(h$-WO^oYCz##y7?=uH0L@#(*c8ORYrdI)+;S?Xm_<;mZ&Re-@4j=hBNFa6G}o6S z95nzlQmGN20}5T{Fz^k8h?(g3hBb7Ld~wJ=_fV37+XcH*QxYP<#L!(eBoDmNCP8f4_-!@a0c(T zzM6;#Yrrs+7=M36Vjc_!xD#+GYF?m1TzdEx^xrzbs8)q*2!N3++Na)ne{|a^t@#Vc zabP{QHwKMZyJvBuhv@qlZ}hY@=~S09SJ4qcIlTi+_*#|yc`li}{O7dcG9=@z=BkDY z-tw8idL&NNYZ z%a38x;Vs`TJ>7e;a$ zO)PYeI-W))DbX*`)og>>MViEmxfO3^MeZaC(`X&29sCGm&0r`1T?eHNSu`p%74&@h z>-YGCZW5;QBi22p@!h0sMX$IXID+vzXqaH0{Ei;Y-rIw|tcL&Lf4p=7vXwNXv7Q7S zp~J$|7wV1e$9g`G5HaQX3QHpd*ZbGl&Wl1i&LN z*O+e8v7%m_gZ39j%rYHTiY<^`xzn0D0FIroAA@QnaZ5Eja>bX!5oUp@@ZLzUP&`yv zL#5cd$)9o>)~9}xmx&%m5LW&J^$Yhihh-=px?GU49!E78>uKwsfRiI+!AEx!ay>^Q zFpxf}1+rbxfqic*;W~|iS@DPY!+`HZcEo4vExI=5QmD>RDX?-jKC^yBN+@4fdC=jvw*_^GvvF1@xc>1ZtV(O<== zvc9#S`I#?oOimxaa)SD>szt;0Jm`^+1o^U|xHWN;%bq_TBO;9nM_<9!>Y$f=;9Pde z=)8TdJyy+$1cMpGHa7Afk?nLh1mv{`3yuBUify6YX2{!u1*wu*Um^yxVd%$m9b&lH z3)wKch6gV)3$YTIm?uKE5$fNmcZ6n}qEp2wuwzg{I^Srf&@$x*#HzLT{m(Db|HUi! zv7^?yb89O;m0oe{@`rzRWJjA;@tgu*^Oe22Ay z9%}Eub{kv{wV|?p&pOcQYu<<~JXYmH$Zh#^6aN?fV?~f0I}fM1+i)12VQb$-sy~c0U4SQYY3PU4wBF8?d}^ zkKQSaN)6_b9M-1L)PdlW)CCiH1wdEtnTE<7aR& zx!Sz(2|R;zz)Mo}a!j~Ou%{LhL3}r>rw#MChy{FQ8I5nkEc!&ANLxR1Hg)ctKz9); zb2|fgD;LN>C-@GQ)F6T^xJ^IyQxGcG?0%WI+4{SQ1b4PG00i92cWruL;p9{Z%_NH2TtS;wNA@?y%_z zzUfu-sxG8vRa{Rk&Xs-z0*Wp~otC!wrJn)yQW8=PGw+PLr?e1mWibH$x^_!2q{vSw zie!8!e$DSyAQx&n@nN(BUbPe^-N}a=jhm1`(HYu|ooh>^^<Y7l5_TpZOhgHndS=j1?T#Q?2^AT@?vYJFwatg{GmMn|@Z$~RCBM4bluZr6Z?Uj(l^hy8V_KBPvSHiLsjA`amzI8@n>xWKi*u`o;ef=Q=fH zLK^Y|HeX8;cG4VtVg|ngCjR*PJ@gQv9=o#8JctTq7N(_g9BEYEa3RTx;!EGZvz31% zMy{hW^?xKddk(EEc(3Xs6v5?h*wttHv^0tph5uBL@~{+ju%v$DJ~w)i6zRPbInJoC zxX#gVn)^aC7n?)k{fj@R@J>`=#jAd@fMN2Xb!<(ojBOHs&zaxx7G zM_%x%ugL}%M@fDkKj*BB=gjSL0^tA?`d$5l_^Za{CF4VfOqU*TFBXEdRWsv@C$}bF zzMHemF)f$R5jqEWmE$9#hE(61jO~p6bq}TbcP$wsrc)iftBYs*Pe}TkC>-#TU+!w^ zzPd#y<$xcd(5_3g?9x9WJ5i3Mq=_FuZ`L|yyw|>DNtmNOO-D%=QLuJa})nF*)&b`Iig04j4lAvN3!IyBDd_^-$=GDP7AKIAVeHN zxYX8!Uhh?k^%T>_ZT-`qqa8afqb!Vt{rh>w^8sLZlv(c3hnM++T3MM{m2VBsv{P1n zHnqPD^e!jzw)B?)fs{<)x*uSe z)7|}`auM?7!MA1gH+`#b&$TcRL5s&uu0e7yT+xaqG8c;v65ikH!R&s1G)6~Py;0225fmr{PGSEhSszjbf0*638c z7}t&a4-$_`O-O3daDHUa@106f-S9bdV~o!Uuw)uX&I4p%OE|$pp-3?%7l7WI#nuDG z%h>VW;Ao8(Zvat*?_5~!*tI1ev*ptrStl@TJin^OXNDv6t->QkeVoP?Vx@X0s@~%G znHgM4#>KmZ@GzfIOzYX~odD#0*9lySOOY++0@|M&WfI#4;K74~rJ|*i-vspAJ5#31 zS1B_c02@uA#W@R^uMuY$=o@kqOm!;z=HYzo#FbO#dt5mDH`1@S-(ir8R9u+GLt(0y3jBem% zg(OX*hi5@#rI1$o!s`0A&Fy z0@wpxfriG6*jCF`cCpi3C@^GrL9)0k9+^KXzDQXZ&t7eK1;mQ!KniI<% zj7MYH>37LFj`%Tb`(_dk*gC}rqq z%h(JRTUz>>LwZ&sBx07ka(r1VdO(U@tl2^g6PN4L%YA$dL?G`$-zKzSrS|hT&X1Ft zp`By@@F>I+?w!JwgT9jYG41>c(o&Ome`i}&5nbQNQFFdAkz;;L*^v75i28X{Uv_w1 zjeMnn<^Bab=?d?QV|TNyfi7}4A9trHdFtj9We1iko!&%aSLq{S0%6F-)Aj9k6$yVl zN4yH456SdSmsZD$Ym@xyyyI$wz9rk?qQ|x5p~Vx@{z<&Wj5NZ__Nidw3|z|?*A4cT*iuL6#;l=Qoe#GEJ8 z*X%9)=uqzCPy>n&=U4Yxd$FkCiMkzj&8*WD>46n*NG|Ou3g4>~zKjR??qe4<@P0V46au!a$dPq_+AJgBY}`FCBbZ`E61 zK;&KGGDorlBE#xX^Oz4GdL?;t`OdsZSw58_ zDZb&UM-&4&u(gC;qpN`->fS$%pFAy}g7va% zxmRG4;v=~G>Cjuo+2gd9&zcDF@^VlDWsMC8cTHmLL+AU#*^ zS#m_x(rDV_jj?xcTwGIqN)P9lhya;5bpVdED2-Fz_Om2TE>HuT*FU0h{eyks^r@$X zJ(^PW)@yPK&1LtuW0bw=FkM#iX~7CdZEN;ky3Q9yde?`&<~@KKt&b2n8HGuwle_V5 zqLzV~^Zk9=UzZK=a>3N7CGWKbWGg+cU4e#V*Y~yMc#)pn#e_`2Zt=1*6l6xt>C>(H zC#-wQ(kWPo^aCun6irzthc2s!@imf%80fDd9bLSOZSii66LB2DKmhE_SyH5)Qk>li z-RL)pC@nZod}qVJ5z>OPyU1aQ2MJ6$8PF&`p?Z zh3S=`uxx4&-G}|#frOCn?rAPK9oyUUwyQ`@B7Od#@Rwz%ibp2xPzbOWHnlw z_^5~0k8g9TcVMJ&x%^VmKNaDJkQI_(iHTA0?)SL8VLQqKKT-ajP(Es^BNOwPSTBvq zR4^JPAE%Jc^k^B3+&Boym-tjnnI2*->8>yw4Yxh!L2@Nl&O>qt&BjQsW_6dJggHI3 zrS+RGY}fZP4y!)r-J{!%u1@qR4$p=EW4c($K6xtLbNk3QPOl|`sZ9p|^h)jUH;Y__ zJSFnX4b&S3eZi-L&n-D2+22e1CpyC4LY;r0lx)SCA=QEK{Vl@q-`cAGV6m{cy6z!E Wm%ELdKrOtCM)mahQ`yRweg6kai@%fr diff --git a/docs/images/graphs/dep_graph_feature_bookmarks.png b/docs/images/graphs/dep_graph_feature_bookmarks.png deleted file mode 100644 index f07fe891e46fe1e4b37a68a7dbef1cb2bcd75d9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48061 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

|GBiAkxGXLWHNBT(DNPbW?`H6BS>jx9JM(ljm7 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 fM<#(-Yf^nqgzJ-Ad&S}3$hu2rD`M{> diff --git a/docs/images/graphs/dep_graph_feature_foryou.png b/docs/images/graphs/dep_graph_feature_foryou.png deleted file mode 100644 index cf483f1b11407cce0ca8374933d170246823d3c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47982 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 SQ{HA27f636p-Fv&p8~{>J8m5N8p6Y6O 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

+#aQH~(p`j5M~N8szX$o{ZaVyvXs*QSFFn}h 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 diff --git a/docs/images/graphs/dep_graph_feature_interests.png b/docs/images/graphs/dep_graph_feature_interests.png deleted file mode 100644 index 09c74f995609a347bb9df579ac06baa03b5c5b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47995 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 I%3tyRUsYz+jsO4v diff --git a/docs/images/graphs/dep_graph_lint.png b/docs/images/graphs/dep_graph_lint.png deleted file mode 100644 index 176d1de5d27a9671a0647be71b4fbc8819dad975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42802 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 diff --git a/docs/images/graphs/dep_graph_sync.png b/docs/images/graphs/dep_graph_sync.png deleted file mode 100644 index 26b79b9bc86e9f0524b67d80e0437368b589d1ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38242 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 From c4642cea61f4a0f0fad339a134da9b4245f97638 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 7 Mar 2024 15:28:31 +0000 Subject: [PATCH 07/53] Add graph for screenshot testing module, minor update to script Change-Id: I611f73d59790bde240756e8016aa721a1783335f --- core/screenshot-testing/README.md | 3 ++ .../dep_graph_core_screenshot_testing.svg | 43 +++++++++++++++++++ generateModuleGraphs.sh | 23 +++++----- 3 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 core/screenshot-testing/README.md create mode 100644 docs/images/graphs/dep_graph_core_screenshot_testing.svg diff --git a/core/screenshot-testing/README.md b/core/screenshot-testing/README.md new file mode 100644 index 000000000..bab2e1a10 --- /dev/null +++ b/core/screenshot-testing/README.md @@ -0,0 +1,3 @@ +# :core:screenshot-testing module + +![Dependency graph](../../docs/images/graphs/dep_graph_core_screenshot_testing.svg) 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..e9fc6d48a --- /dev/null +++ b/docs/images/graphs/dep_graph_core_screenshot_testing.svg @@ -0,0 +1,43 @@ + + + + + + +G + + + +:core:screenshot-testing + +:core:screenshot-testing + + + +:core:common + +:core:common + + + +:core:screenshot-testing->:core:common + + + + + +:core:designsystem + +:core:designsystem + + + +:core:screenshot-testing->:core:designsystem + + + + + diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index c759fea30..f69339502 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -14,12 +14,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # - -# Script to generate dependency graphs for each of the modules -# Usage: generateModuleGraphs.sh --exclude-module :benchmarks --exclude-module :lint - -# Echo each command so the caller knows what's going on -set -e +# +# Script to generate dependency graphs for each of the modules. The --exclude-module parameter can +# be used to exclude modules which are not part of the root dependency graph (and which, if included +# would cause the script to fail. +# +# Usage: generateModuleGraphs.sh --exclude-module :benchmarks --exclude-module :lint --exclude-module :ui-test-hilt-manifest # Check if the dot command is available if ! command -v dot &> /dev/null @@ -47,14 +47,17 @@ while [[ $# -gt 0 ]]; do esac done -# Function to check and create README.md +# Get the module paths +module_paths=$(./gradlew -q printModulePaths --no-configuration-cache) + +# Function to check and create a README.md for modules which don't have one. check_and_create_readme() { local module_path="$1" local file_name="$2" local readme_path="${module_path:1}" # Remove leading colon readme_path=$(echo "$readme_path" | sed 's/:/\//g') # Replace colons with slashes using sed - readme_path="${readme_path}/README.md" + readme_path="${readme_path}/README.md" #Append the filename # Check if README.md exists and create it if not if [[ ! -f "$readme_path" ]]; then @@ -67,9 +70,6 @@ check_and_create_readme() { fi } -# Get the module paths -module_paths=$(./gradlew -q printModulePaths --no-configuration-cache) - # Loop through each module path echo "$module_paths" | while read -r module_path; do # Check if the module is in the excluded list @@ -83,6 +83,7 @@ echo "$module_paths" | while read -r module_path; do # Generate the .gv file in a temporary location # "docs/images/graphs/${file_name}.svg" # Remove the temporary .gv file From 19f6f9e09ac387a8456ff59102b9666a7a7ac9e3 Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Thu, 7 Mar 2024 13:22:50 -0800 Subject: [PATCH 08/53] 2 pane support in Interests screen (#1234) * Add dependency on material3 adaptive Change-Id: Ic49934112a4bdbf15a68c694fbc6b0f23de960a6 * Add InterestsListDetailScreen composable Change-Id: I27e1f6d2e0eeac781baf2b671fa51a864ea5a971 * Store selectedTopicId in InterestsViewModel Change-Id: Id93704335686f171fbf80bdb54865d0f32dc36ce * Pass detail pane composable down Change-Id: I82752d8cfbb3519395f37748fb5f64b769c0c293 * Navigate to initial topic if provided Change-Id: I8998a55a29cdaf90577fa730d55c4ac2f54d6e5b * Lift LDPS up to app module Change-Id: Ibc6e8e598cd0cb62f804f11b2e48d8ae3a81df85 * Fix some navigation behavior Change-Id: Ib6c16aff692b9ce997747a30f2863303cc82fd8b * Navigate to initial topic if provided Change-Id: Iaafe4f876655d51243d7b99be985e9440fe2d4ed * Remove dependency in interests feature module Change-Id: Id517c95e11f93e1c7e17d749a7af0cfdf6085a1f * Hide back arrow when the topics list is visible Change-Id: I8901c3f79b11d35568f0ae779f97fab90e574aa8 * Update interests tests Change-Id: Ie5daf55985fdb53570397cb652abe31bad78f5cd * Highlight selected topic when displaying 2 panes Change-Id: Ifef9fb599f828f58390374b11eacc8be6c280415 * update dependency baselines Change-Id: I90dc21df3337865f4c5368634d3d45fcb0eccc00 * run spotless apply Change-Id: Ib5fb1b7fc26a62bd5e271c2a3721f1c13173f7f8 * Convert isListPaneHidden to isListPaneVisible Change-Id: I6e54f710df7db5ed6f3ec1cb284bc29f2763a657 * Set semantics for selected state Change-Id: I31f27d5036d07c9607909c09ac52a72391f899ca * Use scaffold roles when determining visibility Change-Id: Ib5fe236f182a5eeab20b61692a1cd53c17b68648 * Update multipleBackStackInterests test Change-Id: I1e372f7989817151a6765205291b13b561187fa8 --- .../dependencies/releaseRuntimeClasspath.txt | 66 ++++----- app/build.gradle.kts | 10 +- .../prodReleaseRuntimeClasspath.txt | 71 ++++----- .../apps/nowinandroid/ui/NavigationTest.kt | 10 +- .../nowinandroid/navigation/NiaNavHost.kt | 21 +-- .../apps/nowinandroid/ui/NiaAppState.kt | 4 +- .../interests2pane/Interests2PaneViewModel.kt | 35 +++++ .../InterestsListDetailScreen.kt | 136 ++++++++++++++++++ feature/interests/build.gradle.kts | 2 +- .../interests/InterestsScreenTest.kt | 5 +- .../feature/interests/InterestsItem.kt | 30 +++- .../feature/interests/InterestsScreen.kt | 15 +- .../feature/interests/InterestsViewModel.kt | 29 ++-- .../feature/interests/TabContent.kt | 4 + .../navigation/InterestsNavigation.kt | 37 +++-- .../interests/InterestsViewModelTest.kt | 13 +- .../feature/topic/TopicScreenTest.kt | 4 + .../nowinandroid/feature/topic/TopicScreen.kt | 30 ++-- .../topic/navigation/TopicNavigation.kt | 16 ++- gradle/libs.versions.toml | 4 +- 20 files changed, 407 insertions(+), 135 deletions(-) create mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt create mode 100644 app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index 5a619eb1b..ca4bf99a3 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -12,41 +12,41 @@ androidx.browser:browser:1.6.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 -androidx.compose.animation:animation-android:1.6.1 -androidx.compose.animation:animation-core-android:1.6.1 -androidx.compose.animation:animation-core:1.6.1 -androidx.compose.animation:animation:1.6.1 -androidx.compose.foundation:foundation-android:1.6.1 -androidx.compose.foundation:foundation-layout-android:1.6.1 -androidx.compose.foundation:foundation-layout:1.6.1 -androidx.compose.foundation:foundation:1.6.1 +androidx.compose.animation:animation-android:1.6.2 +androidx.compose.animation:animation-core-android:1.6.2 +androidx.compose.animation:animation-core:1.6.2 +androidx.compose.animation:animation:1.6.2 +androidx.compose.foundation:foundation-android:1.6.2 +androidx.compose.foundation:foundation-layout-android:1.6.2 +androidx.compose.foundation:foundation-layout:1.6.2 +androidx.compose.foundation:foundation:1.6.2 androidx.compose.material3:material3-android:1.2.0 androidx.compose.material3:material3:1.2.0 -androidx.compose.material:material-icons-core-android:1.6.1 -androidx.compose.material:material-icons-core:1.6.1 -androidx.compose.material:material-icons-extended-android:1.6.1 -androidx.compose.material:material-icons-extended:1.6.1 -androidx.compose.material:material-ripple-android:1.6.1 -androidx.compose.material:material-ripple:1.6.1 -androidx.compose.runtime:runtime-android:1.6.1 -androidx.compose.runtime:runtime-saveable-android:1.6.1 -androidx.compose.runtime:runtime-saveable:1.6.1 -androidx.compose.runtime:runtime:1.6.1 -androidx.compose.ui:ui-android:1.6.1 -androidx.compose.ui:ui-geometry-android:1.6.1 -androidx.compose.ui:ui-geometry:1.6.1 -androidx.compose.ui:ui-graphics-android:1.6.1 -androidx.compose.ui:ui-graphics:1.6.1 -androidx.compose.ui:ui-text-android:1.6.1 -androidx.compose.ui:ui-text:1.6.1 -androidx.compose.ui:ui-tooling-preview-android:1.6.1 -androidx.compose.ui:ui-tooling-preview:1.6.1 -androidx.compose.ui:ui-unit-android:1.6.1 -androidx.compose.ui:ui-unit:1.6.1 -androidx.compose.ui:ui-util-android:1.6.1 -androidx.compose.ui:ui-util:1.6.1 -androidx.compose.ui:ui:1.6.1 -androidx.compose:compose-bom:2024.02.00 +androidx.compose.material:material-icons-core-android:1.6.2 +androidx.compose.material:material-icons-core:1.6.2 +androidx.compose.material:material-icons-extended-android:1.6.2 +androidx.compose.material:material-icons-extended:1.6.2 +androidx.compose.material:material-ripple-android:1.6.2 +androidx.compose.material:material-ripple:1.6.2 +androidx.compose.runtime:runtime-android:1.6.2 +androidx.compose.runtime:runtime-saveable-android:1.6.2 +androidx.compose.runtime:runtime-saveable:1.6.2 +androidx.compose.runtime:runtime:1.6.2 +androidx.compose.ui:ui-android:1.6.2 +androidx.compose.ui:ui-geometry-android:1.6.2 +androidx.compose.ui:ui-geometry:1.6.2 +androidx.compose.ui:ui-graphics-android:1.6.2 +androidx.compose.ui:ui-graphics:1.6.2 +androidx.compose.ui:ui-text-android:1.6.2 +androidx.compose.ui:ui-text:1.6.2 +androidx.compose.ui:ui-tooling-preview-android:1.6.2 +androidx.compose.ui:ui-tooling-preview:1.6.2 +androidx.compose.ui:ui-unit-android:1.6.2 +androidx.compose.ui:ui-unit:1.6.2 +androidx.compose.ui:ui-util-android:1.6.2 +androidx.compose.ui:ui-util:1.6.2 +androidx.compose.ui:ui:1.6.2 +androidx.compose:compose-bom:2024.02.01 androidx.concurrent:concurrent-futures:1.1.0 androidx.core:core-ktx:1.12.0 androidx.core:core:1.12.0 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a7cd78f75..12ac3ded3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,17 +89,21 @@ dependencies { implementation(projects.sync.work) implementation(libs.androidx.activity.compose) + implementation(libs.androidx.compose.material3.adaptive) + 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.tracing.ktx) + implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.lifecycle.runtimeCompose) - implementation(libs.androidx.compose.runtime.tracing) - implementation(libs.androidx.compose.material3.windowSizeClass) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.profileinstaller) + implementation(libs.androidx.tracing.ktx) implementation(libs.kotlinx.coroutines.guava) implementation(libs.coil.kt) + ksp(libs.hilt.compiler) + debugImplementation(libs.androidx.compose.ui.testManifest) debugImplementation(projects.uiTestHiltManifest) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index f354c6fee..b9da05522 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -13,44 +13,46 @@ androidx.browser:browser:1.6.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 -androidx.compose.animation:animation-android:1.6.1 -androidx.compose.animation:animation-core-android:1.6.1 -androidx.compose.animation:animation-core:1.6.1 -androidx.compose.animation:animation:1.6.1 -androidx.compose.foundation:foundation-android:1.6.1 -androidx.compose.foundation:foundation-layout-android:1.6.1 -androidx.compose.foundation:foundation-layout:1.6.1 -androidx.compose.foundation:foundation:1.6.1 +androidx.compose.animation:animation-android:1.6.2 +androidx.compose.animation:animation-core-android:1.6.2 +androidx.compose.animation:animation-core:1.6.2 +androidx.compose.animation:animation:1.6.2 +androidx.compose.foundation:foundation-android:1.6.2 +androidx.compose.foundation:foundation-layout-android:1.6.2 +androidx.compose.foundation:foundation-layout:1.6.2 +androidx.compose.foundation:foundation:1.6.2 +androidx.compose.material3:material3-adaptive-android:1.0.0-alpha06 +androidx.compose.material3:material3-adaptive:1.0.0-alpha06 androidx.compose.material3:material3-android:1.2.0 androidx.compose.material3:material3-window-size-class-android:1.2.0 androidx.compose.material3:material3-window-size-class:1.2.0 androidx.compose.material3:material3:1.2.0 -androidx.compose.material:material-icons-core-android:1.6.1 -androidx.compose.material:material-icons-core:1.6.1 -androidx.compose.material:material-icons-extended-android:1.6.1 -androidx.compose.material:material-icons-extended:1.6.1 -androidx.compose.material:material-ripple-android:1.6.1 -androidx.compose.material:material-ripple:1.6.1 -androidx.compose.runtime:runtime-android:1.6.1 -androidx.compose.runtime:runtime-saveable-android:1.6.1 -androidx.compose.runtime:runtime-saveable:1.6.1 +androidx.compose.material:material-icons-core-android:1.6.2 +androidx.compose.material:material-icons-core:1.6.2 +androidx.compose.material:material-icons-extended-android:1.6.2 +androidx.compose.material:material-icons-extended:1.6.2 +androidx.compose.material:material-ripple-android:1.6.2 +androidx.compose.material:material-ripple:1.6.2 +androidx.compose.runtime:runtime-android:1.6.2 +androidx.compose.runtime:runtime-saveable-android:1.6.2 +androidx.compose.runtime:runtime-saveable:1.6.2 androidx.compose.runtime:runtime-tracing:1.0.0-beta01 -androidx.compose.runtime:runtime:1.6.1 -androidx.compose.ui:ui-android:1.6.1 -androidx.compose.ui:ui-geometry-android:1.6.1 -androidx.compose.ui:ui-geometry:1.6.1 -androidx.compose.ui:ui-graphics-android:1.6.1 -androidx.compose.ui:ui-graphics:1.6.1 -androidx.compose.ui:ui-text-android:1.6.1 -androidx.compose.ui:ui-text:1.6.1 -androidx.compose.ui:ui-tooling-preview-android:1.6.1 -androidx.compose.ui:ui-tooling-preview:1.6.1 -androidx.compose.ui:ui-unit-android:1.6.1 -androidx.compose.ui:ui-unit:1.6.1 -androidx.compose.ui:ui-util-android:1.6.1 -androidx.compose.ui:ui-util:1.6.1 -androidx.compose.ui:ui:1.6.1 -androidx.compose:compose-bom:2024.02.00 +androidx.compose.runtime:runtime:1.6.2 +androidx.compose.ui:ui-android:1.6.2 +androidx.compose.ui:ui-geometry-android:1.6.2 +androidx.compose.ui:ui-geometry:1.6.2 +androidx.compose.ui:ui-graphics-android:1.6.2 +androidx.compose.ui:ui-graphics:1.6.2 +androidx.compose.ui:ui-text-android:1.6.2 +androidx.compose.ui:ui-text:1.6.2 +androidx.compose.ui:ui-tooling-preview-android:1.6.2 +androidx.compose.ui:ui-tooling-preview:1.6.2 +androidx.compose.ui:ui-unit-android:1.6.2 +androidx.compose.ui:ui-unit:1.6.2 +androidx.compose.ui:ui-util-android:1.6.2 +androidx.compose.ui:ui-util:1.6.2 +androidx.compose.ui:ui:1.6.2 +androidx.compose:compose-bom:2024.02.01 androidx.concurrent:concurrent-futures:1.1.0 androidx.core:core-ktx:1.12.0 androidx.core:core-splashscreen:1.0.1 @@ -116,7 +118,8 @@ androidx.vectordrawable:vectordrawable-animated:1.1.0 androidx.vectordrawable:vectordrawable:1.1.0 androidx.versionedparcelable:versionedparcelable:1.1.1 androidx.viewpager:viewpager:1.0.0 -androidx.window:window:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window:1.2.0 androidx.work:work-runtime-ktx:2.9.0 androidx.work:work-runtime:2.9.0 com.caverock:androidsvg-aar:1.4 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 13f11c3b9..c9cc64120 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 @@ -274,10 +274,10 @@ class NavigationTest { // Select the last topic val topic = runBlocking { - topicsRepository.getTopics().first().sortedBy(Topic::name).last().name + topicsRepository.getTopics().first().sortedBy(Topic::name).last() } - onNodeWithTag("interests:topics").performScrollToNode(hasText(topic)) - onNodeWithText(topic).performClick() + onNodeWithTag("interests:topics").performScrollToNode(hasText(topic.name)) + onNodeWithText(topic.name).performClick() // Switch tab onNodeWithText(forYou).performClick() @@ -285,8 +285,8 @@ class NavigationTest { // Come back to Interests onNodeWithText(interests).performClick() - // Verify we're not in the list of interests - onNodeWithTag("interests:topics").assertDoesNotExist() + // Verify the topic is still shown + onNodeWithTag("topic:${topic.id}").assertExists() } } } 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 6167b0b59..39bc03de7 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 @@ -22,12 +22,11 @@ import androidx.navigation.compose.NavHost import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.bookmarksScreen import com.google.samples.apps.nowinandroid.feature.foryou.navigation.FOR_YOU_ROUTE import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouScreen -import com.google.samples.apps.nowinandroid.feature.interests.navigation.interestsGraph +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.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.ui.NiaAppState +import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetailScreen /** * Top-level navigation graph. Navigation is organized as explained at @@ -49,24 +48,16 @@ fun NiaNavHost( startDestination = startDestination, modifier = modifier, ) { - forYouScreen(onTopicClick = navController::navigateToTopic) + forYouScreen(onTopicClick = navController::navigateToInterests) bookmarksScreen( - onTopicClick = navController::navigateToTopic, + onTopicClick = navController::navigateToInterests, onShowSnackbar = onShowSnackbar, ) searchScreen( onBackClick = navController::popBackStack, onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, - onTopicClick = navController::navigateToTopic, - ) - interestsGraph( - onTopicClick = navController::navigateToTopic, - nestedGraphs = { - topicScreen( - onBackClick = navController::popBackStack, - onTopicClick = navController::navigateToTopic, - ) - }, + onTopicClick = navController::navigateToInterests, ) + interestsListDetailScreen() } } 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 d423adfbf..b653d8910 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 @@ -39,7 +39,7 @@ import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.navigat import com.google.samples.apps.nowinandroid.feature.foryou.navigation.FOR_YOU_ROUTE import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou import com.google.samples.apps.nowinandroid.feature.interests.navigation.INTERESTS_ROUTE -import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterestsGraph +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.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS @@ -173,7 +173,7 @@ class NiaAppState( when (topLevelDestination) { FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) - INTERESTS -> navController.navigateToInterestsGraph(topLevelNavOptions) + INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) } } } 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 new file mode 100644 index 000000000..d618c2d47 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt @@ -0,0 +1,35 @@ +/* + * 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 com.google.samples.apps.nowinandroid.feature.interests.navigation.TOPIC_ID_ARG +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.StateFlow +import javax.inject.Inject + +@HiltViewModel +class Interests2PaneViewModel @Inject constructor( + private val savedStateHandle: SavedStateHandle, +) : ViewModel() { + val selectedTopicId: StateFlow = savedStateHandle.getStateFlow(TOPIC_ID_ARG, null) + + fun onTopicClick(topicId: String?) { + savedStateHandle[TOPIC_ID_ARG] = 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 new file mode 100644 index 000000000..98327923f --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt @@ -0,0 +1,136 @@ +/* + * 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.foundation.layout.Box +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.ListDetailPaneScaffold +import androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole +import androidx.compose.material3.adaptive.PaneAdaptedValue +import androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator +import androidx.compose.material3.adaptive.rememberListDetailPaneScaffoldNavigator +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavType +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import androidx.navigation.navArgument +import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.interests.navigation.INTERESTS_ROUTE +import com.google.samples.apps.nowinandroid.feature.interests.navigation.TOPIC_ID_ARG +import com.google.samples.apps.nowinandroid.feature.topic.navigation.TOPIC_ROUTE +import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic +import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen + +private const val DETAIL_PANE_NAVHOST_ROUTE = "detail_pane_route" + +fun NavGraphBuilder.interestsListDetailScreen() { + composable( + route = INTERESTS_ROUTE, + arguments = listOf( + navArgument(TOPIC_ID_ARG) { + type = NavType.StringType + defaultValue = null + nullable = true + }, + ), + ) { + InterestsListDetailScreen() + } +} + +@Composable +internal fun InterestsListDetailScreen( + viewModel: Interests2PaneViewModel = hiltViewModel(), +) { + val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() + InterestsListDetailScreen( + selectedTopicId = selectedTopicId, + onTopicClick = viewModel::onTopicClick, + ) +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@Composable +internal fun InterestsListDetailScreen( + selectedTopicId: String?, + onTopicClick: (String) -> Unit, +) { + val listDetailNavigator = rememberListDetailPaneScaffoldNavigator() + BackHandler(listDetailNavigator.canNavigateBack()) { + listDetailNavigator.navigateBack() + } + + val nestedNavController = rememberNavController() + + fun onTopicClickShowDetailPane(topicId: String) { + onTopicClick(topicId) + nestedNavController.navigateToTopic(topicId) { + popUpTo(DETAIL_PANE_NAVHOST_ROUTE) + } + listDetailNavigator.navigateTo(ListDetailPaneScaffoldRole.Detail) + } + + ListDetailPaneScaffold( + scaffoldState = listDetailNavigator.scaffoldState, + listPane = { + InterestsRoute( + onTopicClick = ::onTopicClickShowDetailPane, + highlightSelectedTopic = listDetailNavigator.isDetailPaneVisible(), + ) + }, + detailPane = { + NavHost( + navController = nestedNavController, + startDestination = TOPIC_ROUTE, + route = DETAIL_PANE_NAVHOST_ROUTE, + ) { + topicScreen( + showBackButton = !listDetailNavigator.isListPaneVisible(), + onBackClick = listDetailNavigator::navigateBack, + onTopicClick = ::onTopicClickShowDetailPane, + ) + composable(route = TOPIC_ROUTE) { + Box { + Text("Placeholder") + } + } + } + }, + ) + LaunchedEffect(Unit) { + if (selectedTopicId != null) { + // Initial topic ID was provided when navigating to Interests, so show its details. + onTopicClickShowDetailPane(selectedTopicId) + } + } +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isListPaneVisible(): Boolean = + scaffoldState.scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isDetailPaneVisible(): Boolean = + scaffoldState.scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded diff --git a/feature/interests/build.gradle.kts b/feature/interests/build.gradle.kts index f0bca9729..ee6aaf122 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/build.gradle.kts @@ -30,4 +30,4 @@ dependencies { testImplementation(projects.core.testing) androidTestImplementation(projects.core.testing) -} \ No newline at end of file +} diff --git a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt index 4f9cbcc04..1584662b8 100644 --- a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt @@ -74,7 +74,10 @@ class InterestsScreenTest { fun interestsWithTopics_whenTopicsFollowed_showFollowedAndUnfollowedTopicsWithInfo() { composeTestRule.setContent { InterestsScreen( - uiState = InterestsUiState.Interests(topics = followableTopicTestData), + uiState = InterestsUiState.Interests( + topics = followableTopicTestData, + selectedTopicId = null, + ), ) } diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt index b055a3a14..6ac0340ee 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt @@ -30,6 +30,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.selected import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -49,6 +50,7 @@ fun InterestsItem( modifier: Modifier = Modifier, iconModifier: Modifier = Modifier, description: String = "", + isSelected: Boolean = false, ) { ListItem( leadingContent = { @@ -83,10 +85,16 @@ fun InterestsItem( ) }, colors = ListItemDefaults.colors( - containerColor = Color.Transparent, + containerColor = if (isSelected) { + MaterialTheme.colorScheme.surfaceVariant + } else { + Color.Transparent + }, ), modifier = modifier - .semantics(mergeDescendants = true) { /* no-op */ } + .semantics(mergeDescendants = true) { + selected = isSelected + } .clickable(enabled = true, onClick = onClick), ) } @@ -179,3 +187,21 @@ private fun InterestsCardWithEmptyDescriptionPreview() { } } } + +@Preview +@Composable +private fun InterestsCardSelectedPreview() { + NiaTheme { + Surface { + InterestsItem( + name = "Compose", + description = "", + following = true, + topicImageUrl = "", + onClick = { }, + onFollowButtonClick = { }, + isSelected = true, + ) + } + } +} diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt index 5944b8631..468550878 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt @@ -35,9 +35,10 @@ import com.google.samples.apps.nowinandroid.core.ui.FollowableTopicPreviewParame import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent @Composable -internal fun InterestsRoute( +fun InterestsRoute( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, + highlightSelectedTopic: Boolean = false, viewModel: InterestsViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -45,7 +46,11 @@ internal fun InterestsRoute( InterestsScreen( uiState = uiState, followTopic = viewModel::followTopic, - onTopicClick = onTopicClick, + onTopicClick = { + viewModel.onTopicClick(it) + onTopicClick(it) + }, + highlightSelectedTopic = highlightSelectedTopic, modifier = modifier, ) } @@ -56,6 +61,7 @@ internal fun InterestsScreen( followTopic: (String, Boolean) -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, + highlightSelectedTopic: Boolean = false, ) { Column( modifier = modifier, @@ -67,13 +73,17 @@ internal fun InterestsScreen( modifier = modifier, contentDesc = stringResource(id = R.string.feature_interests_loading), ) + is InterestsUiState.Interests -> TopicsTabContent( topics = uiState.topics, onTopicClick = onTopicClick, onFollowButtonClick = followTopic, + selectedTopicId = uiState.selectedTopicId, + highlightSelectedTopic = highlightSelectedTopic, modifier = modifier, ) + is InterestsUiState.Empty -> InterestsEmptyScreen() } } @@ -95,6 +105,7 @@ fun InterestsScreenPopulated( NiaBackground { InterestsScreen( uiState = InterestsUiState.Interests( + selectedTopicId = null, topics = followableTopics, ), followTopic = { _, _ -> }, diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt index 6d905a6d5..b369ac5ab 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt @@ -16,46 +16,57 @@ package com.google.samples.apps.nowinandroid.feature.interests +import androidx.lifecycle.SavedStateHandle 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.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.TOPIC_ID_ARG import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class InterestsViewModel @Inject constructor( + private val savedStateHandle: SavedStateHandle, val userDataRepository: UserDataRepository, getFollowableTopics: GetFollowableTopicsUseCase, ) : ViewModel() { - val uiState: StateFlow = - getFollowableTopics(sortBy = TopicSortField.NAME).map( - InterestsUiState::Interests, - ).stateIn( - scope = viewModelScope, - started = SharingStarted.WhileSubscribed(5_000), - initialValue = InterestsUiState.Loading, - ) + val selectedTopicId: StateFlow = savedStateHandle.getStateFlow(TOPIC_ID_ARG, null) + + val uiState: StateFlow = combine( + selectedTopicId, + getFollowableTopics(sortBy = TopicSortField.NAME), + InterestsUiState::Interests, + ).stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5_000), + initialValue = InterestsUiState.Loading, + ) fun followTopic(followedTopicId: String, followed: Boolean) { viewModelScope.launch { userDataRepository.setTopicIdFollowed(followedTopicId, followed) } } + + fun onTopicClick(topicId: String?) { + savedStateHandle[TOPIC_ID_ARG] = topicId + } } sealed interface InterestsUiState { data object Loading : InterestsUiState data class Interests( + val selectedTopicId: String?, val topics: List, ) : InterestsUiState diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index d865f5e1a..4a48645c5 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -47,6 +47,8 @@ fun TopicsTabContent( onFollowButtonClick: (String, Boolean) -> Unit, modifier: Modifier = Modifier, withBottomSpacer: Boolean = true, + selectedTopicId: String? = null, + highlightSelectedTopic: Boolean = false, ) { Box( modifier = modifier @@ -63,6 +65,7 @@ fun TopicsTabContent( topics.forEach { followableTopic -> val topicId = followableTopic.topic.id item(key = topicId) { + val isSelected = highlightSelectedTopic && topicId == selectedTopicId InterestsItem( name = followableTopic.topic.name, following = followableTopic.isFollowed, @@ -70,6 +73,7 @@ fun TopicsTabContent( topicImageUrl = followableTopic.topic.imageUrl, onClick = { onTopicClick(topicId) }, onFollowButtonClick = { onFollowButtonClick(topicId, it) }, + isSelected = isSelected, ) } } diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt index 2ad7c560b..8a0f2d130 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt @@ -19,26 +19,37 @@ package com.google.samples.apps.nowinandroid.feature.interests.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions +import androidx.navigation.NavType import androidx.navigation.compose.composable -import androidx.navigation.navigation +import androidx.navigation.navArgument import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute -private const val INTERESTS_GRAPH_ROUTE_PATTERN = "interests_graph" -const val INTERESTS_ROUTE = "interests_route" +const val TOPIC_ID_ARG = "topicId" +const val INTERESTS_ROUTE_BASE = "interests_route" +const val INTERESTS_ROUTE = "$INTERESTS_ROUTE_BASE?$TOPIC_ID_ARG={$TOPIC_ID_ARG}" -fun NavController.navigateToInterestsGraph(navOptions: NavOptions) = navigate(INTERESTS_GRAPH_ROUTE_PATTERN, navOptions) +fun NavController.navigateToInterests(topicId: String? = null, navOptions: NavOptions? = null) { + val route = if (topicId != null) { + "${INTERESTS_ROUTE_BASE}?${TOPIC_ID_ARG}=$topicId" + } else { + INTERESTS_ROUTE_BASE + } + navigate(route, navOptions) +} -fun NavGraphBuilder.interestsGraph( +fun NavGraphBuilder.interestsScreen( onTopicClick: (String) -> Unit, - nestedGraphs: NavGraphBuilder.() -> Unit, ) { - navigation( - route = INTERESTS_GRAPH_ROUTE_PATTERN, - startDestination = INTERESTS_ROUTE, + composable( + route = INTERESTS_ROUTE, + arguments = listOf( + navArgument(TOPIC_ID_ARG) { + defaultValue = null + nullable = true + type = NavType.StringType + }, + ), ) { - composable(route = INTERESTS_ROUTE) { - InterestsRoute(onTopicClick) - } - nestedGraphs() + InterestsRoute(onTopicClick = onTopicClick) } } diff --git a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt index c46cb7780..63d3c49b7 100644 --- a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.interests +import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.Topic @@ -24,6 +25,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.feature.interests.InterestsUiState import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel +import com.google.samples.apps.nowinandroid.feature.interests.navigation.TOPIC_ID_ARG import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -53,6 +55,7 @@ class InterestsViewModelTest { @Before fun setup() { viewModel = InterestsViewModel( + savedStateHandle = SavedStateHandle(mapOf(TOPIC_ID_ARG to testInputTopics[0].topic.id)), userDataRepository = userDataRepository, getFollowableTopics = getFollowableTopicsUseCase, ) @@ -93,7 +96,10 @@ class InterestsViewModelTest { ) assertEquals( - InterestsUiState.Interests(topics = testOutputTopics), + InterestsUiState.Interests( + topics = testOutputTopics, + selectedTopicId = testInputTopics[0].topic.id, + ), viewModel.uiState.value, ) @@ -123,7 +129,10 @@ class InterestsViewModelTest { ) assertEquals( - InterestsUiState.Interests(topics = testInputTopics), + InterestsUiState.Interests( + topics = testInputTopics, + selectedTopicId = testInputTopics[0].topic.id, + ), viewModel.uiState.value, ) diff --git a/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt b/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt index b64e397ea..2b87baf9e 100644 --- a/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt +++ b/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt @@ -55,6 +55,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -75,6 +76,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Success(testTopic), newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -100,6 +102,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Success(userNewsResourcesTestData), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -123,6 +126,7 @@ class TopicScreenTest { newsUiState = NewsUiState.Success( userNewsResourcesTestData, ), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt index 3f3862c2a..4402cecd4 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsTopHeight @@ -44,6 +45,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter @@ -70,6 +72,7 @@ import com.google.samples.apps.nowinandroid.feature.topic.R.string @Composable internal fun TopicRoute( + showBackButton: Boolean, onBackClick: () -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, @@ -82,7 +85,8 @@ internal fun TopicRoute( TopicScreen( topicUiState = topicUiState, newsUiState = newsUiState, - modifier = modifier, + modifier = modifier.testTag("topic:${viewModel.topicId}"), + showBackButton = showBackButton, onBackClick = onBackClick, onFollowClick = viewModel::followTopicToggle, onBookmarkChanged = viewModel::bookmarkNews, @@ -96,6 +100,7 @@ internal fun TopicRoute( internal fun TopicScreen( topicUiState: TopicUiState, newsUiState: NewsUiState, + showBackButton: Boolean, onBackClick: () -> Unit, onFollowClick: (Boolean) -> Unit, onTopicClick: (String) -> Unit, @@ -127,6 +132,7 @@ internal fun TopicScreen( is TopicUiState.Success -> { item { TopicToolbar( + showBackButton = showBackButton, onBackClick = onBackClick, onFollowClick = onFollowClick, uiState = topicUiState.followableTopic, @@ -270,6 +276,7 @@ private fun TopicBodyPreview() { private fun TopicToolbar( uiState: FollowableTopic, modifier: Modifier = Modifier, + showBackButton: Boolean = true, onBackClick: () -> Unit = {}, onFollowClick: (Boolean) -> Unit = {}, ) { @@ -280,13 +287,18 @@ private fun TopicToolbar( .fillMaxWidth() .padding(bottom = 32.dp), ) { - IconButton(onClick = { onBackClick() }) { - Icon( - imageVector = NiaIcons.ArrowBack, - contentDescription = stringResource( - id = com.google.samples.apps.nowinandroid.core.ui.R.string.core_ui_back, - ), - ) + if (showBackButton) { + IconButton(onClick = { onBackClick() }) { + Icon( + imageVector = NiaIcons.ArrowBack, + contentDescription = stringResource( + id = com.google.samples.apps.nowinandroid.core.ui.R.string.core_ui_back, + ), + ) + } + } else { + // Keeps the NiaFilterChip aligned to the end of the Row. + Spacer(modifier = Modifier.width(1.dp)) } val selected = uiState.isFollowed NiaFilterChip( @@ -314,6 +326,7 @@ fun TopicScreenPopulated( TopicScreen( topicUiState = TopicUiState.Success(userNewsResources[0].followableTopics[0]), newsUiState = NewsUiState.Success(userNewsResources), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, @@ -332,6 +345,7 @@ fun TopicScreenLoading() { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt index bba46c5ab..41804b634 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt @@ -20,6 +20,7 @@ import androidx.annotation.VisibleForTesting import androidx.lifecycle.SavedStateHandle import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder import androidx.navigation.NavType import androidx.navigation.compose.composable import androidx.navigation.navArgument @@ -32,20 +33,23 @@ private val URL_CHARACTER_ENCODING = UTF_8.name() @VisibleForTesting internal const val TOPIC_ID_ARG = "topicId" +const val TOPIC_ROUTE = "topic_route" internal class TopicArgs(val topicId: String) { constructor(savedStateHandle: SavedStateHandle) : this(URLDecoder.decode(checkNotNull(savedStateHandle[TOPIC_ID_ARG]), URL_CHARACTER_ENCODING)) } -fun NavController.navigateToTopic(topicId: String) { +fun NavController.navigateToTopic(topicId: String, navOptions: NavOptionsBuilder.() -> Unit = {}) { val encodedId = URLEncoder.encode(topicId, URL_CHARACTER_ENCODING) - navigate("topic_route/$encodedId") { - launchSingleTop = true + val newRoute = "$TOPIC_ROUTE/$encodedId" + navigate(newRoute) { + navOptions() } } fun NavGraphBuilder.topicScreen( + showBackButton: Boolean, onBackClick: () -> Unit, onTopicClick: (String) -> Unit, ) { @@ -55,6 +59,10 @@ fun NavGraphBuilder.topicScreen( navArgument(TOPIC_ID_ARG) { type = NavType.StringType }, ), ) { - TopicRoute(onBackClick = onBackClick, onTopicClick = onTopicClick) + TopicRoute( + showBackButton = showBackButton, + onBackClick = onBackClick, + onTopicClick = onTopicClick, + ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b1318c7a..481494a48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,8 +7,9 @@ androidTools = "31.3.0" androidxActivity = "1.8.0" androidxAppCompat = "1.6.1" androidxBrowser = "1.6.0" -androidxComposeBom = "2024.02.00" +androidxComposeBom = "2024.02.01" androidxComposeCompiler = "1.5.8" +androidxComposeMaterial3Adaptive = "1.0.0-alpha06" androidxComposeRuntimeTracing = "1.0.0-beta01" androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" @@ -70,6 +71,7 @@ androidx-compose-foundation = { group = "androidx.compose.foundation", name = "f androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" } androidx-compose-material-iconsExtended = { group = "androidx.compose.material", name = "material-icons-extended" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-compose-material3-adaptive = { group = "androidx.compose.material3", name = "material3-adaptive", version.ref = "androidxComposeMaterial3Adaptive" } 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" } From 8cfd42453cef95edc378b31b28e344522596f25c Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 8 Mar 2024 15:47:27 +0900 Subject: [PATCH 09/53] Rename test function name - Given-when-then format. Change-Id: I3305c5a7cc5a0f41be31292534a086034f642404 --- .../com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index 732e527bb..d75e6f51e 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -167,7 +167,7 @@ class NiaAppStateTest { } @Test - fun stateIsOfflineWhenNetworkMonitorIsOffline() = runTest(UnconfinedTestDispatcher()) { + fun niaAppState_whenNetworkMonitorIsOffline_StateIsOffline() = runTest(UnconfinedTestDispatcher()) { composeTestRule.setContent { state = NiaAppState( navController = NavHostController(LocalContext.current), From e017b84a1292fb761cbf3ae870422706dbd30491 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Fri, 8 Mar 2024 15:50:53 +0900 Subject: [PATCH 10/53] Remove explicit type argument. Change-Id: Id02756d780309af6638698de856b563d9e775cc3 --- .../com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index d75e6f51e..7c9dfcc7a 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -214,7 +214,7 @@ class NiaAppStateTest { @Composable private fun rememberTestNavController(): TestNavHostController { val context = LocalContext.current - return remember { + return remember { TestNavHostController(context).apply { navigatorProvider.addNavigator(ComposeNavigator()) graph = createGraph(startDestination = "a") { From aa15e65a7764348ddf745e013308727c25eb78b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Mlynari=C4=8D?= Date: Fri, 8 Mar 2024 10:30:32 +0100 Subject: [PATCH 11/53] Fix search flickering Change-Id: I6d17f5703186dbebcba4f931ab9692d4ab1e9f79 --- .../feature/search/SearchViewModel.kt | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 6dd93ceb6..7c05f81c5 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -26,11 +26,11 @@ import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRep import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase -import com.google.samples.apps.nowinandroid.core.result.Result -import com.google.samples.apps.nowinandroid.core.result.asResult +import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map @@ -61,18 +61,15 @@ class SearchViewModel @Inject constructor( flowOf(SearchResultUiState.EmptyQuery) } else { getSearchContentsUseCase(query) - .asResult() - .map { result -> - when (result) { - is Result.Success -> SearchResultUiState.Success( - topics = result.data.topics, - newsResources = result.data.newsResources, - ) - - is Result.Loading -> SearchResultUiState.Loading - is Result.Error -> SearchResultUiState.LoadFailed - } + // 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( + topics = data.topics, + newsResources = data.newsResources, + ) } + .catch { emit(SearchResultUiState.LoadFailed) } } } } From 1552664857969c6bbaba1dcd073cfc75e3df4019 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:01:31 +0000 Subject: [PATCH 12/53] Bump kotlinxCoroutines from 1.7.3 to 1.8.0 Bumps `kotlinxCoroutines` from 1.7.3 to 1.8.0. Updates `org.jetbrains.kotlinx:kotlinx-coroutines-guava` from 1.7.3 to 1.8.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0) Updates `org.jetbrains.kotlinx:kotlinx-coroutines-test` from 1.7.3 to 1.8.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-guava dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 481494a48..c5deea4a2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ hiltExt = "1.1.0" jacoco = "0.8.7" junit4 = "4.13.2" kotlin = "1.9.22" -kotlinxCoroutines = "1.7.3" +kotlinxCoroutines = "1.8.0" kotlinxDatetime = "0.5.0" kotlinxSerializationJson = "1.6.0" ksp = "1.9.22-1.0.18" From 0d452cbd65e29e334380e15326b7592937dfa976 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:01:35 +0000 Subject: [PATCH 13/53] Bump androidx.hilt:hilt-navigation-compose from 1.0.0 to 1.2.0 Bumps androidx.hilt:hilt-navigation-compose from 1.0.0 to 1.2.0. --- updated-dependencies: - dependency-name: androidx.hilt:hilt-navigation-compose dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 481494a48..e6a801e6a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.0.0" androidxEspresso = "3.5.1" -androidxHiltNavigationCompose = "1.0.0" +androidxHiltNavigationCompose = "1.2.0" androidxLifecycle = "2.7.0" androidxMacroBenchmark = "1.2.2" androidxMetrics = "1.0.0-alpha04" From ab6ac814208a1fac018071dd403098cb8bfdf7a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:01:38 +0000 Subject: [PATCH 14/53] Bump com.google.gms.google-services from 4.4.0 to 4.4.1 Bumps com.google.gms.google-services from 4.4.0 to 4.4.1. --- updated-dependencies: - dependency-name: com.google.gms.google-services dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 481494a48..ea4de08c4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ dependencyGuard = "0.4.3" firebaseBom = "32.4.0" firebaseCrashlyticsPlugin = "2.9.9" firebasePerfPlugin = "1.4.2" -gmsPlugin = "4.4.0" +gmsPlugin = "4.4.1" googleOss = "17.0.1" googleOssPlugin = "0.10.6" hilt = "2.51" From 07516bff4c1cb92c4ef618561f5e8897ab3e9c55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:03:31 +0000 Subject: [PATCH 15/53] Bump androidx.browser:browser from 1.6.0 to 1.8.0 Bumps androidx.browser:browser from 1.6.0 to 1.8.0. --- updated-dependencies: - dependency-name: androidx.browser:browser dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 481494a48..cf35fde53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ androidGradlePlugin = "8.3.0" androidTools = "31.3.0" androidxActivity = "1.8.0" androidxAppCompat = "1.6.1" -androidxBrowser = "1.6.0" +androidxBrowser = "1.8.0" androidxComposeBom = "2024.02.01" androidxComposeCompiler = "1.5.8" androidxComposeMaterial3Adaptive = "1.0.0-alpha06" From 6e5548a83762d715188fc69e3f896b14327630f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 11 Mar 2024 09:03:32 +0000 Subject: [PATCH 16/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dependencies/prodReleaseRuntimeClasspath.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index b9da05522..de0f6b126 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -197,12 +197,12 @@ org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 org.jetbrains.kotlin:kotlin-stdlib:1.9.22 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.8.0 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.0 org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.5.0 org.jetbrains.kotlinx:kotlinx-datetime:0.5.0 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 From 72f968ff2cc4098edcae85a3ba5c0283b86c494b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 11 Mar 2024 09:03:53 +0000 Subject: [PATCH 17/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dependencies/prodReleaseRuntimeClasspath.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index b9da05522..319765c2b 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -71,8 +71,8 @@ androidx.emoji2:emoji2:1.3.0 androidx.exifinterface:exifinterface:1.3.6 androidx.fragment:fragment:1.5.1 androidx.hilt:hilt-common:1.1.0 -androidx.hilt:hilt-navigation-compose:1.0.0 -androidx.hilt:hilt-navigation:1.0.0 +androidx.hilt:hilt-navigation-compose:1.2.0 +androidx.hilt:hilt-navigation:1.2.0 androidx.hilt:hilt-work:1.1.0 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 From 5448786c4d24f3531207880905dd436db1dd35a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 11 Mar 2024 09:05:29 +0000 Subject: [PATCH 18/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app-nia-catalog/dependencies/releaseRuntimeClasspath.txt | 2 +- app/dependencies/prodReleaseRuntimeClasspath.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index ca4bf99a3..a39b51e88 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -8,7 +8,7 @@ androidx.appcompat:appcompat-resources:1.6.1 androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 -androidx.browser:browser:1.6.0 +androidx.browser:browser:1.8.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index b9da05522..70f82661a 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -9,7 +9,7 @@ androidx.appcompat:appcompat:1.6.1 androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 -androidx.browser:browser:1.6.0 +androidx.browser:browser:1.8.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 From a7a7736426e3f056af6dba0f8c83b2cc4b223f53 Mon Sep 17 00:00:00 2001 From: mlykotom Date: Mon, 11 Mar 2024 14:52:51 +0000 Subject: [PATCH 19/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dependencies/releaseRuntimeClasspath.txt | 43 ++++++++++--------- .../prodReleaseRuntimeClasspath.txt | 24 +++++------ 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index ca4bf99a3..bfb84ef6a 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -2,8 +2,8 @@ androidx.activity:activity-compose:1.8.0 androidx.activity:activity-ktx:1.8.0 androidx.activity:activity:1.8.0 androidx.annotation:annotation-experimental:1.4.0 -androidx.annotation:annotation-jvm:1.7.0 -androidx.annotation:annotation:1.7.0 +androidx.annotation:annotation-jvm:1.7.1 +androidx.annotation:annotation:1.7.1 androidx.appcompat:appcompat-resources:1.6.1 androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 @@ -53,19 +53,20 @@ androidx.core:core:1.12.0 androidx.customview:customview-poolingcontainer:1.0.0 androidx.customview:customview:1.0.0 androidx.emoji2:emoji2:1.3.0 -androidx.exifinterface:exifinterface:1.3.6 +androidx.exifinterface:exifinterface:1.3.7 androidx.fragment:fragment:1.5.1 androidx.interpolator:interpolator:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.6.2 -androidx.lifecycle:lifecycle-common:2.6.2 -androidx.lifecycle:lifecycle-livedata-core:2.6.2 -androidx.lifecycle:lifecycle-livedata:2.6.2 -androidx.lifecycle:lifecycle-process:2.6.2 -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 -androidx.lifecycle:lifecycle-runtime:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 -androidx.lifecycle:lifecycle-viewmodel:2.6.2 +androidx.lifecycle:lifecycle-common-java8:2.7.0 +androidx.lifecycle:lifecycle-common:2.7.0 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.7.0 +androidx.lifecycle:lifecycle-livedata-core:2.7.0 +androidx.lifecycle:lifecycle-livedata:2.7.0 +androidx.lifecycle:lifecycle-process:2.7.0 +androidx.lifecycle:lifecycle-runtime-ktx:2.7.0 +androidx.lifecycle:lifecycle-runtime:2.7.0 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0 +androidx.lifecycle:lifecycle-viewmodel:2.7.0 androidx.loader:loader:1.0.0 androidx.metrics:metrics-performance:1.0.0-alpha04 androidx.profileinstaller:profileinstaller:1.3.1 @@ -86,16 +87,16 @@ com.google.dagger:hilt-android:2.51 com.google.dagger:hilt-core:2.51 com.google.guava:listenablefuture:1.0 com.squareup.okhttp3:okhttp:4.12.0 -com.squareup.okio:okio-jvm:3.6.0 -com.squareup.okio:okio:3.6.0 -io.coil-kt:coil-base:2.5.0 -io.coil-kt:coil-compose-base:2.5.0 -io.coil-kt:coil-compose:2.5.0 -io.coil-kt:coil:2.5.0 +com.squareup.okio:okio-jvm:3.8.0 +com.squareup.okio:okio:3.8.0 +io.coil-kt:coil-base:2.6.0 +io.coil-kt:coil-compose-base:2.6.0 +io.coil-kt:coil-compose:2.6.0 +io.coil-kt:coil:2.6.0 javax.inject:javax.inject:1 org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 org.jetbrains.kotlin:kotlin-stdlib:1.9.22 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index b9da05522..a25a227fa 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -2,8 +2,8 @@ androidx.activity:activity-compose:1.8.0 androidx.activity:activity-ktx:1.8.0 androidx.activity:activity:1.8.0 androidx.annotation:annotation-experimental:1.4.0 -androidx.annotation:annotation-jvm:1.7.0 -androidx.annotation:annotation:1.7.0 +androidx.annotation:annotation-jvm:1.7.1 +androidx.annotation:annotation:1.7.1 androidx.appcompat:appcompat-resources:1.6.1 androidx.appcompat:appcompat:1.6.1 androidx.arch.core:core-common:2.2.0 @@ -68,7 +68,7 @@ androidx.documentfile:documentfile:1.0.0 androidx.drawerlayout:drawerlayout:1.0.0 androidx.emoji2:emoji2-views-helper:1.3.0 androidx.emoji2:emoji2:1.3.0 -androidx.exifinterface:exifinterface:1.3.6 +androidx.exifinterface:exifinterface:1.3.7 androidx.fragment:fragment:1.5.1 androidx.hilt:hilt-common:1.1.0 androidx.hilt:hilt-navigation-compose:1.0.0 @@ -181,21 +181,21 @@ com.google.protobuf:protobuf-kotlin-lite:3.25.2 com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 com.squareup.okhttp3:logging-interceptor:4.12.0 com.squareup.okhttp3:okhttp:4.12.0 -com.squareup.okio:okio-jvm:3.6.0 -com.squareup.okio:okio:3.6.0 +com.squareup.okio:okio-jvm:3.8.0 +com.squareup.okio:okio:3.8.0 com.squareup.retrofit2:retrofit:2.9.0 -io.coil-kt:coil-base:2.5.0 -io.coil-kt:coil-compose-base:2.5.0 -io.coil-kt:coil-compose:2.5.0 -io.coil-kt:coil-svg:2.5.0 -io.coil-kt:coil:2.5.0 +io.coil-kt:coil-base:2.6.0 +io.coil-kt:coil-compose-base:2.6.0 +io.coil-kt:coil-compose:2.6.0 +io.coil-kt:coil-svg:2.6.0 +io.coil-kt:coil:2.6.0 io.github.aakira:napier-android:1.4.1 io.github.aakira:napier:1.4.1 javax.inject:javax.inject:1 org.checkerframework:checker-qual:3.12.0 org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 org.jetbrains.kotlin:kotlin-stdlib:1.9.22 org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 From 6b744ab3c7de43e815e905e54c95e52dec4fbb3b Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 11 Mar 2024 21:56:16 +0000 Subject: [PATCH 20/53] Addressing feedback Change-Id: I9c825c142799cdbb99890d49ded067427cf9fee8 --- generateModuleGraphs.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index f69339502..fc4b190c8 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -56,7 +56,7 @@ check_and_create_readme() { local file_name="$2" local readme_path="${module_path:1}" # Remove leading colon - readme_path=$(echo "$readme_path" | sed 's/:/\//g') # Replace colons with slashes using sed + readme_path=${readme_path//:/\/} # Replace colons with slashes using sed readme_path="${readme_path}/README.md" #Append the filename # Check if README.md exists and create it if not @@ -82,7 +82,9 @@ echo "$module_paths" | while read -r module_path; do # Generate the .gv file in a temporary location # "docs/images/graphs/${file_name}.svg" From ed91723e2f9a35556d9e6803c86477a873578f4c Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Tue, 12 Mar 2024 16:05:56 +0900 Subject: [PATCH 21/53] Fix #1270 Change-Id: Id9774ad300b04c17cb1d7668c1ab1bac014bf70c --- .../core/data/test/repository/FakeUserDataRepository.kt | 2 +- .../core/data/repository/OfflineFirstUserDataRepository.kt | 2 +- .../nowinandroid/core/data/repository/UserDataRepository.kt | 2 +- .../data/repository/OfflineFirstUserDataRepositoryTest.kt | 4 ++-- .../core/testing/repository/TestUserDataRepository.kt | 2 +- .../apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt | 4 ++-- .../nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt | 4 ++-- .../apps/nowinandroid/feature/foryou/ForYouViewModel.kt | 2 +- .../samples/apps/nowinandroid/feature/topic/TopicViewModel.kt | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt index cdd23429f..d9323e312 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt @@ -43,7 +43,7 @@ internal class FakeUserDataRepository @Inject constructor( override suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) = niaPreferencesDataSource.setTopicIdFollowed(followedTopicId, followed) - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) } diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt index c0b1bcc33..a781b7d14 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt @@ -42,7 +42,7 @@ internal class OfflineFirstUserDataRepository @Inject constructor( analyticsHelper.logTopicFollowToggled(followedTopicId, followed) } - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) analyticsHelper.logNewsResourceBookmarkToggled( newsResourceId = newsResourceId, diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt index ff616c179..c0acd4862 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt @@ -41,7 +41,7 @@ interface UserDataRepository { /** * Updates the bookmarked status for a news resource */ - suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) + suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) /** * Updates the viewed status for a news resource diff --git a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt index 27e86f2f4..fca625d40 100644 --- a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt @@ -133,7 +133,7 @@ class OfflineFirstUserDataRepositoryTest { @Test fun offlineFirstUserDataRepository_bookmark_news_resource_logic_delegates_to_nia_preferences() = testScope.runTest { - subject.updateNewsResourceBookmark(newsResourceId = "0", bookmarked = true) + subject.setNewsResourceBookmark(newsResourceId = "0", bookmarked = true) assertEquals( setOf("0"), @@ -142,7 +142,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), ) - subject.updateNewsResourceBookmark(newsResourceId = "1", bookmarked = true) + subject.setNewsResourceBookmark(newsResourceId = "1", bookmarked = true) assertEquals( setOf("0", "1"), diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt index 504e79217..8eb09b00b 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt @@ -61,7 +61,7 @@ class TestUserDataRepository : UserDataRepository { } } - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { currentUserData.let { current -> val bookmarkedNews = if (bookmarked) { current.bookmarkedNewsResources + newsResourceId diff --git a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt index 7b6cac76a..5b1074fdb 100644 --- a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt +++ b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt @@ -58,7 +58,7 @@ class BookmarksViewModel @Inject constructor( viewModelScope.launch { shouldDisplayUndoBookmark = true lastRemovedBookmarkId = newsResourceId - userDataRepository.updateNewsResourceBookmark(newsResourceId, false) + userDataRepository.setNewsResourceBookmark(newsResourceId, false) } } @@ -71,7 +71,7 @@ class BookmarksViewModel @Inject constructor( fun undoBookmarkRemoval() { viewModelScope.launch { lastRemovedBookmarkId?.let { - userDataRepository.updateNewsResourceBookmark(it, true) + userDataRepository.setNewsResourceBookmark(it, true) } } clearUndoState() diff --git a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index 6469a684b..1ebc1c037 100644 --- a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -67,7 +67,7 @@ class BookmarksViewModelTest { val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } newsRepository.sendNewsResources(newsResourcesTestData) - userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmark(newsResourcesTestData[0].id, true) val item = viewModel.feedUiState.value assertIs(item) assertEquals(item.feed.size, 1) @@ -81,7 +81,7 @@ class BookmarksViewModelTest { // Set the news resources to be used by this test newsRepository.sendNewsResources(newsResourcesTestData) // Start with the resource saved - userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmark(newsResourcesTestData[0].id, true) // Use viewModel to remove saved resource viewModel.removeFromSavedResources(newsResourcesTestData[0].id) // Verify list of saved resources is now empty diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt index 2a4b6f4ec..c634f8895 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt @@ -117,7 +117,7 @@ class ForYouViewModel @Inject constructor( fun updateNewsResourceSaved(newsResourceId: String, isChecked: Boolean) { viewModelScope.launch { - userDataRepository.updateNewsResourceBookmark(newsResourceId, isChecked) + userDataRepository.setNewsResourceBookmark(newsResourceId, isChecked) } } diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt index ff1eee319..52aa46599 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt @@ -81,7 +81,7 @@ class TopicViewModel @Inject constructor( fun bookmarkNews(newsResourceId: String, bookmarked: Boolean) { viewModelScope.launch { - userDataRepository.updateNewsResourceBookmark(newsResourceId, bookmarked) + userDataRepository.setNewsResourceBookmark(newsResourceId, bookmarked) } } From ee4320723fd4e90d2c28cbe3b2a46f3dbed8cf20 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Tue, 12 Mar 2024 16:10:42 +0900 Subject: [PATCH 22/53] Fix typo. Change-Id: Id3aed2e3c54660fbbb42bc0c08dea68de0d5230f --- .../core/data/test/repository/FakeUserDataRepository.kt | 2 +- .../core/data/repository/OfflineFirstUserDataRepository.kt | 2 +- .../nowinandroid/core/data/repository/UserDataRepository.kt | 2 +- .../data/repository/OfflineFirstUserDataRepositoryTest.kt | 4 ++-- .../core/testing/repository/TestUserDataRepository.kt | 2 +- .../apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt | 4 ++-- .../nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt | 4 ++-- .../apps/nowinandroid/feature/foryou/ForYouViewModel.kt | 2 +- .../samples/apps/nowinandroid/feature/topic/TopicViewModel.kt | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt index d9323e312..4871baad9 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt @@ -43,7 +43,7 @@ internal class FakeUserDataRepository @Inject constructor( override suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) = niaPreferencesDataSource.setTopicIdFollowed(followedTopicId, followed) - override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) } diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt index a781b7d14..089b7087d 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt @@ -42,7 +42,7 @@ internal class OfflineFirstUserDataRepository @Inject constructor( analyticsHelper.logTopicFollowToggled(followedTopicId, followed) } - override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) analyticsHelper.logNewsResourceBookmarkToggled( newsResourceId = newsResourceId, diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt index c0acd4862..c5202b02b 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt @@ -41,7 +41,7 @@ interface UserDataRepository { /** * Updates the bookmarked status for a news resource */ - suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) + suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) /** * Updates the viewed status for a news resource diff --git a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt index fca625d40..422e2cfb7 100644 --- a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt @@ -133,7 +133,7 @@ class OfflineFirstUserDataRepositoryTest { @Test fun offlineFirstUserDataRepository_bookmark_news_resource_logic_delegates_to_nia_preferences() = testScope.runTest { - subject.setNewsResourceBookmark(newsResourceId = "0", bookmarked = true) + subject.setNewsResourceBookmarked(newsResourceId = "0", bookmarked = true) assertEquals( setOf("0"), @@ -142,7 +142,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), ) - subject.setNewsResourceBookmark(newsResourceId = "1", bookmarked = true) + subject.setNewsResourceBookmarked(newsResourceId = "1", bookmarked = true) assertEquals( setOf("0", "1"), diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt index 8eb09b00b..be76112dc 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt @@ -61,7 +61,7 @@ class TestUserDataRepository : UserDataRepository { } } - override suspend fun setNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { currentUserData.let { current -> val bookmarkedNews = if (bookmarked) { current.bookmarkedNewsResources + newsResourceId diff --git a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt index 5b1074fdb..f93602485 100644 --- a/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt +++ b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt @@ -58,7 +58,7 @@ class BookmarksViewModel @Inject constructor( viewModelScope.launch { shouldDisplayUndoBookmark = true lastRemovedBookmarkId = newsResourceId - userDataRepository.setNewsResourceBookmark(newsResourceId, false) + userDataRepository.setNewsResourceBookmarked(newsResourceId, false) } } @@ -71,7 +71,7 @@ class BookmarksViewModel @Inject constructor( fun undoBookmarkRemoval() { viewModelScope.launch { lastRemovedBookmarkId?.let { - userDataRepository.setNewsResourceBookmark(it, true) + userDataRepository.setNewsResourceBookmarked(it, true) } } clearUndoState() diff --git a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index 1ebc1c037..037e9db64 100644 --- a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -67,7 +67,7 @@ class BookmarksViewModelTest { val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } newsRepository.sendNewsResources(newsResourcesTestData) - userDataRepository.setNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true) val item = viewModel.feedUiState.value assertIs(item) assertEquals(item.feed.size, 1) @@ -81,7 +81,7 @@ class BookmarksViewModelTest { // Set the news resources to be used by this test newsRepository.sendNewsResources(newsResourcesTestData) // Start with the resource saved - userDataRepository.setNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true) // Use viewModel to remove saved resource viewModel.removeFromSavedResources(newsResourcesTestData[0].id) // Verify list of saved resources is now empty diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt index c634f8895..85035a77a 100644 --- a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt @@ -117,7 +117,7 @@ class ForYouViewModel @Inject constructor( fun updateNewsResourceSaved(newsResourceId: String, isChecked: Boolean) { viewModelScope.launch { - userDataRepository.setNewsResourceBookmark(newsResourceId, isChecked) + userDataRepository.setNewsResourceBookmarked(newsResourceId, isChecked) } } diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt index 52aa46599..2dea8ba05 100644 --- a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt @@ -81,7 +81,7 @@ class TopicViewModel @Inject constructor( fun bookmarkNews(newsResourceId: String, bookmarked: Boolean) { viewModelScope.launch { - userDataRepository.setNewsResourceBookmark(newsResourceId, bookmarked) + userDataRepository.setNewsResourceBookmarked(newsResourceId, bookmarked) } } From cc02c30b8eabaf73ed6f5d451a6c8c8749b2aa78 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Wed, 13 Mar 2024 14:34:28 -0700 Subject: [PATCH 23/53] Update material3-adaptive to 1.0.0-alpha08 Change-Id: Ic218c6b061b5cea4e56b544073541421862bc1d0 --- app/build.gradle.kts | 2 ++ .../interests2pane/InterestsListDetailScreen.kt | 17 +++++++++-------- gradle/libs.versions.toml | 8 +++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 12ac3ded3..9e68ffa7d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -90,6 +90,8 @@ dependencies { implementation(libs.androidx.activity.compose) 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.windowSizeClass) implementation(libs.androidx.compose.runtime.tracing) implementation(libs.androidx.core.ktx) 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 98327923f..b3594b81f 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 @@ -20,11 +20,11 @@ import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Box import androidx.compose.material3.Text import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi -import androidx.compose.material3.adaptive.ListDetailPaneScaffold -import androidx.compose.material3.adaptive.ListDetailPaneScaffoldRole -import androidx.compose.material3.adaptive.PaneAdaptedValue -import androidx.compose.material3.adaptive.ThreePaneScaffoldNavigator -import androidx.compose.material3.adaptive.rememberListDetailPaneScaffoldNavigator +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole +import androidx.compose.material3.adaptive.layout.PaneAdaptedValue +import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator +import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -93,7 +93,8 @@ internal fun InterestsListDetailScreen( } ListDetailPaneScaffold( - scaffoldState = listDetailNavigator.scaffoldState, + value = listDetailNavigator.scaffoldValue, + directive = listDetailNavigator.scaffoldDirective, listPane = { InterestsRoute( onTopicClick = ::onTopicClickShowDetailPane, @@ -129,8 +130,8 @@ internal fun InterestsListDetailScreen( @OptIn(ExperimentalMaterial3AdaptiveApi::class) private fun ThreePaneScaffoldNavigator.isListPaneVisible(): Boolean = - scaffoldState.scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded + scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded @OptIn(ExperimentalMaterial3AdaptiveApi::class) private fun ThreePaneScaffoldNavigator.isDetailPaneVisible(): Boolean = - scaffoldState.scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded + scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f3258c70e..13e81df64 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,9 +7,9 @@ androidTools = "31.3.0" androidxActivity = "1.8.0" androidxAppCompat = "1.6.1" androidxBrowser = "1.8.0" -androidxComposeBom = "2024.02.01" +androidxComposeBom = "2024.02.02" androidxComposeCompiler = "1.5.8" -androidxComposeMaterial3Adaptive = "1.0.0-alpha06" +androidxComposeMaterial3Adaptive = "1.0.0-alpha08" androidxComposeRuntimeTracing = "1.0.0-beta01" androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" @@ -71,7 +71,9 @@ androidx-compose-foundation = { group = "androidx.compose.foundation", name = "f androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" } androidx-compose-material-iconsExtended = { group = "androidx.compose.material", name = "material-icons-extended" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } -androidx-compose-material3-adaptive = { group = "androidx.compose.material3", name = "material3-adaptive", version.ref = "androidxComposeMaterial3Adaptive" } +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-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" } From a6f223301e6586e923089c5c1360207c9983893f Mon Sep 17 00:00:00 2001 From: alexvanyo Date: Wed, 13 Mar 2024 21:38:56 +0000 Subject: [PATCH 24/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dependencies/releaseRuntimeClasspath.txt | 70 +++++++-------- .../prodReleaseRuntimeClasspath.txt | 86 ++++++++++--------- 2 files changed, 81 insertions(+), 75 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index d5a487997..8a4bff7ab 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -12,41 +12,41 @@ androidx.browser:browser:1.8.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 -androidx.compose.animation:animation-android:1.6.2 -androidx.compose.animation:animation-core-android:1.6.2 -androidx.compose.animation:animation-core:1.6.2 -androidx.compose.animation:animation:1.6.2 -androidx.compose.foundation:foundation-android:1.6.2 -androidx.compose.foundation:foundation-layout-android:1.6.2 -androidx.compose.foundation:foundation-layout:1.6.2 -androidx.compose.foundation:foundation:1.6.2 -androidx.compose.material3:material3-android:1.2.0 -androidx.compose.material3:material3:1.2.0 -androidx.compose.material:material-icons-core-android:1.6.2 -androidx.compose.material:material-icons-core:1.6.2 -androidx.compose.material:material-icons-extended-android:1.6.2 -androidx.compose.material:material-icons-extended:1.6.2 -androidx.compose.material:material-ripple-android:1.6.2 -androidx.compose.material:material-ripple:1.6.2 -androidx.compose.runtime:runtime-android:1.6.2 -androidx.compose.runtime:runtime-saveable-android:1.6.2 -androidx.compose.runtime:runtime-saveable:1.6.2 -androidx.compose.runtime:runtime:1.6.2 -androidx.compose.ui:ui-android:1.6.2 -androidx.compose.ui:ui-geometry-android:1.6.2 -androidx.compose.ui:ui-geometry:1.6.2 -androidx.compose.ui:ui-graphics-android:1.6.2 -androidx.compose.ui:ui-graphics:1.6.2 -androidx.compose.ui:ui-text-android:1.6.2 -androidx.compose.ui:ui-text:1.6.2 -androidx.compose.ui:ui-tooling-preview-android:1.6.2 -androidx.compose.ui:ui-tooling-preview:1.6.2 -androidx.compose.ui:ui-unit-android:1.6.2 -androidx.compose.ui:ui-unit:1.6.2 -androidx.compose.ui:ui-util-android:1.6.2 -androidx.compose.ui:ui-util:1.6.2 -androidx.compose.ui:ui:1.6.2 -androidx.compose:compose-bom:2024.02.01 +androidx.compose.animation:animation-android:1.6.3 +androidx.compose.animation:animation-core-android:1.6.3 +androidx.compose.animation:animation-core:1.6.3 +androidx.compose.animation:animation:1.6.3 +androidx.compose.foundation:foundation-android:1.6.3 +androidx.compose.foundation:foundation-layout-android:1.6.3 +androidx.compose.foundation:foundation-layout:1.6.3 +androidx.compose.foundation:foundation:1.6.3 +androidx.compose.material3:material3-android:1.2.1 +androidx.compose.material3:material3:1.2.1 +androidx.compose.material:material-icons-core-android:1.6.3 +androidx.compose.material:material-icons-core:1.6.3 +androidx.compose.material:material-icons-extended-android:1.6.3 +androidx.compose.material:material-icons-extended:1.6.3 +androidx.compose.material:material-ripple-android:1.6.3 +androidx.compose.material:material-ripple:1.6.3 +androidx.compose.runtime:runtime-android:1.6.3 +androidx.compose.runtime:runtime-saveable-android:1.6.3 +androidx.compose.runtime:runtime-saveable:1.6.3 +androidx.compose.runtime:runtime:1.6.3 +androidx.compose.ui:ui-android:1.6.3 +androidx.compose.ui:ui-geometry-android:1.6.3 +androidx.compose.ui:ui-geometry:1.6.3 +androidx.compose.ui:ui-graphics-android:1.6.3 +androidx.compose.ui:ui-graphics:1.6.3 +androidx.compose.ui:ui-text-android:1.6.3 +androidx.compose.ui:ui-text:1.6.3 +androidx.compose.ui:ui-tooling-preview-android:1.6.3 +androidx.compose.ui:ui-tooling-preview:1.6.3 +androidx.compose.ui:ui-unit-android:1.6.3 +androidx.compose.ui:ui-unit:1.6.3 +androidx.compose.ui:ui-util-android:1.6.3 +androidx.compose.ui:ui-util:1.6.3 +androidx.compose.ui:ui:1.6.3 +androidx.compose:compose-bom:2024.02.02 androidx.concurrent:concurrent-futures:1.1.0 androidx.core:core-ktx:1.12.0 androidx.core:core:1.12.0 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 64afc4a50..69cf3e50e 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -13,46 +13,50 @@ androidx.browser:browser:1.8.0 androidx.collection:collection-jvm:1.4.0 androidx.collection:collection-ktx:1.4.0 androidx.collection:collection:1.4.0 -androidx.compose.animation:animation-android:1.6.2 -androidx.compose.animation:animation-core-android:1.6.2 -androidx.compose.animation:animation-core:1.6.2 -androidx.compose.animation:animation:1.6.2 -androidx.compose.foundation:foundation-android:1.6.2 -androidx.compose.foundation:foundation-layout-android:1.6.2 -androidx.compose.foundation:foundation-layout:1.6.2 -androidx.compose.foundation:foundation:1.6.2 -androidx.compose.material3:material3-adaptive-android:1.0.0-alpha06 -androidx.compose.material3:material3-adaptive:1.0.0-alpha06 -androidx.compose.material3:material3-android:1.2.0 -androidx.compose.material3:material3-window-size-class-android:1.2.0 -androidx.compose.material3:material3-window-size-class:1.2.0 -androidx.compose.material3:material3:1.2.0 -androidx.compose.material:material-icons-core-android:1.6.2 -androidx.compose.material:material-icons-core:1.6.2 -androidx.compose.material:material-icons-extended-android:1.6.2 -androidx.compose.material:material-icons-extended:1.6.2 -androidx.compose.material:material-ripple-android:1.6.2 -androidx.compose.material:material-ripple:1.6.2 -androidx.compose.runtime:runtime-android:1.6.2 -androidx.compose.runtime:runtime-saveable-android:1.6.2 -androidx.compose.runtime:runtime-saveable:1.6.2 +androidx.compose.animation:animation-android:1.6.3 +androidx.compose.animation:animation-core-android:1.6.3 +androidx.compose.animation:animation-core:1.6.3 +androidx.compose.animation:animation:1.6.3 +androidx.compose.foundation:foundation-android:1.6.3 +androidx.compose.foundation:foundation-layout-android:1.6.3 +androidx.compose.foundation:foundation-layout:1.6.3 +androidx.compose.foundation:foundation:1.6.3 +androidx.compose.material3.adaptive:adaptive-android:1.0.0-alpha08 +androidx.compose.material3.adaptive:adaptive-layout-android:1.0.0-alpha08 +androidx.compose.material3.adaptive:adaptive-layout:1.0.0-alpha08 +androidx.compose.material3.adaptive:adaptive-navigation-android:1.0.0-alpha08 +androidx.compose.material3.adaptive:adaptive-navigation:1.0.0-alpha08 +androidx.compose.material3.adaptive:adaptive:1.0.0-alpha08 +androidx.compose.material3:material3-android:1.2.1 +androidx.compose.material3:material3-window-size-class-android:1.2.1 +androidx.compose.material3:material3-window-size-class:1.2.1 +androidx.compose.material3:material3:1.2.1 +androidx.compose.material:material-icons-core-android:1.6.3 +androidx.compose.material:material-icons-core:1.6.3 +androidx.compose.material:material-icons-extended-android:1.6.3 +androidx.compose.material:material-icons-extended:1.6.3 +androidx.compose.material:material-ripple-android:1.6.3 +androidx.compose.material:material-ripple:1.6.3 +androidx.compose.runtime:runtime-android:1.6.3 +androidx.compose.runtime:runtime-saveable-android:1.6.3 +androidx.compose.runtime:runtime-saveable:1.6.3 androidx.compose.runtime:runtime-tracing:1.0.0-beta01 -androidx.compose.runtime:runtime:1.6.2 -androidx.compose.ui:ui-android:1.6.2 -androidx.compose.ui:ui-geometry-android:1.6.2 -androidx.compose.ui:ui-geometry:1.6.2 -androidx.compose.ui:ui-graphics-android:1.6.2 -androidx.compose.ui:ui-graphics:1.6.2 -androidx.compose.ui:ui-text-android:1.6.2 -androidx.compose.ui:ui-text:1.6.2 -androidx.compose.ui:ui-tooling-preview-android:1.6.2 -androidx.compose.ui:ui-tooling-preview:1.6.2 -androidx.compose.ui:ui-unit-android:1.6.2 -androidx.compose.ui:ui-unit:1.6.2 -androidx.compose.ui:ui-util-android:1.6.2 -androidx.compose.ui:ui-util:1.6.2 -androidx.compose.ui:ui:1.6.2 -androidx.compose:compose-bom:2024.02.01 +androidx.compose.runtime:runtime:1.6.3 +androidx.compose.ui:ui-android:1.6.3 +androidx.compose.ui:ui-geometry-android:1.6.3 +androidx.compose.ui:ui-geometry:1.6.3 +androidx.compose.ui:ui-graphics-android:1.6.3 +androidx.compose.ui:ui-graphics:1.6.3 +androidx.compose.ui:ui-text-android:1.6.3 +androidx.compose.ui:ui-text:1.6.3 +androidx.compose.ui:ui-tooling-preview-android:1.6.3 +androidx.compose.ui:ui-tooling-preview:1.6.3 +androidx.compose.ui:ui-unit-android:1.6.3 +androidx.compose.ui:ui-unit:1.6.3 +androidx.compose.ui:ui-util-android:1.6.3 +androidx.compose.ui:ui-util:1.6.3 +androidx.compose.ui:ui:1.6.3 +androidx.compose:compose-bom:2024.02.02 androidx.concurrent:concurrent-futures:1.1.0 androidx.core:core-ktx:1.12.0 androidx.core:core-splashscreen:1.0.1 @@ -119,7 +123,9 @@ androidx.vectordrawable:vectordrawable:1.1.0 androidx.versionedparcelable:versionedparcelable:1.1.1 androidx.viewpager:viewpager:1.0.0 androidx.window.extensions.core:core:1.0.0 -androidx.window:window:1.2.0 +androidx.window:window-core-android:1.3.0-alpha02 +androidx.window:window-core:1.3.0-alpha02 +androidx.window:window:1.3.0-alpha02 androidx.work:work-runtime-ktx:2.9.0 androidx.work:work-runtime:2.9.0 com.caverock:androidsvg-aar:1.4 From a5025390af98011df60c8ce0c252827f694ce8ac Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 13:36:17 +0000 Subject: [PATCH 25/53] Add title to READMEs to describe the dependency graph Change-Id: Ifb4b44e67df53ddd8ed048122c6c12a904e61528 --- app-nia-catalog/README.md | 4 ++-- app/README.md | 4 ++-- core/analytics/README.md | 2 +- core/common/README.md | 2 +- core/data-test/README.md | 2 +- core/data/README.md | 2 +- core/database/README.md | 2 +- core/datastore-proto/README.md | 2 +- core/datastore-test/README.md | 2 +- core/datastore/README.md | 2 +- core/designsystem/README.md | 2 +- core/domain/README.md | 2 +- core/model/README.md | 2 +- core/network/README.md | 2 +- core/notifications/README.md | 2 +- core/screenshot-testing/README.md | 2 +- core/testing/README.md | 2 +- core/ui/README.md | 2 +- feature/bookmarks/README.md | 2 +- feature/foryou/README.md | 2 +- feature/interests/README.md | 2 +- feature/search/README.md | 2 +- feature/settings/README.md | 2 +- feature/topic/README.md | 2 +- generateModuleGraphs.sh | 2 +- sync/sync-test/README.md | 2 +- sync/work/README.md | 2 +- 27 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app-nia-catalog/README.md b/app-nia-catalog/README.md index 724f1effe..99503ba84 100644 --- a/app-nia-catalog/README.md +++ b/app-nia-catalog/README.md @@ -1,3 +1,3 @@ # :app-nia-catalog module - -![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.svg) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_app_nia_catalog.svg) diff --git a/app/README.md b/app/README.md index bbadc7330..f80083494 100644 --- a/app/README.md +++ b/app/README.md @@ -1,3 +1,3 @@ # :app module - -![Dependency graph](../docs/images/graphs/dep_graph_app.svg) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_app.svg) diff --git a/core/analytics/README.md b/core/analytics/README.md index c451cc838..d2bcd1ea7 100644 --- a/core/analytics/README.md +++ b/core/analytics/README.md @@ -1,3 +1,3 @@ # :core:analytics module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_analytics.svg) diff --git a/core/common/README.md b/core/common/README.md index 2fbc5a329..96558bcc6 100644 --- a/core/common/README.md +++ b/core/common/README.md @@ -1,3 +1,3 @@ # :core:common module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_common.svg) diff --git a/core/data-test/README.md b/core/data-test/README.md index 43804eeec..977ee10e4 100644 --- a/core/data-test/README.md +++ b/core/data-test/README.md @@ -1,3 +1,3 @@ # :core:data-test module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.svg) diff --git a/core/data/README.md b/core/data/README.md index a5a05870c..5d30f1638 100644 --- a/core/data/README.md +++ b/core/data/README.md @@ -1,3 +1,3 @@ # :core:data module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_data.svg) diff --git a/core/database/README.md b/core/database/README.md index 524cb5c48..855eab53e 100644 --- a/core/database/README.md +++ b/core/database/README.md @@ -1,3 +1,3 @@ # :core:database module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_database.svg) diff --git a/core/datastore-proto/README.md b/core/datastore-proto/README.md index 0b115b981..19ed58239 100644 --- a/core/datastore-proto/README.md +++ b/core/datastore-proto/README.md @@ -1,3 +1,3 @@ # :core:datastore-proto module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_proto.svg) diff --git a/core/datastore-test/README.md b/core/datastore-test/README.md index f59e9353d..99cf13f1f 100644 --- a/core/datastore-test/README.md +++ b/core/datastore-test/README.md @@ -1,3 +1,3 @@ # :core:datastore-test module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.svg) diff --git a/core/datastore/README.md b/core/datastore/README.md index e05e2ff72..4785c5885 100644 --- a/core/datastore/README.md +++ b/core/datastore/README.md @@ -1,3 +1,3 @@ # :core:datastore module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.svg) diff --git a/core/designsystem/README.md b/core/designsystem/README.md index 59f8cf803..d1778cb14 100644 --- a/core/designsystem/README.md +++ b/core/designsystem/README.md @@ -1,3 +1,3 @@ # :core:designsystem module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.svg) diff --git a/core/domain/README.md b/core/domain/README.md index f86422435..cc6905846 100644 --- a/core/domain/README.md +++ b/core/domain/README.md @@ -1,3 +1,3 @@ # :core:domain module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_domain.svg) diff --git a/core/model/README.md b/core/model/README.md index c740370ac..efd0eec76 100644 --- a/core/model/README.md +++ b/core/model/README.md @@ -1,3 +1,3 @@ # :core:model module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_model.svg) diff --git a/core/network/README.md b/core/network/README.md index 4106f0dde..516aa2d38 100644 --- a/core/network/README.md +++ b/core/network/README.md @@ -1,3 +1,3 @@ # :core:network module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_network.svg) diff --git a/core/notifications/README.md b/core/notifications/README.md index 7d509913f..8f5607bdf 100644 --- a/core/notifications/README.md +++ b/core/notifications/README.md @@ -1,3 +1,3 @@ # :core:notifications module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_notifications.svg) diff --git a/core/screenshot-testing/README.md b/core/screenshot-testing/README.md index bab2e1a10..9bd4f1f9c 100644 --- a/core/screenshot-testing/README.md +++ b/core/screenshot-testing/README.md @@ -1,3 +1,3 @@ # :core:screenshot-testing module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_screenshot_testing.svg) diff --git a/core/testing/README.md b/core/testing/README.md index a7d40abcd..5a35d379b 100644 --- a/core/testing/README.md +++ b/core/testing/README.md @@ -1,3 +1,3 @@ # :core:testing module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.svg) diff --git a/core/ui/README.md b/core/ui/README.md index e41b50bd5..38e514d01 100644 --- a/core/ui/README.md +++ b/core/ui/README.md @@ -1,3 +1,3 @@ # :core:ui module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.svg) diff --git a/feature/bookmarks/README.md b/feature/bookmarks/README.md index 1af65fd92..54cbf91d0 100644 --- a/feature/bookmarks/README.md +++ b/feature/bookmarks/README.md @@ -1,3 +1,3 @@ # :feature:bookmarks module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.svg) diff --git a/feature/foryou/README.md b/feature/foryou/README.md index fd864fbfa..0f08cb827 100644 --- a/feature/foryou/README.md +++ b/feature/foryou/README.md @@ -1,3 +1,3 @@ # :feature:foryou module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.svg) diff --git a/feature/interests/README.md b/feature/interests/README.md index be94111d8..90a4fbc9c 100644 --- a/feature/interests/README.md +++ b/feature/interests/README.md @@ -1,3 +1,3 @@ # :feature:interests module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.svg) diff --git a/feature/search/README.md b/feature/search/README.md index c793d1543..e205970f0 100644 --- a/feature/search/README.md +++ b/feature/search/README.md @@ -1,3 +1,3 @@ # :feature:search module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_search.svg) diff --git a/feature/settings/README.md b/feature/settings/README.md index 8620a2dcd..7a4df04fe 100644 --- a/feature/settings/README.md +++ b/feature/settings/README.md @@ -1,3 +1,3 @@ # :feature:settings module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_settings.svg) diff --git a/feature/topic/README.md b/feature/topic/README.md index 199a9cb55..84588929c 100644 --- a/feature/topic/README.md +++ b/feature/topic/README.md @@ -1,3 +1,3 @@ # :feature:topic module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.svg) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index fc4b190c8..27dea22da 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -65,7 +65,7 @@ check_and_create_readme() { # Calculate the correct relative path to the image local relative_image_path="../../docs/images/graphs/${file_name}.svg" echo "# ${module_path} module" > "$readme_path" - echo "" >> "$readme_path" + echo "## Dependency graph" >> "$readme_path" echo "![Dependency graph](${relative_image_path})" >> "$readme_path" fi } diff --git a/sync/sync-test/README.md b/sync/sync-test/README.md index 34ce5066a..78876290f 100644 --- a/sync/sync-test/README.md +++ b/sync/sync-test/README.md @@ -1,3 +1,3 @@ # :sync:sync-test module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_sync_sync_test.svg) diff --git a/sync/work/README.md b/sync/work/README.md index f31359e9f..2fe66d616 100644 --- a/sync/work/README.md +++ b/sync/work/README.md @@ -1,3 +1,3 @@ # :sync:work module - +## Dependency graph ![Dependency graph](../../docs/images/graphs/dep_graph_sync_work.svg) From a4c52e6485b7de29700c9d6db36cb5a073d718c9 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 11 Mar 2024 20:54:13 +0000 Subject: [PATCH 26/53] Remove the search module's dependency on other feature modules Change-Id: I17df9948fed04ddc7ba507b437d39536b8b180bb --- .../nowinandroid/core/ui}/InterestsItem.kt | 10 ++++----- core/ui/src/main/res/values/strings.xml | 3 +++ .../feature/foryou/ForYouViewModelTest.kt | 20 ++++++++++++++++++ .../feature/interests/TabContent.kt | 1 + .../interests/src/main/res/values/strings.xml | 2 -- feature/search/build.gradle.kts | 4 +--- .../feature/search/SearchScreen.kt | 14 ++++--------- .../feature/search/SearchViewModel.kt | 20 ++++++++++++++++++ .../feature/search/SearchViewModelTest.kt | 21 +++++++++++++++++++ 9 files changed, 75 insertions(+), 20 deletions(-) rename {feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests => core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui}/InterestsItem.kt (95%) diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt similarity index 95% rename from feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt index 6ac0340ee..28cd8d938 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -38,7 +38,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicA import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.feature.interests.R.string +import com.google.samples.apps.nowinandroid.core.ui.R.string @Composable fun InterestsItem( @@ -70,7 +70,7 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Add, contentDescription = stringResource( - id = string.feature_interests_card_follow_button_content_desc, + id = string.core_ui_interests_card_follow_button_content_desc, ), ) }, @@ -78,7 +78,7 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Check, contentDescription = stringResource( - id = string.feature_interests_card_unfollow_button_content_desc, + id = string.core_ui_interests_card_unfollow_button_content_desc, ), ) }, diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index 65a855fc9..ab76748ef 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -26,4 +26,7 @@ %1$s is followed %1$s is not followed + + Follow interest + Unfollow interest diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index b75573975..2fbdf0a79 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -36,6 +36,7 @@ import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncManager import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.feature.foryou.navigation.LINKED_NEWS_RESOURCE_ID import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle @@ -70,6 +71,7 @@ class ForYouViewModelTest { topicsRepository = topicsRepository, userDataRepository = userDataRepository, ) + private val savedStateHandle = SavedStateHandle() private lateinit var viewModel: ForYouViewModel @@ -504,6 +506,24 @@ class ForYouViewModelTest { collectJob.cancel() } + + @Test + fun whenUpdateNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.updateNewsResourceSaved(newsResourceId, true) + + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.updateNewsResourceSaved(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + } } private val sampleTopics = listOf( diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index 4a48645c5..83058c12e 100644 --- a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -39,6 +39,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollba import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberDraggableScroller import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem @Composable fun TopicsTabContent( diff --git a/feature/interests/src/main/res/values/strings.xml b/feature/interests/src/main/res/values/strings.xml index 2dd1c18a9..8d5322859 100644 --- a/feature/interests/src/main/res/values/strings.xml +++ b/feature/interests/src/main/res/values/strings.xml @@ -18,6 +18,4 @@ Interests Loading data "No available data" - Follow interest - Unfollow interest diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index 206f4c0f9..98052e9ab 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -27,9 +27,7 @@ android { dependencies { implementation(projects.core.data) implementation(projects.core.domain) - implementation(projects.feature.bookmarks) - implementation(projects.feature.foryou) - implementation(projects.feature.interests) + implementation(projects.core.ui) testImplementation(projects.core.testing) diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt index ca159c80b..1e4711016 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt @@ -88,14 +88,11 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.R.string import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.core.ui.newsFeed -import com.google.samples.apps.nowinandroid.feature.bookmarks.BookmarksViewModel -import com.google.samples.apps.nowinandroid.feature.foryou.ForYouViewModel -import com.google.samples.apps.nowinandroid.feature.interests.InterestsItem -import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel import com.google.samples.apps.nowinandroid.feature.search.R as searchR @Composable @@ -104,10 +101,7 @@ internal fun SearchRoute( onInterestsClick: () -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, - bookmarksViewModel: BookmarksViewModel = hiltViewModel(), - interestsViewModel: InterestsViewModel = hiltViewModel(), searchViewModel: SearchViewModel = hiltViewModel(), - forYouViewModel: ForYouViewModel = hiltViewModel(), ) { val recentSearchQueriesUiState by searchViewModel.recentSearchQueriesUiState.collectAsStateWithLifecycle() val searchResultUiState by searchViewModel.searchResultUiState.collectAsStateWithLifecycle() @@ -120,9 +114,9 @@ internal fun SearchRoute( onSearchQueryChanged = searchViewModel::onSearchQueryChanged, onSearchTriggered = searchViewModel::onSearchTriggered, onClearRecentSearches = searchViewModel::clearRecentSearches, - onNewsResourcesCheckedChanged = forYouViewModel::updateNewsResourceSaved, - onNewsResourceViewed = { bookmarksViewModel.setNewsResourceViewed(it, true) }, - onFollowButtonClick = interestsViewModel::followTopic, + onNewsResourcesCheckedChanged = searchViewModel::setNewsResourceBookmarked, + onNewsResourceViewed = { searchViewModel.setNewsResourceViewed(it, true) }, + onFollowButtonClick = searchViewModel::followTopic, onBackClick = onBackClick, onInterestsClick = onInterestsClick, onTopicClick = onTopicClick, diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 7c05f81c5..43d5b9405 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -23,6 +23,7 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase @@ -44,6 +45,7 @@ class SearchViewModel @Inject constructor( getSearchContentsCountUseCase: GetSearchContentsCountUseCase, recentSearchQueriesUseCase: GetRecentSearchQueriesUseCase, private val recentSearchRepository: RecentSearchRepository, + private val userDataRepository: UserDataRepository, private val savedStateHandle: SavedStateHandle, private val analyticsHelper: AnalyticsHelper, ) : ViewModel() { @@ -111,6 +113,24 @@ class SearchViewModel @Inject constructor( recentSearchRepository.clearRecentSearches() } } + + fun setNewsResourceBookmarked(newsResourceId: String, isChecked: Boolean) { + viewModelScope.launch { + userDataRepository.updateNewsResourceBookmark(newsResourceId, isChecked) + } + } + + fun followTopic(followedTopicId: String, followed: Boolean) { + viewModelScope.launch { + userDataRepository.setTopicIdFollowed(followedTopicId, followed) + } + } + + fun setNewsResourceViewed(newsResourceId: String, viewed: Boolean) { + viewModelScope.launch { + userDataRepository.setNewsResourceViewed(newsResourceId, viewed) + } + } } private fun AnalyticsHelper.logEventSearchTriggered(query: String) = diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index da0d5654e..662afca7d 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -33,6 +33,7 @@ import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.E import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest @@ -60,6 +61,7 @@ class SearchViewModelTest { private val recentSearchRepository = TestRecentSearchRepository() private val getRecentQueryUseCase = GetRecentSearchQueriesUseCase(recentSearchRepository) private val getSearchContentsCountUseCase = GetSearchContentsCountUseCase(searchContentsRepository) + private lateinit var viewModel: SearchViewModel @Before @@ -70,6 +72,7 @@ class SearchViewModelTest { recentSearchQueriesUseCase = getRecentQueryUseCase, savedStateHandle = SavedStateHandle(), recentSearchRepository = recentSearchRepository, + userDataRepository = userDataRepository, analyticsHelper = NoOpAnalyticsHelper(), ) userDataRepository.setUserData(emptyUserData) @@ -128,4 +131,22 @@ class SearchViewModelTest { collectJob.cancel() } + + @Test + fun whenToggleNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.setNewsResourceBookmarked(newsResourceId, true) + + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.setNewsResourceBookmarked(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + } } From 5084fca4dd14cc987391342cfb2e8e419a892768 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 11 Mar 2024 21:26:42 +0000 Subject: [PATCH 27/53] Fix InterestScreenTest resources Change-Id: Ib6aa372a1ab3b13b5c69c1d3feec2c31e5dca3ce --- .../nowinandroid/interests/InterestsScreenTest.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt index 1584662b8..a441f5a9d 100644 --- a/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt @@ -27,10 +27,11 @@ import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.feature.interests.InterestsScreen import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState -import com.google.samples.apps.nowinandroid.feature.interests.R import org.junit.Before import org.junit.Rule import org.junit.Test +import com.google.samples.apps.nowinandroid.core.ui.R as CoreUiR +import com.google.samples.apps.nowinandroid.feature.interests.R as InterestsR /** * UI test for checking the correct behaviour of the Interests screen; @@ -50,12 +51,12 @@ class InterestsScreenTest { @Before fun setup() { composeTestRule.activity.apply { - interestsLoading = getString(R.string.feature_interests_loading) - interestsEmptyHeader = getString(R.string.feature_interests_empty_header) + interestsLoading = getString(InterestsR.string.feature_interests_loading) + interestsEmptyHeader = getString(InterestsR.string.feature_interests_empty_header) interestsTopicCardFollowButton = - getString(R.string.feature_interests_card_follow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_follow_button_content_desc) interestsTopicCardUnfollowButton = - getString(R.string.feature_interests_card_unfollow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_unfollow_button_content_desc) } } From ce9e82622dabeecb4abd2a5cf12184102c541e25 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 15:26:55 +0000 Subject: [PATCH 28/53] Fix broken reference to string resources Change-Id: Ide4cb90abc2ae7ca78488909a37df685c2e71ec6 --- .../apps/nowinandroid/feature/search/SearchScreenTest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index 8a0532e1b..fe01bf4d2 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -38,7 +38,7 @@ import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestD import org.junit.Before import org.junit.Rule import org.junit.Test -import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR +import com.google.samples.apps.nowinandroid.core.ui.R.string /** * UI test for checking the correct behaviour of the Search screen. @@ -73,9 +73,9 @@ class SearchScreenTest { clearSearchContentDesc = getString(R.string.feature_search_clear_search_text_content_desc) clearRecentSearchesContentDesc = getString(R.string.feature_search_clear_recent_searches_content_desc) followButtonContentDesc = - getString(interestsR.string.feature_interests_card_follow_button_content_desc) + getString(string.core_ui_interests_card_follow_button_content_desc) unfollowButtonContentDesc = - getString(interestsR.string.feature_interests_card_unfollow_button_content_desc) + getString(string.core_ui_interests_card_unfollow_button_content_desc) topicsString = getString(R.string.feature_search_topics) updatesString = getString(R.string.feature_search_updates) tryAnotherSearchString = getString(R.string.feature_search_try_another_search) + From b5bfe44bf305fa791eb883b1d6a3636d219293d3 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 16:04:10 +0000 Subject: [PATCH 29/53] Fix spotless Change-Id: I5b08ce68522c59cdd7f7ec56a14a7ebc8b3868cd --- .../apps/nowinandroid/feature/search/SearchScreenTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index fe01bf4d2..a9e2fa98f 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -35,10 +35,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserData import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData +import com.google.samples.apps.nowinandroid.core.ui.R.string import org.junit.Before import org.junit.Rule import org.junit.Test -import com.google.samples.apps.nowinandroid.core.ui.R.string /** * UI test for checking the correct behaviour of the Search screen. From 1d769f13a3e06bd56a8146ef6526a51b844b537f Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 14 Mar 2024 17:40:54 +0000 Subject: [PATCH 30/53] Update module dependency graphs Change-Id: Ia2fe3f339b26bf64dd965fc1aa58a957cb7c7f93 --- docs/images/graphs/dep_graph_app.svg | 336 +++++++++--------- .../graphs/dep_graph_feature_search.svg | 308 ++++++---------- 2 files changed, 262 insertions(+), 382 deletions(-) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg index f305eff13..57a592a8e 100644 --- a/docs/images/graphs/dep_graph_app.svg +++ b/docs/images/graphs/dep_graph_app.svg @@ -4,478 +4,460 @@ - - + + G - + :app - -:app + +:app :feature:interests - -:feature:interests + +:feature:interests :app->:feature:interests - - + + :feature:foryou - -:feature:foryou + +:feature:foryou :app->:feature:foryou - - + + :feature:bookmarks - -:feature:bookmarks + +:feature:bookmarks :app->:feature:bookmarks - - + + :feature:topic - -:feature:topic + +:feature:topic :app->:feature:topic - - + + :feature:search - -:feature:search + +:feature:search :app->:feature:search - - + + :feature:settings - -:feature:settings + +:feature:settings :app->:feature:settings - - + + :core:common - -:core:common + +:core:common :app->:core:common - - + + :core:ui - -:core:ui + +:core:ui :app->:core:ui - - + + :core:designsystem - -:core:designsystem + +:core:designsystem :app->:core:designsystem - - + + :core:data - -:core:data + +:core:data :app->:core:data - - + + :core:model - -:core:model + +:core:model :app->:core:model - - + + :core:analytics - -:core:analytics + +:core:analytics :app->:core:analytics - - + + :sync:work - -:sync:work + +:sync:work :app->:sync:work - - + + :feature:interests->:core:ui - - + + :feature:interests->:core:designsystem - - + + :feature:interests->:core:data - - + + :core:domain - -:core:domain + +:core:domain :feature:interests->:core:domain - - + + :feature:foryou->:core:ui - - + + :feature:foryou->:core:designsystem - - + + :feature:foryou->:core:data - - + + :feature:foryou->:core:domain - - + + :feature:bookmarks->:core:ui - - + + :feature:bookmarks->:core:designsystem - - + + :feature:bookmarks->:core:data - - + + :feature:topic->:core:ui - - + + :feature:topic->:core:designsystem - - + + :feature:topic->:core:data - - - - - -:feature:search->:feature:interests - - - - - -:feature:search->:feature:foryou - - - - - -:feature:search->:feature:bookmarks - - + + :feature:search->:core:ui - - + + :feature:search->:core:designsystem - - + + :feature:search->:core:data - - + + :feature:search->:core:domain - - + + - + :feature:settings->:core:ui - - + + - + :feature:settings->:core:designsystem - - + + - + :feature:settings->:core:data - - + + :core:ui->:core:designsystem - - + + :core:ui->:core:model - - + + :core:ui->:core:analytics - - + + :core:data->:core:common - - + + :core:data->:core:analytics - - + + :core:database - -:core:database + +:core:database :core:data->:core:database - - + + :core:datastore - -:core:datastore + +:core:datastore :core:data->:core:datastore - - + + :core:network - -:core:network + +:core:network :core:data->:core:network - - + + :core:notifications - -:core:notifications + +:core:notifications :core:data->:core:notifications - - + + - + :sync:work->:core:data - - + + - + :sync:work->:core:analytics - - + + :core:domain->:core:data - - + + :core:domain->:core:model - - + + :core:database->:core:model - - + + :core:datastore->:core:common - - + + :core:datastore->:core:model - - + + :core:datastore-proto - -:core:datastore-proto + +:core:datastore-proto :core:datastore->:core:datastore-proto - - + + :core:network->:core:common - - + + :core:network->:core:model - - + + :core:notifications->:core:common - - + + :core:notifications->:core:model - - + + diff --git a/docs/images/graphs/dep_graph_feature_search.svg b/docs/images/graphs/dep_graph_feature_search.svg index b9a3c36c4..24c90cb0c 100644 --- a/docs/images/graphs/dep_graph_feature_search.svg +++ b/docs/images/graphs/dep_graph_feature_search.svg @@ -4,328 +4,226 @@ - - + + G - + :feature:search - -:feature:search + +:feature:search :core:ui - -:core:ui + +:core:ui :feature:search->:core:ui - - + + :core:designsystem - -:core:designsystem + +:core:designsystem :feature:search->:core:designsystem - - + + :core:data - -:core:data + +:core:data :feature:search->:core:data - - + + :core:domain - -:core:domain + +:core:domain :feature:search->:core:domain - - - - - -:feature:bookmarks - -:feature:bookmarks - - - -:feature:search->:feature:bookmarks - - - - - -:feature:foryou - -:feature:foryou - - - -:feature:search->:feature:foryou - - - - - -:feature:interests - -:feature:interests - - - -:feature:search->:feature:interests - - + + - + :core:ui->:core:designsystem - - + + - + :core:analytics - -:core:analytics + +:core:analytics - + :core:ui->:core:analytics - - + + - + :core:model - -:core:model + +:core:model - + :core:ui->:core:model - - + + - + :core:data->:core:analytics - - + + - + :core:common - -:core:common + +:core:common - + :core:data->:core:common - - + + - + :core:database - -:core:database + +:core:database - + :core:data->:core:database - - + + - + :core:datastore - -:core:datastore + +:core:datastore - + :core:data->:core:datastore - - + + - + :core:network - -:core:network + +:core:network - + :core:data->:core:network - - + + - + :core:notifications - -:core:notifications + +:core:notifications - + :core:data->:core:notifications - - + + - + :core:domain->:core:data - - + + - + :core:domain->:core:model - - - - - -:feature:bookmarks->:core:ui - - - - - -:feature:bookmarks->:core:designsystem - - - - - -:feature:bookmarks->:core:data - - - - - -:feature:foryou->:core:ui - - - - - -:feature:foryou->:core:designsystem - - - - - -:feature:foryou->:core:data - - - - - -:feature:foryou->:core:domain - - - - - -:feature:interests->:core:ui - - - - - -:feature:interests->:core:designsystem - - - - - -:feature:interests->:core:data - - - - - -:feature:interests->:core:domain - - + + - + :core:database->:core:model - - + + - + :core:datastore->:core:model - - + + - + :core:datastore->:core:common - - + + - + :core:datastore-proto - -:core:datastore-proto + +:core:datastore-proto - + :core:datastore->:core:datastore-proto - - + + - + :core:network->:core:model - - + + - + :core:network->:core:common - - + + - + :core:notifications->:core:model - - + + - + :core:notifications->:core:common - - + + From 825a5e2f5f7e9821592e646ec8f2259ff4d43397 Mon Sep 17 00:00:00 2001 From: sanao1006 Date: Fri, 15 Mar 2024 09:15:16 +0900 Subject: [PATCH 31/53] [Refactor]: Directly call SearchContentsRepository interface in SearchViewModel - Remove GetSearchContentsCountUseCase. - Remove GetSearchContentsCountUseCase from SearchViewModel. - Remove GetSearchContentsCountUseCase from SearchViewModelTest. Fixes #1283 --- .../domain/GetSearchContentsCountUseCase.kt | 31 ------------------- .../feature/search/SearchViewModel.kt | 6 ++-- .../feature/search/SearchViewModelTest.kt | 16 +++++----- 3 files changed, 12 insertions(+), 41 deletions(-) delete mode 100644 core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt diff --git a/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt deleted file mode 100644 index 3e3e1952e..000000000 --- a/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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. - */ - -package com.google.samples.apps.nowinandroid.core.domain - -import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository -import kotlinx.coroutines.flow.Flow -import javax.inject.Inject - -/** - * A use case which returns total count of *Fts tables - */ -class GetSearchContentsCountUseCase @Inject constructor( - private val searchContentsRepository: SearchContentsRepository, -) { - operator fun invoke(): Flow = - searchContentsRepository.getSearchContentsCount() -} diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 7c05f81c5..f7320e66a 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -23,8 +23,8 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository +import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase -import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult import dagger.hilt.android.lifecycle.HiltViewModel @@ -41,8 +41,8 @@ import javax.inject.Inject @HiltViewModel class SearchViewModel @Inject constructor( getSearchContentsUseCase: GetSearchContentsUseCase, - getSearchContentsCountUseCase: GetSearchContentsCountUseCase, recentSearchQueriesUseCase: GetRecentSearchQueriesUseCase, + private val searchContentsRepository: SearchContentsRepository, private val recentSearchRepository: RecentSearchRepository, private val savedStateHandle: SavedStateHandle, private val analyticsHelper: AnalyticsHelper, @@ -51,7 +51,7 @@ class SearchViewModel @Inject constructor( val searchQuery = savedStateHandle.getStateFlow(key = SEARCH_QUERY, initialValue = "") val searchResultUiState: StateFlow = - getSearchContentsCountUseCase() + searchContentsRepository.getSearchContentsCount() .flatMapLatest { totalCount -> if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT) { flowOf(SearchResultUiState.SearchNotReady) diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index da0d5654e..3834ecd23 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -19,7 +19,6 @@ package com.google.samples.apps.nowinandroid.feature.search import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.NoOpAnalyticsHelper import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase -import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData import com.google.samples.apps.nowinandroid.core.testing.data.topicsTestData @@ -59,15 +58,14 @@ class SearchViewModelTest { ) private val recentSearchRepository = TestRecentSearchRepository() private val getRecentQueryUseCase = GetRecentSearchQueriesUseCase(recentSearchRepository) - private val getSearchContentsCountUseCase = GetSearchContentsCountUseCase(searchContentsRepository) private lateinit var viewModel: SearchViewModel @Before fun setup() { viewModel = SearchViewModel( getSearchContentsUseCase = getSearchContentsUseCase, - getSearchContentsCountUseCase = getSearchContentsCountUseCase, recentSearchQueriesUseCase = getRecentQueryUseCase, + searchContentsRepository = searchContentsRepository, savedStateHandle = SavedStateHandle(), recentSearchRepository = recentSearchRepository, analyticsHelper = NoOpAnalyticsHelper(), @@ -84,7 +82,8 @@ class SearchViewModelTest { fun stateIsEmptyQuery_withEmptySearchQuery() = runTest { searchContentsRepository.addNewsResources(newsResourcesTestData) searchContentsRepository.addTopics(topicsTestData) - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + val collectJob = + launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") @@ -95,7 +94,8 @@ class SearchViewModelTest { @Test fun emptyResultIsReturned_withNotMatchingQuery() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + val collectJob = + launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("XXX") searchContentsRepository.addNewsResources(newsResourcesTestData) @@ -109,7 +109,8 @@ class SearchViewModelTest { @Test fun recentSearches_verifyUiStateIsSuccess() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } + val collectJob = + launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } viewModel.onSearchTriggered("kotlin") val result = viewModel.recentSearchQueriesUiState.value @@ -120,7 +121,8 @@ class SearchViewModelTest { @Test fun searchNotReady_withNoFtsTableEntity() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + val collectJob = + launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") From c7e9dd3803da01033cbfa817f3b987bcde33f4a1 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 15 Mar 2024 08:19:57 +0000 Subject: [PATCH 32/53] Update method name. Fixes #1287 Change-Id: I9b603bd33f7be0f7562aab4a7b6f2307a3a1333a --- .../samples/apps/nowinandroid/feature/search/SearchViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 43d5b9405..ad6ca6112 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -116,7 +116,7 @@ class SearchViewModel @Inject constructor( fun setNewsResourceBookmarked(newsResourceId: String, isChecked: Boolean) { viewModelScope.launch { - userDataRepository.updateNewsResourceBookmark(newsResourceId, isChecked) + userDataRepository.setNewsResourceBookmarked(newsResourceId, isChecked) } } From 70dcd5119d694b6582eee27fe71952fc2667fd95 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 15 Mar 2024 13:32:00 +0000 Subject: [PATCH 33/53] Make path to module graph image dynamic. Fixes #1286 Change-Id: I595a841ef7b06cccc959ca96d18824f4fad4c261 --- app-nia-catalog/README.md | 2 +- app/README.md | 2 +- generateModuleGraphs.sh | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app-nia-catalog/README.md b/app-nia-catalog/README.md index 99503ba84..cf6d05f4f 100644 --- a/app-nia-catalog/README.md +++ b/app-nia-catalog/README.md @@ -1,3 +1,3 @@ # :app-nia-catalog module ## Dependency graph -![Dependency graph](../../docs/images/graphs/dep_graph_app_nia_catalog.svg) +![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.svg) diff --git a/app/README.md b/app/README.md index f80083494..a3fb4572a 100644 --- a/app/README.md +++ b/app/README.md @@ -1,3 +1,3 @@ # :app module ## Dependency graph -![Dependency graph](../../docs/images/graphs/dep_graph_app.svg) +![Dependency graph](../docs/images/graphs/dep_graph_app.svg) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index 27dea22da..faeac9a30 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -56,14 +56,23 @@ check_and_create_readme() { local file_name="$2" local readme_path="${module_path:1}" # Remove leading colon - readme_path=${readme_path//:/\/} # Replace colons with slashes using sed + readme_path=${readme_path//:/\/} # Replace colons with slashes readme_path="${readme_path}/README.md" #Append the filename # Check if README.md exists and create it if not if [[ ! -f "$readme_path" ]]; then echo "Creating README.md for ${module_path}" - # Calculate the correct relative path to the image - local relative_image_path="../../docs/images/graphs/${file_name}.svg" + + # Determine the depth of the module based on the number of colons + local depth=$(awk -F: '{print NF-1}' <<< "${module_path}") + + # Construct the relative image path with the correct number of "../" + local relative_image_path="../" + for ((i=1; i<$depth; i++)); do + relative_image_path+="../" + done + relative_image_path+="docs/images/graphs/${file_name}.svg" + echo "# ${module_path} module" > "$readme_path" echo "## Dependency graph" >> "$readme_path" echo "![Dependency graph](${relative_image_path})" >> "$readme_path" From dac1a9e446dd8bd41012227ba59bb65ffba7adad Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Fri, 15 Mar 2024 09:39:26 -0700 Subject: [PATCH 34/53] Topic detail pane placeholder (#1280) * Topic detail pane placeholder Change-Id: I92b84493a5406240285c0759b30aa10d29871f09 * Add modifier parameter Change-Id: Ie363be83b44f26291030c04c1513cecb851a6899 --- .../InterestsListDetailScreen.kt | 7 +- .../feature/topic/TopicDetailPlaceholder.kt | 71 +++++++++++++++++++ .../feature_topic_ic_topic_placeholder.xml | 55 ++++++++++++++ feature/topic/src/main/res/values/strings.xml | 1 + 4 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt create mode 100644 feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml 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 b3594b81f..335f83371 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 @@ -17,8 +17,6 @@ package com.google.samples.apps.nowinandroid.ui.interests2pane import androidx.activity.compose.BackHandler -import androidx.compose.foundation.layout.Box -import androidx.compose.material3.Text import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole @@ -39,6 +37,7 @@ import androidx.navigation.navArgument import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.INTERESTS_ROUTE import com.google.samples.apps.nowinandroid.feature.interests.navigation.TOPIC_ID_ARG +import com.google.samples.apps.nowinandroid.feature.topic.TopicDetailPlaceholder import com.google.samples.apps.nowinandroid.feature.topic.navigation.TOPIC_ROUTE import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen @@ -113,9 +112,7 @@ internal fun InterestsListDetailScreen( onTopicClick = ::onTopicClickShowDetailPane, ) composable(route = TOPIC_ROUTE) { - Box { - Text("Placeholder") - } + TopicDetailPlaceholder() } } }, diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt new file mode 100644 index 000000000..627fb8fb3 --- /dev/null +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt @@ -0,0 +1,71 @@ +/* + * 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.feature.topic + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme + +@Composable +fun TopicDetailPlaceholder(modifier: Modifier = Modifier) { + Card( + modifier = modifier, + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant), + shape = RoundedCornerShape(24.dp, 24.dp, 0.dp, 0.dp), + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy( + 20.dp, + alignment = Alignment.CenterVertically, + ), + ) { + Icon( + painter = painterResource(id = R.drawable.feature_topic_ic_topic_placeholder), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + Text( + text = stringResource(id = R.string.feature_topic_select_an_interest), + style = MaterialTheme.typography.titleLarge, + ) + } + } +} + +@Preview(widthDp = 200, heightDp = 300) +@Composable +fun TopicDetailPlaceholderPreview() { + NiaTheme { + TopicDetailPlaceholder() + } +} diff --git a/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml b/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml new file mode 100644 index 000000000..0518401da --- /dev/null +++ b/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml @@ -0,0 +1,55 @@ + + + + + + + + + + diff --git a/feature/topic/src/main/res/values/strings.xml b/feature/topic/src/main/res/values/strings.xml index 5fefc3f42..fe4a6dc29 100644 --- a/feature/topic/src/main/res/values/strings.xml +++ b/feature/topic/src/main/res/values/strings.xml @@ -16,4 +16,5 @@ --> Loading topic + Select an Interest From 27ca860745f0d3070119a64fde668ab68f518bbc Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 16 Mar 2024 21:35:20 +0900 Subject: [PATCH 35/53] Rename fake to demo. Change-Id: I5b1d7963e623832a766900aa74ef1085aac0cacc --- .../data/test/repository/FakeNewsRepository.kt | 4 ++-- .../data/test/repository/FakeTopicsRepository.kt | 4 ++-- .../data/testdoubles/TestNiaNetworkDataSource.kt | 4 ++-- .../core/network/di/FlavoredNetworkModule.kt | 4 ++-- ...etManager.kt => JvmUnitTestDemoAssetManager.kt} | 4 ++-- .../DemoAssetManager.kt} | 6 +++--- .../DemoNiaNetworkDataSource.kt} | 10 +++++----- .../nowinandroid/core/network/di/NetworkModule.kt | 4 ++-- .../DemoNiaNetworkDataSourceTest.kt} | 14 +++++++------- 9 files changed, 27 insertions(+), 27 deletions(-) rename core/network/src/main/kotlin/{JvmUnitTestFakeAssetManager.kt => JvmUnitTestDemoAssetManager.kt} (92%) rename core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/{fake/FakeAssetManager.kt => demo/DemoAssetManager.kt} (81%) rename core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/{fake/FakeNiaNetworkDataSource.kt => demo/DemoNiaNetworkDataSource.kt} (91%) rename core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/{fake/FakeNiaNetworkDataSourceTest.kt => demo/DemoNiaNetworkDataSourceTest.kt} (90%) diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt index 5ceff4dd0..070c7ed38 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt @@ -25,7 +25,7 @@ import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow @@ -41,7 +41,7 @@ import javax.inject.Inject */ internal class FakeNewsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource, + private val datasource: DemoNiaNetworkDataSource, ) : NewsRepository { override fun getNewsResources( diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt index f8ebca29e..0b81dd309 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt @@ -21,7 +21,7 @@ import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepositor import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -38,7 +38,7 @@ import javax.inject.Inject */ internal class FakeTopicsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource, + private val datasource: DemoNiaNetworkDataSource, ) : TopicsRepository { override fun getTopics(): Flow> = flow { emit( diff --git a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt index 7f9a69959..7675af7e9 100644 --- a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.data.testdoubles import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic @@ -35,7 +35,7 @@ enum class CollectionType { */ class TestNiaNetworkDataSource : NiaNetworkDataSource { - private val source = FakeNiaNetworkDataSource( + private val source = DemoNiaNetworkDataSource( UnconfinedTestDispatcher(), Json { ignoreUnknownKeys = true }, ) diff --git a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index 850b00201..42c2ffe8f 100644 --- a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.network.di import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -28,5 +28,5 @@ import dagger.hilt.components.SingletonComponent internal interface FlavoredNetworkModule { @Binds - fun binds(impl: FakeNiaNetworkDataSource): NiaNetworkDataSource + fun binds(impl: DemoNiaNetworkDataSource): NiaNetworkDataSource } diff --git a/core/network/src/main/kotlin/JvmUnitTestFakeAssetManager.kt b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt similarity index 92% rename from core/network/src/main/kotlin/JvmUnitTestFakeAssetManager.kt rename to core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt index 79370d5a8..9c86a5c2e 100644 --- a/core/network/src/main/kotlin/JvmUnitTestFakeAssetManager.kt +++ b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt @@ -15,7 +15,7 @@ */ import androidx.annotation.VisibleForTesting -import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager +import com.google.samples.apps.nowinandroid.core.network.demo.DemoAssetManager import java.io.File import java.io.InputStream import java.util.Properties @@ -26,7 +26,7 @@ import java.util.Properties * @see UnitTestOptions */ @VisibleForTesting -internal object JvmUnitTestFakeAssetManager : FakeAssetManager { +internal object JvmUnitTestDemoAssetManager : DemoAssetManager { private val config = requireNotNull(javaClass.getResource("com/android/tools/test_config.properties")) { """ diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt similarity index 81% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt index 53ad7d48d..e5fb07bb3 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo import java.io.InputStream -fun interface FakeAssetManager { +fun interface DemoAssetManager { fun open(fileName: String): InputStream } diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt similarity index 91% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt index 6ef90ecff..b7c912c00 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo -import JvmUnitTestFakeAssetManager +import JvmUnitTestDemoAssetManager import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource @@ -33,10 +33,10 @@ import javax.inject.Inject /** * [NiaNetworkDataSource] implementation that provides static news resources to aid development */ -class FakeNiaNetworkDataSource @Inject constructor( +class DemoNiaNetworkDataSource @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, private val networkJson: Json, - private val assets: FakeAssetManager = JvmUnitTestFakeAssetManager, + private val assets: DemoAssetManager = JvmUnitTestDemoAssetManager, ) : NiaNetworkDataSource { @OptIn(ExperimentalSerializationApi::class) diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index a68683c7c..a99464304 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -22,7 +22,7 @@ import coil.ImageLoader import coil.decode.SvgDecoder import coil.util.DebugLogger import com.google.samples.apps.nowinandroid.core.network.BuildConfig -import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager +import com.google.samples.apps.nowinandroid.core.network.demo.DemoAssetManager import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -48,7 +48,7 @@ internal object NetworkModule { @Singleton fun providesFakeAssetManager( @ApplicationContext context: Context, - ): FakeAssetManager = FakeAssetManager(context.assets::open) + ): DemoAssetManager = DemoAssetManager(context.assets::open) @Provides @Singleton diff --git a/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt similarity index 90% rename from core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt rename to core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt index a0c60fdcb..e60cfeb3e 100644 --- a/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo -import JvmUnitTestFakeAssetManager +import JvmUnitTestDemoAssetManager import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import kotlinx.coroutines.test.StandardTestDispatcher @@ -29,18 +29,18 @@ import org.junit.Before import org.junit.Test import kotlin.test.assertEquals -class FakeNiaNetworkDataSourceTest { +class DemoNiaNetworkDataSourceTest { - private lateinit var subject: FakeNiaNetworkDataSource + private lateinit var subject: DemoNiaNetworkDataSource private val testDispatcher = StandardTestDispatcher() @Before fun setUp() { - subject = FakeNiaNetworkDataSource( + subject = DemoNiaNetworkDataSource( ioDispatcher = testDispatcher, networkJson = Json { ignoreUnknownKeys = true }, - assets = JvmUnitTestFakeAssetManager, + assets = JvmUnitTestDemoAssetManager, ) } From 5d99f381e934f471187aa80ec46a310ff91e6738 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 16 Mar 2024 21:37:45 +0900 Subject: [PATCH 36/53] Remove VisibleForTesting. Change-Id: Icd7005ec38495a1a4bc6f1594f70a2c1228538ab --- core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt index 9c86a5c2e..2ef418517 100644 --- a/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt +++ b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt @@ -14,7 +14,6 @@ * limitations under the License. */ -import androidx.annotation.VisibleForTesting import com.google.samples.apps.nowinandroid.core.network.demo.DemoAssetManager import java.io.File import java.io.InputStream @@ -25,7 +24,7 @@ import java.util.Properties * It must remain on the root package for an easier [Class.getResource] with relative paths. * @see UnitTestOptions */ -@VisibleForTesting + internal object JvmUnitTestDemoAssetManager : DemoAssetManager { private val config = requireNotNull(javaClass.getResource("com/android/tools/test_config.properties")) { From a5be299e3d7d237ae9bf0e1611b8fefbb7398e25 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 16 Mar 2024 22:30:41 +0900 Subject: [PATCH 37/53] Move main to demo. Change-Id: I48bb3c26ef02d6302cb7caabcaa17d5b4659031a --- .../apps/nowinandroid/core/network/demo/DemoAssetManager.kt | 0 .../nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename core/network/src/{main => demo}/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt (100%) rename core/network/src/{main => demo}/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt (100%) diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt rename to core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt similarity index 100% rename from core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt rename to core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt From 2739168e33b475b5ed1b8c021667c018aea5eb43 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sat, 16 Mar 2024 22:54:49 +0900 Subject: [PATCH 38/53] Revert "Move main to demo." This reverts commit a5be299e3d7d237ae9bf0e1611b8fefbb7398e25. --- .../apps/nowinandroid/core/network/demo/DemoAssetManager.kt | 0 .../nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename core/network/src/{demo => main}/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt (100%) rename core/network/src/{demo => main}/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt (100%) diff --git a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt similarity index 100% rename from core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt diff --git a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt similarity index 100% rename from core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt From cd294a8654cff748f1b2114ae7b126be27581fa3 Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sun, 17 Mar 2024 11:37:32 +0900 Subject: [PATCH 39/53] Change lint ignore name in lint.xml. Change-Id: I3b1e19dedd238ec96bd8debee5fcbcc91bc25094 --- core/network/lint.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/network/lint.xml b/core/network/lint.xml index 59fd50bd5..07c0cae9e 100644 --- a/core/network/lint.xml +++ b/core/network/lint.xml @@ -20,6 +20,6 @@ java.lang.IllegalStateException: () -> kotlin.String at org.jetbrains.kotlin.asJava.classes.KtLightClassForFacadeImpl$Companion.createForFacadeNoCache --> - + From ee8797f940baa23cf32e0fd3c72ec81d40044741 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 17 Mar 2024 13:21:40 +0000 Subject: [PATCH 40/53] Delete unused `combine` extension in `SyncUtilities.kt` --- .../nowinandroid/core/data/SyncUtilities.kt | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt index 5d069dbaf..878c8ee2f 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt @@ -19,8 +19,6 @@ package com.google.samples.apps.nowinandroid.core.data import android.util.Log import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine import kotlin.coroutines.cancellation.CancellationException /** @@ -104,29 +102,3 @@ suspend fun Synchronizer.changeListSync( versionUpdater(latestVersion) } }.isSuccess - -/** - * Returns a [Flow] whose values are generated by [transform] function that process the most - * recently emitted values by each flow. - */ -fun combine( - flow: Flow, - flow2: Flow, - flow3: Flow, - flow4: Flow, - flow5: Flow, - flow6: Flow, - transform: suspend (T1, T2, T3, T4, T5, T6) -> R, -): Flow = combine( - combine(flow, flow2, flow3, ::Triple), - combine(flow4, flow5, flow6, ::Triple), -) { t1, t2 -> - transform( - t1.first, - t1.second, - t1.third, - t2.first, - t2.second, - t2.third, - ) -} From 2e16bea60ed17c4fdadbafdd1a12e951745b0129 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 08:52:23 +0000 Subject: [PATCH 41/53] Bump accompanist from 0.32.0 to 0.34.0 Bumps `accompanist` from 0.32.0 to 0.34.0. Updates `com.google.accompanist:accompanist-permissions` from 0.32.0 to 0.34.0 - [Release notes](https://github.com/google/accompanist/releases) - [Commits](https://github.com/google/accompanist/compare/v0.32.0...v0.34.0) Updates `com.google.accompanist:accompanist-testharness` from 0.32.0 to 0.34.0 - [Release notes](https://github.com/google/accompanist/releases) - [Commits](https://github.com/google/accompanist/compare/v0.32.0...v0.34.0) --- updated-dependencies: - dependency-name: com.google.accompanist:accompanist-permissions dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.accompanist:accompanist-testharness dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4e397175c..26da6907d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -accompanist = "0.32.0" +accompanist = "0.34.0" androidDesugarJdkLibs = "2.0.4" # AGP and tools should be updated together androidGradlePlugin = "8.3.0" From 7d2026f180efd7810ab6f586701e4c78255012c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 18 Mar 2024 08:56:07 +0000 Subject: [PATCH 42/53] =?UTF-8?q?=F0=9F=A4=96=20Updates=20baselines=20for?= =?UTF-8?q?=20Dependency=20Guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dependencies/prodReleaseRuntimeClasspath.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 69cf3e50e..85adaf6fc 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -130,7 +130,7 @@ androidx.work:work-runtime-ktx:2.9.0 androidx.work:work-runtime:2.9.0 com.caverock:androidsvg-aar:1.4 com.google.accompanist:accompanist-drawablepainter:0.32.0 -com.google.accompanist:accompanist-permissions:0.32.0 +com.google.accompanist:accompanist-permissions:0.34.0 com.google.android.datatransport:transport-api:3.0.0 com.google.android.datatransport:transport-backend-cct:3.1.9 com.google.android.datatransport:transport-runtime:3.1.9 @@ -195,8 +195,6 @@ io.coil-kt:coil-compose-base:2.6.0 io.coil-kt:coil-compose:2.6.0 io.coil-kt:coil-svg:2.6.0 io.coil-kt:coil:2.6.0 -io.github.aakira:napier-android:1.4.1 -io.github.aakira:napier:1.4.1 javax.inject:javax.inject:1 org.checkerframework:checker-qual:3.12.0 org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22 From 3c70183ce61d4f0e6b5856a3dc406c3c89cf047d Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Mon, 18 Mar 2024 19:28:06 +0900 Subject: [PATCH 43/53] Change name Fake to Demo. Change-Id: Ife321dd95238227bfdfc1f13f6832472bd699b6f --- .../samples/apps/nowinandroid/core/network/di/NetworkModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index a99464304..a97540f2b 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -46,7 +46,7 @@ internal object NetworkModule { @Provides @Singleton - fun providesFakeAssetManager( + fun providesDemoAssetManager( @ApplicationContext context: Context, ): DemoAssetManager = DemoAssetManager(context.assets::open) From 8e87f98e30381677d56f9c9311ec2be1fa009b2e Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 18 Mar 2024 11:10:22 +0000 Subject: [PATCH 44/53] Update ArchitectureLearningJourney.md --- docs/ArchitectureLearningJourney.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/ArchitectureLearningJourney.md b/docs/ArchitectureLearningJourney.md index 925858111..39105ac75 100644 --- a/docs/ArchitectureLearningJourney.md +++ b/docs/ArchitectureLearningJourney.md @@ -25,6 +25,8 @@ The app architecture has three layers: a [data layer](https://developer.android. Diagram showing overall app architecture +> [!NOTE] +> The official Android Architecture is different from other architectures, such as "Clean Architecture". Concepts from other architectures may not apply here, or be applied in different ways. [More discussion here](https://github.com/android/nowinandroid/discussions/1273). The architecture follows a reactive programming model with [unidirectional data flow](https://developer.android.com/jetpack/guide/ui-layer#udf). With the data layer at the bottom, the key concepts are: From 11cd58e74ec59e7b57f65dc1484bb981e5e81b5a Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 18 Mar 2024 11:11:14 +0000 Subject: [PATCH 45/53] Update docs/ArchitectureLearningJourney.md --- docs/ArchitectureLearningJourney.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ArchitectureLearningJourney.md b/docs/ArchitectureLearningJourney.md index 39105ac75..d98dadf1e 100644 --- a/docs/ArchitectureLearningJourney.md +++ b/docs/ArchitectureLearningJourney.md @@ -26,7 +26,7 @@ The app architecture has three layers: a [data layer](https://developer.android. > [!NOTE] -> The official Android Architecture is different from other architectures, such as "Clean Architecture". Concepts from other architectures may not apply here, or be applied in different ways. [More discussion here](https://github.com/android/nowinandroid/discussions/1273). +> The official Android architecture is different from other architectures, such as "Clean Architecture". Concepts from other architectures may not apply here, or be applied in different ways. [More discussion here](https://github.com/android/nowinandroid/discussions/1273). The architecture follows a reactive programming model with [unidirectional data flow](https://developer.android.com/jetpack/guide/ui-layer#udf). With the data layer at the bottom, the key concepts are: From 3534a6fd0da5a4b93c763696184a2f42741843ec Mon Sep 17 00:00:00 2001 From: lihenggui Date: Mon, 18 Mar 2024 21:29:34 -0700 Subject: [PATCH 46/53] Ensure folder initialization and add instructions for Ubuntu users --- generateModuleGraphs.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index faeac9a30..fb2d74712 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -25,7 +25,9 @@ if ! command -v dot &> /dev/null then echo "The 'dot' command is not found. This is required to generate SVGs from the Graphviz files." - echo "On macOS, you can install it using Homebrew: 'brew install graphviz'" + echo "Installation instructions:" + echo " - On macOS: You can install Graphviz using Homebrew with the command: 'brew install graphviz'" + echo " - On Ubuntu: You can install Graphviz using APT with the command: 'sudo apt-get install graphviz'" exit 1 fi @@ -50,6 +52,9 @@ done # Get the module paths module_paths=$(./gradlew -q printModulePaths --no-configuration-cache) +# Ensure the output directory exists +mkdir -p docs/images/graphs/ + # Function to check and create a README.md for modules which don't have one. check_and_create_readme() { local module_path="$1" From e2a4706470295ddad37e93f818f1d46588f1994f Mon Sep 17 00:00:00 2001 From: yongsuk44 Date: Wed, 20 Mar 2024 01:07:54 +0900 Subject: [PATCH 47/53] Remove unnecessary opt-in annotations --- .../kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt | 2 -- .../apps/nowinandroid/core/designsystem/component/Chip.kt | 2 -- .../samples/apps/nowinandroid/core/ui/NewsResourceCard.kt | 2 -- .../samples/apps/nowinandroid/feature/search/SearchScreen.kt | 2 -- 4 files changed, 8 deletions(-) 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 b2eabe2ed..eaed15a4e 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 @@ -17,7 +17,6 @@ package com.google.samples.apps.nowinandroid.ui import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides @@ -78,7 +77,6 @@ import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR @OptIn( ExperimentalMaterial3Api::class, - ExperimentalLayoutApi::class, ExperimentalComposeUiApi::class, ) @Composable diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt index 9497bd92d..fe34cfaed 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt @@ -18,7 +18,6 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.Icon @@ -43,7 +42,6 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme * @param label The text label content. */ @Composable -@OptIn(ExperimentalMaterial3Api::class) fun NiaFilterChip( selected: Boolean, onSelectedChange: (Boolean) -> Unit, diff --git a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt index e3fd29e9a..e60c498eb 100644 --- a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt @@ -33,7 +33,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -78,7 +77,6 @@ import java.util.Locale * [NewsResource] card used on the following screens: For You, Saved */ -@OptIn(ExperimentalMaterial3Api::class) @Composable fun NewsResourceCardExpanded( userNewsResource: UserNewsResource, diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt index 1e4711016..86b1eb717 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt @@ -55,7 +55,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester @@ -464,7 +463,6 @@ private fun SearchToolbar( } } -@OptIn(ExperimentalComposeUiApi::class) @Composable private fun SearchTextField( searchQuery: String, From af7729586c25a10c7c62dcc6a9c00cf0d4d27c57 Mon Sep 17 00:00:00 2001 From: yongsuk44 Date: Wed, 20 Mar 2024 01:09:14 +0900 Subject: [PATCH 48/53] Remove empty primary constructors --- .../nowinandroid/core/designsystem/FilterChipScreenshotTests.kt | 2 +- .../core/designsystem/LoadingWheelScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/NavigationScreenshotTests.kt | 2 +- .../apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt | 2 +- .../apps/nowinandroid/core/designsystem/TagScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt index 2c9bc91ec..92d5467ae 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt @@ -45,7 +45,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class FilterChipScreenshotTests() { +class FilterChipScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt index 9f80d04e5..9bdaca670 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt @@ -39,7 +39,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class LoadingWheelScreenshotTests() { +class LoadingWheelScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt index e2e92b570..1d1e70f7d 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt @@ -46,7 +46,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class NavigationScreenshotTests() { +class NavigationScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt index 9190d5f35..19f7bea87 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt @@ -44,7 +44,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class TabsScreenshotTests() { +class TabsScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt index d9edfd6c6..d18f7dec5 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt @@ -41,7 +41,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class TagScreenshotTests() { +class TagScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt index 6fac01562..325d9a501 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt @@ -45,7 +45,7 @@ import org.robolectric.annotation.LooperMode @GraphicsMode(GraphicsMode.Mode.NATIVE) @Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) -class TopAppBarScreenshotTests() { +class TopAppBarScreenshotTests { @get:Rule val composeTestRule = createAndroidComposeRule() From d9b66c4cace93ebc5ab642a40480b0a7fbb0de98 Mon Sep 17 00:00:00 2001 From: sangyoon Date: Thu, 21 Mar 2024 16:24:05 +0900 Subject: [PATCH 49/53] clean up di module in core.database package --- .../apps/nowinandroid/core/database/{ => di}/DaosModule.kt | 5 +++-- .../nowinandroid/core/database/{ => di}/DatabaseModule.kt | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) rename core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/{ => di}/DaosModule.kt (90%) rename core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/{ => di}/DatabaseModule.kt (86%) diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt similarity index 90% rename from core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt index afbbf42e6..e7456054e 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,8 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.database +package com.google.samples.apps.nowinandroid.core.database.di +import com.google.samples.apps.nowinandroid.core.database.NiaDatabase import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt similarity index 86% rename from core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt index c6e33f284..d79d35948 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,11 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.database +package com.google.samples.apps.nowinandroid.core.database.di import android.content.Context import androidx.room.Room +import com.google.samples.apps.nowinandroid.core.database.NiaDatabase import dagger.Module import dagger.Provides import dagger.hilt.InstallIn From 78e3725f9fb01df9c250c6983144fdb6f5abdb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Alc=C3=A9rreca?= Date: Mon, 25 Mar 2024 18:51:44 +0100 Subject: [PATCH 50/53] Sets up jacoco coverage with a combined report and a GHA (#1303) * Uses jacoco coverage reporting in AGP --- .github/workflows/Build.yaml | 45 +++++++++-- app/build.gradle.kts | 1 - ...ndroidApplicationJacocoConventionPlugin.kt | 17 +++-- .../AndroidLibraryJacocoConventionPlugin.kt | 18 +++-- .../samples/apps/nowinandroid/Jacoco.kt | 74 +++++++++++++------ gradle.properties | 3 + 6 files changed, 115 insertions(+), 43 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 001140a87..db326c380 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -17,6 +17,7 @@ jobs: permissions: contents: write + pull-requests: write timeout-minutes: 60 @@ -100,12 +101,13 @@ jobs: commit_message: "🤖 Updates screenshots" # Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. - - name: Run local tests + - name: Run local tests and create report if: always() run: ./gradlew testDemoDebug :lint:test # Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when # https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a # release build + - name: Build all build type and flavor permutations run: ./gradlew :app:assemble :benchmarks:assemble -x pixel6Api33ProdNonMinifiedReleaseAndroidTest @@ -119,11 +121,11 @@ jobs: name: APKs path: '**/build/outputs/apk/**/*.apk' - - name: Upload test results (XML) + - name: Upload JVM local results (XML) if: always() uses: actions/upload-artifact@v4 with: - name: test-results + name: local-test-results path: '**/build/test-results/test*UnitTest/**.xml' - name: Check lint @@ -180,10 +182,7 @@ jobs: - name: Setup Gradle uses: gradle/gradle-build-action@v3 - - name: Build projects before running emulator - run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest - - - name: Run instrumentation tests + - name: Build projects and run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} @@ -193,9 +192,41 @@ jobs: heap-size: 600M script: ./gradlew connectedDemoDebugAndroidTest --daemon + - name: Run local tests (including Roborazzi) for the combined coverage report (only API 30) + if: matrix.api-level == 30 + # There is no need to verify Roborazzi tests to generate coverage. + run: ./gradlew testDemoDebugUnitTest -Proborazzi.test.verify=false # Add Prod if we ever add JVM tests for prod + + # Add `createProdDebugUnitTestCoverageReport` if we ever add JVM tests for prod + - name: Generate coverage reports for Debug variants (only API 30) + if: matrix.api-level == 30 + run: ./gradlew createDemoDebugCombinedCoverageReport + - name: Upload test reports if: always() uses: actions/upload-artifact@v4 with: name: test-reports-${{ matrix.api-level }} path: '**/build/reports/androidTests' + + - name: Display local test coverage (only API 30) + if: matrix.api-level == 30 + id: jacoco + uses: madrapps/jacoco-report@v1.6.1 + with: + title: Combined test coverage report + min-coverage-overall: 40 + min-coverage-changed-files: 60 + paths: | + ${{ github.workspace }}/**/build/reports/jacoco/**/*Report.xml + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload local coverage reports (XML + HTML) (only API 30) + if: matrix.api-level == 30 + uses: actions/upload-artifact@v4 + with: + name: coverage-reports + if-no-files-found: error + compression-level: 1 + overwrite: false + path: '**/build/reports/jacoco/' diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9e68ffa7d..2fe18645e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,7 +21,6 @@ plugins { alias(libs.plugins.nowinandroid.android.application.flavors) alias(libs.plugins.nowinandroid.android.application.jacoco) alias(libs.plugins.nowinandroid.android.hilt) - id("jacoco") alias(libs.plugins.nowinandroid.android.application.firebase) id("com.google.android.gms.oss-licenses-plugin") alias(libs.plugins.baselineprofile) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt index 4c3acc520..ac385b0d9 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt @@ -15,6 +15,7 @@ */ import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.google.samples.apps.nowinandroid.configureJacoco import org.gradle.api.Plugin import org.gradle.api.Project @@ -23,13 +24,15 @@ import org.gradle.kotlin.dsl.getByType class AndroidApplicationJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - with(pluginManager) { - apply("org.gradle.jacoco") - apply("com.android.application") + pluginManager.apply("jacoco") + val androidExtension = extensions.getByType() + + androidExtension.buildTypes.configureEach { + enableAndroidTestCoverage = true + enableUnitTestCoverage = true } - val extension = extensions.getByType() - configureJacoco(extension) + + configureJacoco(extensions.getByType()) } } - -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt index 86ca091c3..6f2ff60c5 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +import com.android.build.api.dsl.LibraryExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension import com.google.samples.apps.nowinandroid.configureJacoco import org.gradle.api.Plugin @@ -23,13 +25,15 @@ import org.gradle.kotlin.dsl.getByType class AndroidLibraryJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - with(pluginManager) { - apply("org.gradle.jacoco") - apply("com.android.library") + pluginManager.apply("jacoco") + val androidExtension = extensions.getByType() + + androidExtension.buildTypes.configureEach { + enableAndroidTestCoverage = true + enableUnitTestCoverage = true } - val extension = extensions.getByType() - configureJacoco(extension) + + configureJacoco(extensions.getByType()) } } - -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt index 596c4f579..7820a978e 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.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. @@ -16,8 +16,13 @@ package com.google.samples.apps.nowinandroid +import com.android.build.api.artifact.ScopedArtifact import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ScopedArtifacts import org.gradle.api.Project +import org.gradle.api.file.Directory +import org.gradle.api.file.RegularFile +import org.gradle.api.provider.ListProperty import org.gradle.api.tasks.testing.Test import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.register @@ -32,13 +37,24 @@ private val coverageExclusions = listOf( "**/R.class", "**/R\$*.class", "**/BuildConfig.*", - "**/Manifest*.*" + "**/Manifest*.*", + "**/*_Hilt*.class", + "**/Hilt_*.class", ) private fun String.capitalize() = replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } +/** + * Creates a new task that generates a combined coverage report with data from local and + * instrumented tests. + * + * `create{variant}CombinedCoverageReport` + * + * Note that coverage data must exist before running the task. This allows us to run device + * tests on CI using a different Github Action or an external device farm. + */ internal fun Project.configureJacoco( androidComponentsExtension: AndroidComponentsExtension<*, *, *>, ) { @@ -46,37 +62,53 @@ internal fun Project.configureJacoco( toolVersion = libs.findVersion("jacoco").get().toString() } - val jacocoTestReport = tasks.create("jacocoTestReport") - androidComponentsExtension.onVariants { variant -> - val testTaskName = "test${variant.name.capitalize()}UnitTest" + val myObjFactory = project.objects val buildDir = layout.buildDirectory.get().asFile - val reportTask = tasks.register("jacoco${testTaskName.capitalize()}Report", JacocoReport::class) { - dependsOn(testTaskName) + val allJars: ListProperty = myObjFactory.listProperty(RegularFile::class.java) + val allDirectories: ListProperty = myObjFactory.listProperty(Directory::class.java) + val reportTask = + tasks.register("create${variant.name.capitalize()}CombinedCoverageReport", JacocoReport::class) { - reports { - xml.required.set(true) - html.required.set(true) - } - - classDirectories.setFrom( - fileTree("$buildDir/tmp/kotlin-classes/${variant.name}") { - exclude(coverageExclusions) + classDirectories.setFrom( + allJars, + allDirectories.map { dirs -> + dirs.map { dir -> + myObjFactory.fileTree().setDir(dir).exclude(coverageExclusions) + } + } + ) + reports { + xml.required.set(true) + html.required.set(true) } - ) - sourceDirectories.setFrom(files("$projectDir/src/main/java", "$projectDir/src/main/kotlin")) - executionData.setFrom(file("$buildDir/jacoco/$testTaskName.exec")) - } + // TODO: This is missing files in src/debug/, src/prod, src/demo, src/demoDebug... + sourceDirectories.setFrom(files("$projectDir/src/main/java", "$projectDir/src/main/kotlin")) + + executionData.setFrom( + project.fileTree("$buildDir/outputs/unit_test_code_coverage/${variant.name}UnitTest") + .matching { include("**/*.exec") }, + + project.fileTree("$buildDir/outputs/code_coverage/${variant.name}AndroidTest") + .matching { include("**/*.ec") } + ) + } + - jacocoTestReport.dependsOn(reportTask) + variant.artifacts.forScope(ScopedArtifacts.Scope.PROJECT) + .use(reportTask) + .toGet( + ScopedArtifact.CLASSES, + { _ -> allJars }, + { _ -> allDirectories }, + ) } tasks.withType().configureEach { configure { // Required for JaCoCo + Robolectric // https://github.com/robolectric/robolectric/issues/2230 - // TODO: Consider removing if not we don't add Robolectric isIncludeNoLocationClasses = true // Required for JDK 11 with the above diff --git a/gradle.properties b/gradle.properties index c0acfeb02..97f940e2e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,3 +39,6 @@ kotlin.code.style=official # https://developer.android.com/build/releases/gradle-plugin#default-changes android.defaults.buildfeatures.resvalues=false android.defaults.buildfeatures.shaders=false + +# Run Roborazzi screenshot tests with the local tests +roborazzi.test.verify=true From 23b09583115f1cf96fe1e1e06e932015d9070c27 Mon Sep 17 00:00:00 2001 From: natarajkr007 Date: Tue, 26 Mar 2024 12:57:05 +0530 Subject: [PATCH 51/53] added ksp arg to generate room code in kotlin --- .../src/main/kotlin/AndroidRoomConventionPlugin.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt index 29d31f9e6..dbca79a5e 100644 --- a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt @@ -15,6 +15,7 @@ */ import androidx.room.gradle.RoomExtension +import com.google.devtools.ksp.gradle.KspExtension import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin import org.gradle.api.Project @@ -28,6 +29,10 @@ class AndroidRoomConventionPlugin : Plugin { pluginManager.apply("androidx.room") pluginManager.apply("com.google.devtools.ksp") + extensions.configure { + arg("room.generateKotlin", "true") + } + extensions.configure { // The schemas directory contains a schema file for each version of the Room database. // This is required to enable Room auto migrations. From a22b724a66dea2875977e05b4d4f1cee8290db1d Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Tue, 26 Mar 2024 21:47:14 +0900 Subject: [PATCH 52/53] Change getByName to named - reference by [APIs to avoid](https://docs.gradle.org/current/userguide/task_configuration_avoidance.html#apis_to_avoid) Change-Id: Idf1ce9cf372b8f5da2f0da95fcf53454ffb3388f --- app-nia-catalog/build.gradle.kts | 2 +- app/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-nia-catalog/build.gradle.kts b/app-nia-catalog/build.gradle.kts index 0991ea0c5..94d55b81c 100644 --- a/app-nia-catalog/build.gradle.kts +++ b/app-nia-catalog/build.gradle.kts @@ -59,7 +59,7 @@ android { // To publish on the Play store a private signing key is required, but to allow anyone // who clones the code to sign and run the release variant, use the debug signing key. // TODO: Abstract the signing configuration to a separate file to avoid hardcoding this. - signingConfig = signingConfigs.getByName("debug") + signingConfig = signingConfigs.named("debug").get() } } } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2fe18645e..56e265c45 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { // To publish on the Play store a private signing key is required, but to allow anyone // who clones the code to sign and run the release variant, use the debug signing key. // TODO: Abstract the signing configuration to a separate file to avoid hardcoding this. - signingConfig = signingConfigs.getByName("debug") + signingConfig = signingConfigs.named("debug").get() // Ensure Baseline Profile is fresh for release builds. baselineProfile.automaticGenerationDuringBuild = true } From 240aa8acdfa5d2125e8600ade873982fdf78b86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Alc=C3=A9rreca?= Date: Tue, 26 Mar 2024 17:14:38 +0100 Subject: [PATCH 53/53] Add testing section to pull_request_template.md (#1341) --- .github/pull_request_template.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index ed5fa237d..28ec373b7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,10 +1,19 @@ -Thanks for submitting a pull request. Please include the following information. +_Thanks for submitting a pull request. Please include the following information._ **What I have done and why** -Include a summary of what your pull request contains, and why you have made these changes. + +_Include a summary of what your pull request contains, and why you have made these changes._ Fixes # +**How I'm testing it** + +_Choose at least one:_ +- Unit tests +- UI tests +- Screenshot tests +- N/A _(provide justification)_ + **Do tests pass?** - [ ] Run local tests on `DemoDebug` variant: `./gradlew testDemoDebug` - [ ] Check formatting: `./gradlew --init-script gradle/init.gradle.kts spotlessApply`