From 9f268136972ed502f6a443323075ae773834efb5 Mon Sep 17 00:00:00 2001 From: rosariopf Date: Tue, 31 Oct 2023 21:26:53 +0000 Subject: [PATCH 01/59] upgrade to Firebase BoM 32.5.0 and drop Firebase KTX --- .../apps/nowinandroid/core/analytics/AnalyticsModule.kt | 4 ++-- gradle/libs.versions.toml | 8 ++++---- .../samples/apps/nowinandroid/sync/di/SyncModule.kt | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 9f875ae6d..a2a1d1fad 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.nowinandroid.core.analytics import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.analytics -import com.google.firebase.ktx.Firebase +import com.google.firebase.analytics.analytics +import com.google.firebase.Firebase import dagger.Binds import dagger.Module import dagger.Provides diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 60d827c0e..516c4b30d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ androidxUiAutomator = "2.2.0" androidxWindowManager = "1.1.0" androidxWork = "2.9.0-beta01" coil = "2.4.0" -firebaseBom = "32.3.1" +firebaseBom = "32.5.0" firebaseCrashlyticsPlugin = "2.9.9" firebasePerfPlugin = "1.4.2" gmsPlugin = "4.4.0" @@ -103,9 +103,9 @@ coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = " coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } -firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging-ktx" } -firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" } -firebase-performance = { group = "com.google.firebase", name = "firebase-perf-ktx" } +firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging" } +firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } +firebase-performance = { group = "com.google.firebase", name = "firebase-perf" } firebase-performance-gradle = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" } google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" } google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index af4508406..9a69a3c78 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.sync.di -import com.google.firebase.ktx.Firebase +import com.google.firebase.Firebase import com.google.firebase.messaging.FirebaseMessaging -import com.google.firebase.messaging.ktx.messaging +import com.google.firebase.messaging.messaging import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.sync.status.FirebaseSyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber From c235aa3027c41028b01025d6aad7a42239dadd10 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 14:49:34 +0000 Subject: [PATCH 02/59] Push spotless changes back to fork, rather than base repo Change-Id: I45584350fe01bed54094780d3fc86b7d271d5709 --- .github/workflows/Build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index b8b8a3b9c..f60c8d548 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -39,6 +39,7 @@ jobs: - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: Apply Spotless + repository: ${{ github.event.pull_request.head.repo.full_name }} - name: Build all build type and flavor permutations run: ./gradlew assemble From 87987526009b279c09952a5f776fad9bde759ff8 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 14:51:30 +0000 Subject: [PATCH 03/59] Add the ref Change-Id: I1fd3eb6ed0158a80511bc75d315d99d8650f5a6e --- .github/workflows/Build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index f60c8d548..598274378 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -40,6 +40,7 @@ jobs: with: commit_message: Apply Spotless repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.head_ref }} - name: Build all build type and flavor permutations run: ./gradlew assemble From 5b0f9918b631c82547dac0a9e2561c8f4b879a06 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 15:34:10 +0000 Subject: [PATCH 04/59] Fix CI Change-Id: Ibddc1a0635a557e4432a77f2dbb032c519bf4b5a --- .github/workflows/Build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 598274378..0bd3e9e6f 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -40,7 +40,7 @@ jobs: with: commit_message: Apply Spotless repository: ${{ github.event.pull_request.head.repo.full_name }} - ref: ${{ github.head_ref }} + branch: ${{ github.head_ref }} - name: Build all build type and flavor permutations run: ./gradlew assemble From bdd6fd2da3a7fc62ccb59f96d173ee786fcf0cc7 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 15:45:06 +0000 Subject: [PATCH 05/59] Remove CI changes, will fix in separate PR Change-Id: I59b0f94760e99fd29ed61a29c56e2cead48b3e19 --- .github/workflows/Build.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 0bd3e9e6f..c826c893a 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -39,9 +39,7 @@ jobs: - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: Apply Spotless - repository: ${{ github.event.pull_request.head.repo.full_name }} - branch: ${{ github.head_ref }} - + - name: Build all build type and flavor permutations run: ./gradlew assemble From 89863c3f87c6327296b6310fe0c4defecf80a067 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 15:46:06 +0000 Subject: [PATCH 06/59] Fix formatting issues Change-Id: Ia90a4aad72db737455b70de9b4583689d6a0e5d6 --- .../samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index a2a1d1fad..45ff65a71 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.core.analytics +import com.google.firebase.Firebase import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.analytics -import com.google.firebase.Firebase import dagger.Binds import dagger.Module import dagger.Provides From 09304e2477ac7b6ffebf88ccaea087397a31c405 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 2 Nov 2023 19:04:22 +0000 Subject: [PATCH 07/59] Add updated badging for prodRelease variant Change-Id: Ibe71c285708ffec85520a0c7852600f361ed1646 --- app/prodRelease-badging.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 6c3a859c7..3fb740202 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -6,6 +6,8 @@ uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.POST_NOTIFICATIONS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='com.google.android.c2dm.permission.RECEIVE' +uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' +uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.FOREGROUND_SERVICE' @@ -107,6 +109,7 @@ application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' +property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' From b9757b3411909e8ebc2fe1f28804d803dfb369ec Mon Sep 17 00:00:00 2001 From: rosariopf Date: Fri, 3 Nov 2023 14:38:46 +0000 Subject: [PATCH 08/59] remove ktx import from FirebaseAnalyticsHelper.kt --- .../apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt index 75dfbc468..62d4d9bcb 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.analytics import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.logEvent +import com.google.firebase.analytics.logEvent import javax.inject.Inject /** From 221b615690fd97c6a367235d6444da3d0a8a4de2 Mon Sep 17 00:00:00 2001 From: rosariopf Date: Fri, 3 Nov 2023 14:47:16 +0000 Subject: [PATCH 09/59] remove ACCESS_ADSERVICES permissions --- app/prodRelease-badging.txt | 2 -- app/src/main/AndroidManifest.xml | 8 +++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 3fb740202..e02e43563 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -6,8 +6,6 @@ uses-permission: name='android.permission.ACCESS_NETWORK_STATE' uses-permission: name='android.permission.POST_NOTIFICATIONS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='com.google.android.c2dm.permission.RECEIVE' -uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' -uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.FOREGROUND_SERVICE' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0b0482c13..7bd013b1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,11 +20,13 @@ + + Date: Wed, 29 Nov 2023 16:42:52 +0100 Subject: [PATCH 10/59] Firebase: Migrate to using the Kotlin extensions (KTX) APIs in the main modules https://firebase.google.com/docs/android/kotlin-migration Requirements: Firebase BoM 32.5.0, but let's update to the latest 32.6.0. And remove warnings: - `'logEvent(String, ParametersBuilder.() -> Unit): Unit' is deprecated. Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.` - `'param(String, String): Unit' is deprecated. Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.` --- .../nowinandroid/core/analytics/AnalyticsModule.kt | 6 +++--- .../core/analytics/FirebaseAnalyticsHelper.kt | 2 +- gradle/libs.versions.toml | 10 +++++----- .../samples/apps/nowinandroid/sync/di/SyncModule.kt | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 9f875ae6d..76d5c3d74 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.nowinandroid.core.analytics import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.analytics -import com.google.firebase.ktx.Firebase +import com.google.firebase.analytics.analytics +import com.google.firebase.Firebase import dagger.Binds import dagger.Module import dagger.Provides @@ -35,6 +35,6 @@ abstract class AnalyticsModule { companion object { @Provides @Singleton - fun provideFirebaseAnalytics(): FirebaseAnalytics { return Firebase.analytics } + fun provideFirebaseAnalytics(): FirebaseAnalytics = Firebase.analytics } } diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt index 75dfbc468..62d4d9bcb 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.analytics import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.logEvent +import com.google.firebase.analytics.logEvent import javax.inject.Inject /** diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ee708385..7fb6af7aa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,7 +31,7 @@ androidxUiAutomator = "2.2.0" androidxWindowManager = "1.1.0" androidxWork = "2.9.0-rc01" coil = "2.4.0" -firebaseBom = "32.4.0" +firebaseBom = "32.6.0" firebaseCrashlyticsPlugin = "2.9.9" firebasePerfPlugin = "1.4.2" gmsPlugin = "4.4.0" @@ -104,11 +104,11 @@ androidx-work-testing = { group = "androidx.work", name = "work-testing", versio coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" } coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } -firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" } +firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } -firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging-ktx" } -firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" } -firebase-performance = { group = "com.google.firebase", name = "firebase-perf-ktx" } +firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging" } +firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } +firebase-performance = { group = "com.google.firebase", name = "firebase-perf" } firebase-performance-gradle = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" } google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" } google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index af4508406..9a69a3c78 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.sync.di -import com.google.firebase.ktx.Firebase +import com.google.firebase.Firebase import com.google.firebase.messaging.FirebaseMessaging -import com.google.firebase.messaging.ktx.messaging +import com.google.firebase.messaging.messaging import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.sync.status.FirebaseSyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber From 447386d5dccf058826acf766dd26cd465e94ece9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Wed, 29 Nov 2023 17:38:46 +0000 Subject: [PATCH 11/59] spotless --- .../samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 76d5c3d74..270ab484a 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.core.analytics +import com.google.firebase.Firebase import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.analytics -import com.google.firebase.Firebase import dagger.Binds import dagger.Module import dagger.Provides From 32c3c3754d1e8c6d5bca31f3465cd3997badaa30 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Wed, 29 Nov 2023 19:40:58 +0100 Subject: [PATCH 12/59] updateProdReleaseBadging See https://github.com/android/nowinandroid/pull/1006 for these new permissions and "Ad Services" property. --- app/prodRelease-badging.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 6c3a859c7..9fca9a0ae 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -7,6 +7,8 @@ uses-permission: name='android.permission.POST_NOTIFICATIONS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='com.google.android.c2dm.permission.RECEIVE' uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' +uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' +uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.FOREGROUND_SERVICE' uses-permission: name='com.google.samples.apps.nowinandroid.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' @@ -107,6 +109,7 @@ application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' +property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' From 4f8f08380fb3ba26199f3324b98c37d2d005876a Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 22 Dec 2023 14:21:00 +0100 Subject: [PATCH 13/59] Prep work for JVM alternatives to modules/plugins --- build-logic/convention/build.gradle.kts | 4 ++ .../kotlin/AndroidHiltConventionPlugin.kt | 27 ++++--------- .../src/main/kotlin/HiltConventionPlugin.kt | 39 +++++++++++++++++++ .../main/kotlin/JvmHiltConventionPlugin.kt | 24 ++++++++++++ core/datastore/build.gradle.kts | 2 +- gradle/libs.versions.toml | 6 ++- 6 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt create mode 100644 build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index aa0e615ad..cf351846e 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -110,5 +110,9 @@ gradlePlugin { id = "nowinandroid.jvm.library" implementationClass = "JvmLibraryConventionPlugin" } + register("jvmHilt") { + id = "nowinandroid.jvm.hilt" + implementationClass = "JvmHiltConventionPlugin" + } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index fcb4f823e..c4fd1b3d0 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -14,25 +14,14 @@ * limitations under the License. */ -import com.google.samples.apps.nowinandroid.libs -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.dependencies +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.kotlin.dsl.DependencyHandlerScope -class AndroidHiltConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - with(pluginManager) { - apply("com.google.devtools.ksp") - apply("dagger.hilt.android.plugin") - } - - dependencies { - "implementation"(libs.findLibrary("hilt.android").get()) - "ksp"(libs.findLibrary("hilt.compiler").get()) - } - - } +class AndroidHiltConventionPlugin : HiltConventionPlugin() { + override val basePluginId = "dagger.hilt.android.plugin" + override fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) { + "implementation"(libs.findLibrary("hilt.android").get()) + "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) + "kspTest"(libs.findLibrary("hilt.compiler").get()) } - } diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt new file mode 100644 index 000000000..1a596d87f --- /dev/null +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -0,0 +1,39 @@ +/* + * 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. + */ + +import com.google.samples.apps.nowinandroid.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.kotlin.dsl.DependencyHandlerScope +import org.gradle.kotlin.dsl.dependencies + +abstract class HiltConventionPlugin : Plugin { + open val basePluginId: String? = null + protected abstract fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + basePluginId?.let(::apply) + apply("com.google.devtools.ksp") + } + dependencies { + "ksp"(libs.findLibrary("hilt.compiler").get()) + additionalDependencies(libs) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt new file mode 100644 index 000000000..be4c9a61d --- /dev/null +++ b/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt @@ -0,0 +1,24 @@ +/* + * 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. + */ + +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.kotlin.dsl.DependencyHandlerScope + +class JvmHiltConventionPlugin : HiltConventionPlugin() { + override fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) { + "implementation"(libs.findLibrary("hilt.core").get()) + } +} \ No newline at end of file diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index 34ea5ee78..725396ac4 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -33,7 +33,7 @@ android { } dependencies { - api(libs.androidx.dataStore.core) + api(libs.androidx.dataStore) api(projects.core.datastoreProto) api(projects.core.model) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 795510bce..9a1e92e84 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -79,7 +79,8 @@ androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "u androidx-compose-ui-util = { group = "androidx.compose.ui", name = "ui-util" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidxCore" } androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidxCoreSplashscreen" } -androidx-dataStore-core = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" } +androidx-dataStore = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" } +androidx-dataStore-core = { group = "androidx.datastore", name = "datastore-core", version.ref = "androidxDataStore" } androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidxHiltNavigationCompose" } androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-viewModelCompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } @@ -109,10 +110,13 @@ google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-lic hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } +hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" } hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } javax-inject = { module = "javax.inject:javax.inject", version = "1" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" } +kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" } +kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-guava = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-guava", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinxDatetime" } From bc8871a9b0dbd3da50e0ec05f58d42272423e846 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 3 Sep 2023 13:00:02 +0200 Subject: [PATCH 14/59] Convert inheritance into delegation --- .../src/main/kotlin/AndroidHiltConventionPlugin.kt | 13 +++++++------ .../src/main/kotlin/HiltConventionPlugin.kt | 9 +++++---- .../src/main/kotlin/JvmHiltConventionPlugin.kt | 12 ++++++------ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index c4fd1b3d0..32be84dbb 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -14,14 +14,15 @@ * limitations under the License. */ -import org.gradle.api.artifacts.VersionCatalog -import org.gradle.kotlin.dsl.DependencyHandlerScope +import org.gradle.api.Plugin +import org.gradle.api.Project -class AndroidHiltConventionPlugin : HiltConventionPlugin() { - override val basePluginId = "dagger.hilt.android.plugin" - override fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) { +class AndroidHiltConventionPlugin : Plugin by HiltConventionPlugin( + basePluginId = "dagger.hilt.android.plugin", + dependencyHandler = { libs -> "implementation"(libs.findLibrary("hilt.android").get()) + "ksp"(libs.findLibrary("hilt.compiler").get()) "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) "kspTest"(libs.findLibrary("hilt.compiler").get()) } -} +) diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt index 1a596d87f..51d963ac6 100644 --- a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -21,9 +21,10 @@ import org.gradle.api.artifacts.VersionCatalog import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.dependencies -abstract class HiltConventionPlugin : Plugin { - open val basePluginId: String? = null - protected abstract fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) +class HiltConventionPlugin( + val basePluginId: String? = null, + val dependencyHandler: DependencyHandlerScope.(libs: VersionCatalog) -> Unit +) : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { @@ -32,7 +33,7 @@ abstract class HiltConventionPlugin : Plugin { } dependencies { "ksp"(libs.findLibrary("hilt.compiler").get()) - additionalDependencies(libs) + dependencyHandler(libs) } } } diff --git a/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt index be4c9a61d..dce0aecef 100644 --- a/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -import org.gradle.api.artifacts.VersionCatalog -import org.gradle.kotlin.dsl.DependencyHandlerScope +import org.gradle.api.Plugin +import org.gradle.api.Project -class JvmHiltConventionPlugin : HiltConventionPlugin() { - override fun DependencyHandlerScope.additionalDependencies(libs: VersionCatalog) { +class JvmHiltConventionPlugin : Plugin by HiltConventionPlugin( + dependencyHandler = { libs -> "implementation"(libs.findLibrary("hilt.core").get()) - } -} \ No newline at end of file + }, +) From 4dd51cb6b146aeedbd086c2a9001734ff10d8870 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 22 Dec 2023 14:21:47 +0100 Subject: [PATCH 15/59] Merge common dependencies --- .../convention/src/main/kotlin/AndroidHiltConventionPlugin.kt | 2 -- build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index 32be84dbb..3fa416536 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -21,8 +21,6 @@ class AndroidHiltConventionPlugin : Plugin by HiltConventionPlugin( basePluginId = "dagger.hilt.android.plugin", dependencyHandler = { libs -> "implementation"(libs.findLibrary("hilt.android").get()) - "ksp"(libs.findLibrary("hilt.compiler").get()) "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) - "kspTest"(libs.findLibrary("hilt.compiler").get()) } ) diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt index 51d963ac6..952386fd6 100644 --- a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -33,6 +33,7 @@ class HiltConventionPlugin( } dependencies { "ksp"(libs.findLibrary("hilt.compiler").get()) + "kspTest"(libs.findLibrary("hilt.compiler").get()) dependencyHandler(libs) } } From 45743175fb1897ff32da0a7c8f21e29771e09fe9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 22 Dec 2023 14:27:14 +0100 Subject: [PATCH 16/59] Reference `nowinandroid-jvm-hilt` plugin in versions catalog --- gradle/libs.versions.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9a1e92e84..1a8d82dce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -181,3 +181,4 @@ nowinandroid-android-lint = { id = "nowinandroid.android.lint", version = "unspe nowinandroid-android-room = { id = "nowinandroid.android.room", version = "unspecified" } nowinandroid-android-test = { id = "nowinandroid.android.test", version = "unspecified" } nowinandroid-jvm-library = { id = "nowinandroid.jvm.library", version = "unspecified" } +nowinandroid-jvm-hilt = { id = "nowinandroid.jvm.hilt", version = "unspecified" } From 61c7d71870bc20393cbc0984068dac77e7b9d723 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 22 Dec 2023 14:40:30 +0100 Subject: [PATCH 17/59] Migrate `:core:common` to pure JVM module The notification icons are now stored in `:core:notifications`. This forces `:sync:work` to depend on it. Another solution could be to provide the resource id through Hilt, but it would require more changes. --- core/common/build.gradle.kts | 10 +++------- core/common/src/main/AndroidManifest.xml | 17 ----------------- core/notifications/build.gradle.kts | 1 - .../core/notifications/SystemTrayNotifier.kt | 8 ++------ ...core_notifications_ic_nia_notification.xml} | 0 ...core_notifications_ic_nia_notification.png} | Bin ...core_notifications_ic_nia_notification.png} | Bin ...core_notifications_ic_nia_notification.png} | Bin ...core_notifications_ic_nia_notification.png} | Bin sync/work/build.gradle.kts | 1 + .../sync/initializers/SyncWorkHelpers.kt | 2 +- 11 files changed, 7 insertions(+), 32 deletions(-) delete mode 100644 core/common/src/main/AndroidManifest.xml rename core/{common/src/main/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml => notifications/src/main/res/drawable-anydpi-v24/core_notifications_ic_nia_notification.xml} (100%) rename core/{common/src/main/res/drawable-hdpi/core_common_ic_nia_notification.png => notifications/src/main/res/drawable-hdpi/core_notifications_ic_nia_notification.png} (100%) rename core/{common/src/main/res/drawable-mdpi/core_common_ic_nia_notification.png => notifications/src/main/res/drawable-mdpi/core_notifications_ic_nia_notification.png} (100%) rename core/{common/src/main/res/drawable-xhdpi/core_common_ic_nia_notification.png => notifications/src/main/res/drawable-xhdpi/core_notifications_ic_nia_notification.png} (100%) rename core/{common/src/main/res/drawable-xxhdpi/core_common_ic_nia_notification.png => notifications/src/main/res/drawable-xxhdpi/core_notifications_ic_nia_notification.png} (100%) diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 51ae627dc..94dd3c09e 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -14,16 +14,12 @@ * limitations under the License. */ plugins { - alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) -} - -android { - namespace = "com.google.samples.apps.nowinandroid.core.common" + alias(libs.plugins.nowinandroid.jvm.library) + alias(libs.plugins.nowinandroid.jvm.hilt) } dependencies { + implementation(libs.kotlinx.coroutines.core) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.turbine) } \ No newline at end of file diff --git a/core/common/src/main/AndroidManifest.xml b/core/common/src/main/AndroidManifest.xml deleted file mode 100644 index 51d0cfc2e..000000000 --- a/core/common/src/main/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - \ No newline at end of file diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts index 92871b72b..7b0f14fc8 100644 --- a/core/notifications/build.gradle.kts +++ b/core/notifications/build.gradle.kts @@ -28,5 +28,4 @@ dependencies { implementation(projects.core.common) compileOnly(platform(libs.androidx.compose.bom)) - compileOnly(libs.androidx.compose.runtime) } diff --git a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt index ebad9fda3..38d905ad1 100644 --- a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt @@ -71,9 +71,7 @@ internal class SystemTrayNotifier @Inject constructor( val newsNotifications = truncatedNewsResources .map { newsResource -> createNewsNotification { - setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.core_common_ic_nia_notification, - ) + setSmallIcon(R.drawable.core_notifications_ic_nia_notification) .setContentTitle(newsResource.title) .setContentText(newsResource.content) .setContentIntent(newsPendingIntent(newsResource)) @@ -88,9 +86,7 @@ internal class SystemTrayNotifier @Inject constructor( ) setContentTitle(title) .setContentText(title) - .setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.core_common_ic_nia_notification, - ) + .setSmallIcon(R.drawable.core_notifications_ic_nia_notification) // Build summary info into InboxStyle template. .setStyle(newsNotificationStyle(truncatedNewsResources, title)) .setGroup(NEWS_NOTIFICATION_GROUP) diff --git a/core/common/src/main/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml b/core/notifications/src/main/res/drawable-anydpi-v24/core_notifications_ic_nia_notification.xml similarity index 100% rename from core/common/src/main/res/drawable-anydpi-v24/core_common_ic_nia_notification.xml rename to core/notifications/src/main/res/drawable-anydpi-v24/core_notifications_ic_nia_notification.xml diff --git a/core/common/src/main/res/drawable-hdpi/core_common_ic_nia_notification.png b/core/notifications/src/main/res/drawable-hdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-hdpi/core_common_ic_nia_notification.png rename to core/notifications/src/main/res/drawable-hdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-mdpi/core_common_ic_nia_notification.png b/core/notifications/src/main/res/drawable-mdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-mdpi/core_common_ic_nia_notification.png rename to core/notifications/src/main/res/drawable-mdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xhdpi/core_common_ic_nia_notification.png b/core/notifications/src/main/res/drawable-xhdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xhdpi/core_common_ic_nia_notification.png rename to core/notifications/src/main/res/drawable-xhdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xxhdpi/core_common_ic_nia_notification.png b/core/notifications/src/main/res/drawable-xxhdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xxhdpi/core_common_ic_nia_notification.png rename to core/notifications/src/main/res/drawable-xxhdpi/core_notifications_ic_nia_notification.png diff --git a/sync/work/build.gradle.kts b/sync/work/build.gradle.kts index 7e61c7389..1bcc15964 100644 --- a/sync/work/build.gradle.kts +++ b/sync/work/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { implementation(libs.hilt.ext.work) implementation(projects.core.analytics) implementation(projects.core.data) + implementation(projects.core.notifications) prodImplementation(libs.firebase.cloud.messaging) prodImplementation(platform(libs.firebase.bom)) diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt index 843510aaf..6c4a29373 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt @@ -71,7 +71,7 @@ private fun Context.syncWorkNotification(): Notification { SYNC_NOTIFICATION_CHANNEL_ID, ) .setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.core_common_ic_nia_notification, + com.google.samples.apps.nowinandroid.core.notifications.R.drawable.core_notifications_ic_nia_notification, ) .setContentTitle(getString(R.string.sync_work_notification_title)) .setPriority(NotificationCompat.PRIORITY_DEFAULT) From 48fde2c3bf26b9760e0edc2ec71a5fa97fd586a9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 22 Dec 2023 16:47:27 +0100 Subject: [PATCH 18/59] Fix badging after merge --- app/prodRelease-badging.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index ad9cb974c..468c31be3 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -107,11 +107,10 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' +property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'android.ext.adservices' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' -property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' -uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' From 930e061611d02192afe6dbae1bae7b2358e75607 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 21 Mar 2024 19:55:11 +0100 Subject: [PATCH 19/59] Cleanup dependencies This is a followup cleanup of #1163 that was partially addressed by #1140. - Remove unused `projects.core.testing` dependencies (or replace with direct dependencies). - Introduce `androidx.compose.ui.test` bundle. - Remove `NiaTestRunner` from the default config, forcing consumers to depend on it, even when not used. --- app/build.gradle.kts | 3 ++- .../src/main/kotlin/AndroidFeatureConventionPlugin.kt | 4 ---- .../src/main/kotlin/AndroidLibraryConventionPlugin.kt | 2 ++ core/database/build.gradle.kts | 8 +++----- core/designsystem/build.gradle.kts | 5 +---- core/screenshot-testing/build.gradle.kts | 7 +++---- core/testing/build.gradle.kts | 9 ++------- core/ui/build.gradle.kts | 4 +--- feature/bookmarks/build.gradle.kts | 1 + feature/foryou/build.gradle.kts | 4 ++-- feature/interests/build.gradle.kts | 1 + feature/search/build.gradle.kts | 1 + feature/settings/build.gradle.kts | 2 +- feature/topic/build.gradle.kts | 1 + gradle/libs.versions.toml | 3 +++ 15 files changed, 24 insertions(+), 31 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9e68ffa7d..1eb28cd46 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -112,7 +112,6 @@ dependencies { kspTest(libs.hilt.compiler) testImplementation(projects.core.dataTest) - testImplementation(projects.core.testing) testImplementation(libs.accompanist.testharness) testImplementation(libs.hilt.android.testing) testImplementation(libs.work.testing) @@ -121,12 +120,14 @@ dependencies { testDemoImplementation(libs.roborazzi) testDemoImplementation(projects.core.screenshotTesting) + androidTestImplementation(kotlin("test")) androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.dataTest) androidTestImplementation(projects.core.datastoreTest) androidTestImplementation(libs.androidx.test.espresso.core) androidTestImplementation(libs.androidx.navigation.testing) androidTestImplementation(libs.accompanist.testharness) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(libs.hilt.android.testing) baselineProfile(projects.benchmarks) diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 52c337521..024ec4fe0 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -30,10 +30,6 @@ class AndroidFeatureConventionPlugin : Plugin { apply("nowinandroid.android.hilt") } extensions.configure { - defaultConfig { - testInstrumentationRunner = - "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" - } testOptions.animationsDisabled = true configureGradleManagedDevices(this) } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index be5b41d07..71d818c0c 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -40,6 +40,7 @@ class AndroidLibraryConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) defaultConfig.targetSdk = 34 + defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testOptions.animationsDisabled = true configureFlavors(this) configureGradleManagedDevices(this) @@ -52,6 +53,7 @@ class AndroidLibraryConventionPlugin : Plugin { disableUnnecessaryAndroidTests(target) } dependencies { + add("androidTestImplementation", kotlin("test")) add("testImplementation", kotlin("test")) add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index 4a6bcb66a..a9e38ead7 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -22,10 +22,6 @@ plugins { } android { - defaultConfig { - testInstrumentationRunner = - "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" - } namespace = "com.google.samples.apps.nowinandroid.core.database" } @@ -34,5 +30,7 @@ dependencies { implementation(libs.kotlinx.datetime) - androidTestImplementation(projects.core.testing) + androidTestImplementation(libs.androidx.test.core) + androidTestImplementation(libs.androidx.test.runner) + androidTestImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index 548e635bb..a8d6ea9c5 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -43,10 +43,7 @@ dependencies { testImplementation(libs.accompanist.testharness) testImplementation(libs.hilt.android.testing) testImplementation(libs.robolectric) - testImplementation(libs.roborazzi) testImplementation(projects.core.screenshotTesting) - testImplementation(projects.core.testing) - androidTestImplementation(libs.androidx.compose.ui.test) - androidTestImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) } diff --git a/core/screenshot-testing/build.gradle.kts b/core/screenshot-testing/build.gradle.kts index 4e9a931b0..95d50e0bf 100644 --- a/core/screenshot-testing/build.gradle.kts +++ b/core/screenshot-testing/build.gradle.kts @@ -24,11 +24,10 @@ android { } dependencies { + api(libs.androidx.activity.compose) api(libs.roborazzi) + api(libs.robolectric) + api(libs.bundles.androidx.compose.ui.test) implementation(libs.accompanist.testharness) - implementation(libs.androidx.activity.compose) - implementation(libs.androidx.compose.ui.test) - implementation(libs.robolectric) - implementation(projects.core.common) implementation(projects.core.designsystem) } diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 02729ceff..90f2405a4 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -15,7 +15,6 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.library.compose) alias(libs.plugins.nowinandroid.android.hilt) } @@ -24,19 +23,15 @@ android { } dependencies { - api(kotlin("test")) - api(libs.androidx.compose.ui.test) + api(libs.kotlinx.coroutines.test) api(projects.core.analytics) + api(projects.core.common) api(projects.core.data) api(projects.core.model) api(projects.core.notifications) - debugApi(libs.androidx.compose.ui.testManifest) implementation(libs.androidx.test.rules) implementation(libs.hilt.android.testing) - implementation(libs.kotlinx.coroutines.test) implementation(libs.kotlinx.datetime) - implementation(projects.core.common) - implementation(projects.core.designsystem) } diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 5d8a65d44..5606cb5d1 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -20,9 +20,6 @@ plugins { } android { - defaultConfig { - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } namespace = "com.google.samples.apps.nowinandroid.core.ui" } @@ -36,5 +33,6 @@ dependencies { implementation(libs.coil.kt) implementation(libs.coil.kt.compose) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/feature/bookmarks/build.gradle.kts b/feature/bookmarks/build.gradle.kts index 4e97176a2..51a15ce7a 100644 --- a/feature/bookmarks/build.gradle.kts +++ b/feature/bookmarks/build.gradle.kts @@ -29,5 +29,6 @@ dependencies { testImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/feature/foryou/build.gradle.kts b/feature/foryou/build.gradle.kts index fd41d9a13..004fe8ad6 100644 --- a/feature/foryou/build.gradle.kts +++ b/feature/foryou/build.gradle.kts @@ -33,8 +33,8 @@ dependencies { testImplementation(libs.hilt.android.testing) testImplementation(libs.robolectric) testImplementation(projects.core.testing) - testImplementation(projects.core.screenshotTesting) - testDemoImplementation(libs.roborazzi) + testDemoImplementation(projects.core.screenshotTesting) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/feature/interests/build.gradle.kts b/feature/interests/build.gradle.kts index ee6aaf122..ca91ba2c4 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/build.gradle.kts @@ -29,5 +29,6 @@ dependencies { testImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index 98052e9ab..c5f1f6ad0 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -31,6 +31,7 @@ dependencies { testImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 4b9a72bdd..15d65204d 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -31,5 +31,5 @@ dependencies { testImplementation(projects.core.testing) - androidTestImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) } diff --git a/feature/topic/build.gradle.kts b/feature/topic/build.gradle.kts index d457b2f73..726920af1 100644 --- a/feature/topic/build.gradle.kts +++ b/feature/topic/build.gradle.kts @@ -29,5 +29,6 @@ dependencies { testImplementation(projects.core.testing) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 26da6907d..2c1236d9d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -59,6 +59,9 @@ secrets = "2.0.1" truth = "1.4.2" turbine = "1.0.0" +[bundles] +androidx-compose-ui-test = ["androidx-compose-ui-test", "androidx-compose-ui-testManifest"] + [libraries] accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } accompanist-testharness = { group = "com.google.accompanist", name = "accompanist-testharness", version.ref = "accompanist" } From 9c518613869f43bd1064bcb0053232af46cc52f6 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 21 Mar 2024 20:40:39 +0100 Subject: [PATCH 20/59] Update dependency graphs Using latest graphviz 10.0.1 --- docs/images/graphs/dep_graph_app.svg | 2 +- .../graphs/dep_graph_app_nia_catalog.svg | 2 +- .../graphs/dep_graph_core_analytics.svg | 2 +- docs/images/graphs/dep_graph_core_common.svg | 2 +- docs/images/graphs/dep_graph_core_data.svg | 2 +- .../graphs/dep_graph_core_data_test.svg | 2 +- .../images/graphs/dep_graph_core_database.svg | 2 +- .../graphs/dep_graph_core_datastore.svg | 2 +- .../graphs/dep_graph_core_datastore_proto.svg | 2 +- .../graphs/dep_graph_core_datastore_test.svg | 2 +- .../graphs/dep_graph_core_designsystem.svg | 2 +- docs/images/graphs/dep_graph_core_domain.svg | 2 +- docs/images/graphs/dep_graph_core_model.svg | 2 +- docs/images/graphs/dep_graph_core_network.svg | 2 +- .../graphs/dep_graph_core_notifications.svg | 2 +- .../dep_graph_core_screenshot_testing.svg | 36 +-- docs/images/graphs/dep_graph_core_testing.svg | 224 +++++++++--------- docs/images/graphs/dep_graph_core_ui.svg | 2 +- .../graphs/dep_graph_feature_bookmarks.svg | 2 +- .../graphs/dep_graph_feature_foryou.svg | 2 +- .../graphs/dep_graph_feature_interests.svg | 2 +- .../graphs/dep_graph_feature_search.svg | 2 +- .../graphs/dep_graph_feature_settings.svg | 2 +- .../images/graphs/dep_graph_feature_topic.svg | 2 +- .../graphs/dep_graph_sync_sync_test.svg | 2 +- docs/images/graphs/dep_graph_sync_work.svg | 2 +- 26 files changed, 142 insertions(+), 166 deletions(-) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg index 57a592a8e..5fe3ef8cf 100644 --- a/docs/images/graphs/dep_graph_app.svg +++ b/docs/images/graphs/dep_graph_app.svg @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - - - + G - + :core:screenshot-testing - -:core:screenshot-testing - - - -:core:common - -:core:common - - - -:core:screenshot-testing->:core:common - - + +:core:screenshot-testing - + :core:designsystem - -:core:designsystem + +:core:designsystem - + :core:screenshot-testing->:core:designsystem - - + + diff --git a/docs/images/graphs/dep_graph_core_testing.svg b/docs/images/graphs/dep_graph_core_testing.svg index 29d367e4b..3059e914b 100644 --- a/docs/images/graphs/dep_graph_core_testing.svg +++ b/docs/images/graphs/dep_graph_core_testing.svg @@ -1,199 +1,187 @@ - - + G - + :core:testing - -:core:testing + +:core:testing :core:analytics - -:core:analytics + +:core:analytics :core:testing->:core:analytics - - + + - + +:core:common + +:core:common + + + +:core:testing->:core:common + + + + + :core:data - -:core:data + +:core:data - + :core:testing->:core:data - - + + - + :core:model - -:core:model + +:core:model - + :core:testing->:core:model - - + + - + :core:notifications - -: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:testing->:core:notifications + + - + :core:data->:core:analytics - - - - - -:core:data->:core:notifications - - + + - + :core:data->:core:common - - + + + + + +:core:data->:core:notifications + + - + :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:model - - + + - + :core:notifications->:core:common - - + + + + + +:core:notifications->:core:model + + - + :core:database->:core:model - - - - - -:core:datastore->: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:model - - + + - + :core:network->:core:common - - + + + + + +:core:network->:core:model + + diff --git a/docs/images/graphs/dep_graph_core_ui.svg b/docs/images/graphs/dep_graph_core_ui.svg index 2eba46866..381417c5a 100644 --- a/docs/images/graphs/dep_graph_core_ui.svg +++ b/docs/images/graphs/dep_graph_core_ui.svg @@ -1,7 +1,7 @@ - - - - - - - - - Date: Tue, 26 Mar 2024 19:05:58 +0100 Subject: [PATCH 21/59] Revert unchanged SVG contents The change was an internal version name contained in a comment. --- docs/images/graphs/dep_graph_app.svg | 2 +- docs/images/graphs/dep_graph_app_nia_catalog.svg | 2 +- docs/images/graphs/dep_graph_core_analytics.svg | 2 +- docs/images/graphs/dep_graph_core_common.svg | 2 +- docs/images/graphs/dep_graph_core_data.svg | 2 +- docs/images/graphs/dep_graph_core_data_test.svg | 2 +- docs/images/graphs/dep_graph_core_database.svg | 2 +- docs/images/graphs/dep_graph_core_datastore.svg | 2 +- docs/images/graphs/dep_graph_core_datastore_proto.svg | 2 +- docs/images/graphs/dep_graph_core_datastore_test.svg | 2 +- docs/images/graphs/dep_graph_core_designsystem.svg | 2 +- docs/images/graphs/dep_graph_core_domain.svg | 2 +- docs/images/graphs/dep_graph_core_model.svg | 2 +- docs/images/graphs/dep_graph_core_network.svg | 2 +- docs/images/graphs/dep_graph_core_notifications.svg | 2 +- docs/images/graphs/dep_graph_core_ui.svg | 2 +- docs/images/graphs/dep_graph_feature_bookmarks.svg | 2 +- docs/images/graphs/dep_graph_feature_foryou.svg | 2 +- docs/images/graphs/dep_graph_feature_interests.svg | 2 +- docs/images/graphs/dep_graph_feature_search.svg | 2 +- docs/images/graphs/dep_graph_feature_settings.svg | 2 +- docs/images/graphs/dep_graph_feature_topic.svg | 2 +- docs/images/graphs/dep_graph_sync_sync_test.svg | 2 +- docs/images/graphs/dep_graph_sync_work.svg | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg index 5fe3ef8cf..57a592a8e 100644 --- a/docs/images/graphs/dep_graph_app.svg +++ b/docs/images/graphs/dep_graph_app.svg @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - Date: Tue, 26 Mar 2024 19:22:49 +0100 Subject: [PATCH 22/59] Lower visibility of some dependencies --- core/screenshot-testing/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/screenshot-testing/build.gradle.kts b/core/screenshot-testing/build.gradle.kts index 95d50e0bf..dd6e43fb3 100644 --- a/core/screenshot-testing/build.gradle.kts +++ b/core/screenshot-testing/build.gradle.kts @@ -24,10 +24,10 @@ android { } dependencies { - api(libs.androidx.activity.compose) - api(libs.roborazzi) - api(libs.robolectric) api(libs.bundles.androidx.compose.ui.test) + api(libs.roborazzi) implementation(libs.accompanist.testharness) + implementation(libs.androidx.activity.compose) + implementation(libs.robolectric) implementation(projects.core.designsystem) } From 5470cf98ca886b6a1b30ad007ce377fd9bc7b8ff Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 13 Apr 2024 13:14:25 +0100 Subject: [PATCH 23/59] Migrate legacy Gradle actions to the new official `gradle/actions` --- .github/workflows/Build.yaml | 13 ++++++++++--- .github/workflows/Release.yml | 7 ++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index db326c380..d8161ccf6 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v2 + uses: gradle/actions/wrapper-validation-action@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -38,7 +38,9 @@ jobs: java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v3 + uses: gradle/actions/setup-gradle@v3 + with: + gradle-home-cache-cleanup: true - name: Check build-logic run: ./gradlew check -p build-logic @@ -170,6 +172,9 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Validate Gradle Wrapper + uses: gradle/actions/wrapper-validation-action@v3 + - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -180,7 +185,9 @@ jobs: java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v3 + uses: gradle/actions/setup-gradle@v3 + with: + gradle-home-cache-cleanup: true - name: Build projects and run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index 7de3cb11e..d54e9494e 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v2 + uses: gradle/actions/wrapper-validation-action@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -33,6 +33,11 @@ jobs: distribution: 'zulu' java-version: 17 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-home-cache-cleanup: true + - name: Install GMD image for baseline profile generation run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager "system-images;android-33;aosp_atd;x86_64" From 44e673b52ee9e6c732ed1fe090967a80777cc031 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 13 Apr 2024 13:24:13 +0100 Subject: [PATCH 24/59] Fix typo --- .github/workflows/Build.yaml | 4 ++-- .github/workflows/Release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index d8161ccf6..43c7f3ee9 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation-action@v3 + uses: gradle/actions/wrapper-validation@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -173,7 +173,7 @@ jobs: uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation-action@v3 + uses: gradle/actions/wrapper-validation@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index d54e9494e..f6b48bf6f 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation-action@v3 + uses: gradle/actions/wrapper-validation@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties From be1a2b28e0ce3f7c5a6ec20b3be46f3a124f6a6b Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 14 Apr 2024 22:19:29 +0100 Subject: [PATCH 25/59] Configure `validate-wrappers: true` with `gradle/actions/setup-gradle` --- .github/workflows/Build.yaml | 8 ++------ .github/workflows/Release.yml | 6 ++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 43c7f3ee9..d1ead0e50 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -25,9 +25,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 - - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -40,6 +37,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: + validate-wrappers: true gradle-home-cache-cleanup: true - name: Check build-logic @@ -172,9 +170,6 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 - - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -187,6 +182,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: + validate-wrappers: true gradle-home-cache-cleanup: true - name: Build projects and run instrumentation tests diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index f6b48bf6f..e50d05e53 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -19,10 +19,7 @@ jobs: ls /dev/kvm - name: Checkout - uses: actions/checkout@v4 - - - name: Validate Gradle Wrapper - uses: gradle/actions/wrapper-validation@v3 + uses: actions/checkout@v4 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties @@ -36,6 +33,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: + validate-wrappers: true gradle-home-cache-cleanup: true - name: Install GMD image for baseline profile generation From d532b498bc91f2862c88388ecc498c8ddd9e42ee Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Tue, 14 May 2024 19:53:43 +0200 Subject: [PATCH 27/59] Update graphs --- docs/images/graphs/dep_graph_app.svg | 304 +++++++++--------- .../graphs/dep_graph_app_nia_catalog.svg | 44 +-- .../graphs/dep_graph_core_analytics.svg | 8 +- docs/images/graphs/dep_graph_core_common.svg | 8 +- docs/images/graphs/dep_graph_core_data.svg | 96 +++--- .../graphs/dep_graph_core_data_test.svg | 104 +++--- .../images/graphs/dep_graph_core_database.svg | 16 +- .../graphs/dep_graph_core_datastore.svg | 32 +- .../graphs/dep_graph_core_datastore_proto.svg | 8 +- .../graphs/dep_graph_core_datastore_test.svg | 44 +-- .../graphs/dep_graph_core_designsystem.svg | 8 +- docs/images/graphs/dep_graph_core_domain.svg | 108 +++---- docs/images/graphs/dep_graph_core_model.svg | 8 +- docs/images/graphs/dep_graph_core_network.svg | 24 +- .../graphs/dep_graph_core_notifications.svg | 24 +- .../dep_graph_core_screenshot_testing.svg | 28 +- docs/images/graphs/dep_graph_core_testing.svg | 188 +++++------ docs/images/graphs/dep_graph_core_ui.svg | 32 +- .../graphs/dep_graph_feature_bookmarks.svg | 132 ++++---- .../graphs/dep_graph_feature_foryou.svg | 148 ++++----- .../graphs/dep_graph_feature_interests.svg | 148 ++++----- .../graphs/dep_graph_feature_search.svg | 148 ++++----- .../graphs/dep_graph_feature_settings.svg | 132 ++++---- .../images/graphs/dep_graph_feature_topic.svg | 132 ++++---- .../graphs/dep_graph_sync_sync_test.svg | 120 +++---- docs/images/graphs/dep_graph_sync_work.svg | 108 +++---- 26 files changed, 1066 insertions(+), 1086 deletions(-) diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg index 8a94310b2..dddc1ad33 100644 --- a/docs/images/graphs/dep_graph_app.svg +++ b/docs/images/graphs/dep_graph_app.svg @@ -1,383 +1,383 @@ - + 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->: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_app_nia_catalog.svg b/docs/images/graphs/dep_graph_app_nia_catalog.svg index fa7cfca5a..1bb442cad 100644 --- a/docs/images/graphs/dep_graph_app_nia_catalog.svg +++ b/docs/images/graphs/dep_graph_app_nia_catalog.svg @@ -1,58 +1,58 @@ - + G - + :app-nia-catalog - - :app-nia-catalog + + :app-nia-catalog :core:designsystem - - :core:designsystem + + :core:designsystem :app-nia-catalog->:core:designsystem - - + + :core:ui - - :core:ui + + :core:ui :app-nia-catalog->:core:ui - - + + :core:ui->:core:designsystem - - + + :core:analytics - - :core:analytics + + :core:analytics :core:ui->:core:analytics - - + + :core:model - - :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 index 9cb11e4eb..4c21e8aa1 100644 --- a/docs/images/graphs/dep_graph_core_analytics.svg +++ b/docs/images/graphs/dep_graph_core_analytics.svg @@ -1,13 +1,13 @@ - + G - + :core:analytics - - :core:analytics + + :core:analytics diff --git a/docs/images/graphs/dep_graph_core_common.svg b/docs/images/graphs/dep_graph_core_common.svg index a1cdcb610..7d1f53282 100644 --- a/docs/images/graphs/dep_graph_core_common.svg +++ b/docs/images/graphs/dep_graph_core_common.svg @@ -1,13 +1,13 @@ - + G - + :core:common - - :core:common + + :core:common diff --git a/docs/images/graphs/dep_graph_core_data.svg b/docs/images/graphs/dep_graph_core_data.svg index 8637b06ee..861d4873e 100644 --- a/docs/images/graphs/dep_graph_core_data.svg +++ b/docs/images/graphs/dep_graph_core_data.svg @@ -1,123 +1,123 @@ - + G - + :core:data - - :core:data + + :core:data :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:analytics - - :core:analytics + + :core:analytics :core:data->:core:analytics - - + + :core:notifications - - :core:notifications + + :core:notifications :core:data->:core:notifications - - + + :core:model - - :core:model + + :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_core_data_test.svg b/docs/images/graphs/dep_graph_core_data_test.svg index 798696c11..3af1a0338 100644 --- a/docs/images/graphs/dep_graph_core_data_test.svg +++ b/docs/images/graphs/dep_graph_core_data_test.svg @@ -1,133 +1,133 @@ - + G - + :core:data-test - - :core:data-test + + :core:data-test :core:data - - :core:data + + :core:data :core:data-test->:core:data - - + + :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:analytics - - :core:analytics + + :core:analytics :core:data->:core:analytics - - + + :core:notifications - - :core:notifications + + :core:notifications :core:data->:core:notifications - - + + :core:model - - :core:model + + :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_core_database.svg b/docs/images/graphs/dep_graph_core_database.svg index dd3aef7ee..ccff0478d 100644 --- a/docs/images/graphs/dep_graph_core_database.svg +++ b/docs/images/graphs/dep_graph_core_database.svg @@ -1,23 +1,23 @@ - + G - + :core:database - - :core:database + + :core:database :core:model - - :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 index 3bf13d087..6ada93748 100644 --- a/docs/images/graphs/dep_graph_core_datastore.svg +++ b/docs/images/graphs/dep_graph_core_datastore.svg @@ -1,43 +1,43 @@ - + G - + :core:datastore - - :core:datastore + + :core:datastore :core:datastore-proto - - :core:datastore-proto + + :core:datastore-proto :core:datastore->:core:datastore-proto - - + + :core:model - - :core:model + + :core:model :core:datastore->:core:model - - + + :core:common - - :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 index fd3bba9b6..d22a9b8a6 100644 --- a/docs/images/graphs/dep_graph_core_datastore_proto.svg +++ b/docs/images/graphs/dep_graph_core_datastore_proto.svg @@ -1,13 +1,13 @@ - + G - + :core:datastore-proto - - :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 index e42e5e795..952a66e1d 100644 --- a/docs/images/graphs/dep_graph_core_datastore_test.svg +++ b/docs/images/graphs/dep_graph_core_datastore_test.svg @@ -1,58 +1,58 @@ - + G - + :core:datastore-test - - :core:datastore-test + + :core:datastore-test :core:common - - :core:common + + :core:common :core:datastore-test->:core:common - - + + :core:datastore - - :core:datastore + + :core:datastore :core:datastore-test->:core:datastore - - + + :core:datastore->:core:common - - + + :core:datastore-proto - - :core:datastore-proto + + :core:datastore-proto :core:datastore->:core:datastore-proto - - + + :core:model - - :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 index f33d70705..9f11a8c61 100644 --- a/docs/images/graphs/dep_graph_core_designsystem.svg +++ b/docs/images/graphs/dep_graph_core_designsystem.svg @@ -1,13 +1,13 @@ - + G - + :core:designsystem - - :core:designsystem + + :core:designsystem diff --git a/docs/images/graphs/dep_graph_core_domain.svg b/docs/images/graphs/dep_graph_core_domain.svg index 68543466c..0d371fd40 100644 --- a/docs/images/graphs/dep_graph_core_domain.svg +++ b/docs/images/graphs/dep_graph_core_domain.svg @@ -1,138 +1,138 @@ - + G - + :core:domain - - :core:domain + + :core:domain :core:data - - :core:data + + :core:data :core:domain->:core:data - - + + :core:model - - :core:model + + :core:model :core:domain->:core:model - - + + :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:analytics - - :core:analytics + + :core:analytics :core:data->:core:analytics - - + + :core:notifications - - :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-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 index 66959f2f1..426e0830d 100644 --- a/docs/images/graphs/dep_graph_core_model.svg +++ b/docs/images/graphs/dep_graph_core_model.svg @@ -1,13 +1,13 @@ - + G - + :core:model - - :core:model + + :core:model diff --git a/docs/images/graphs/dep_graph_core_network.svg b/docs/images/graphs/dep_graph_core_network.svg index 9902ee8e3..73595401a 100644 --- a/docs/images/graphs/dep_graph_core_network.svg +++ b/docs/images/graphs/dep_graph_core_network.svg @@ -1,33 +1,33 @@ - + G - + :core:network - - :core:network + + :core:network :core:common - - :core:common + + :core:common :core:network->:core:common - - + + :core:model - - :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 index 3a1126ca8..ed40345e3 100644 --- a/docs/images/graphs/dep_graph_core_notifications.svg +++ b/docs/images/graphs/dep_graph_core_notifications.svg @@ -1,33 +1,33 @@ - + G - + :core:notifications - - :core:notifications + + :core:notifications :core:model - - :core:model + + :core:model :core:notifications->:core:model - - + + :core:common - - :core:common + + :core:common :core:notifications->:core:common - - + + diff --git a/docs/images/graphs/dep_graph_core_screenshot_testing.svg b/docs/images/graphs/dep_graph_core_screenshot_testing.svg index 8021dcda6..b723194a8 100644 --- a/docs/images/graphs/dep_graph_core_screenshot_testing.svg +++ b/docs/images/graphs/dep_graph_core_screenshot_testing.svg @@ -1,33 +1,23 @@ - + G - + :core:screenshot-testing - - :core:screenshot-testing + + :core:screenshot-testing - :core:common - - :core:common - - - :core:screenshot-testing->:core:common - - - - :core:designsystem - - :core:designsystem + + :core:designsystem - + :core:screenshot-testing->:core:designsystem - - + + diff --git a/docs/images/graphs/dep_graph_core_testing.svg b/docs/images/graphs/dep_graph_core_testing.svg index ac1b301aa..ff96b6d95 100644 --- a/docs/images/graphs/dep_graph_core_testing.svg +++ b/docs/images/graphs/dep_graph_core_testing.svg @@ -1,163 +1,153 @@ - + G - + :core:testing - - :core:testing + + :core:testing :core:analytics - - :core:analytics + + :core:analytics :core:testing->:core:analytics - - + + - :core:data - - :core:data + :core:common + + :core:common - :core:testing->:core:data - - + :core:testing->:core:common + + - :core:model - - :core:model + :core:data + + :core:data - :core:testing->:core:model - - + :core:testing->:core:data + + - :core:notifications - - :core:notifications + :core:model + + :core:model - :core:testing->:core:notifications - - + :core:testing->:core:model + + - :core:common - - :core:common + :core:notifications + + :core:notifications - :core:testing->:core:common - - + :core:testing->:core:notifications + + - - :core:designsystem - - :core:designsystem + + :core:data->:core:analytics + + - :core:testing->:core:designsystem - - + :core:data->:core:common + + - :core:data->:core:analytics - - - - :core:data->:core:notifications - - + + - - :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:model - - - - :core:notifications->:core:common - - + + - + + :core:notifications->:core:model + + + + :core:database->:core:model - - + + - :core:datastore->: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:model - - + + :core:network->:core:common + + - :core:network->:core:common - - + :core:network->:core:model + + diff --git a/docs/images/graphs/dep_graph_core_ui.svg b/docs/images/graphs/dep_graph_core_ui.svg index a36dd7031..ce99fe2f5 100644 --- a/docs/images/graphs/dep_graph_core_ui.svg +++ b/docs/images/graphs/dep_graph_core_ui.svg @@ -1,43 +1,43 @@ - + G - + :core:ui - - :core:ui + + :core:ui :core:analytics - - :core:analytics + + :core:analytics :core:ui->:core:analytics - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :core:ui->:core:designsystem - - + + :core:model - - :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 index 8fbe423c2..df52a9b6d 100644 --- a/docs/images/graphs/dep_graph_feature_bookmarks.svg +++ b/docs/images/graphs/dep_graph_feature_bookmarks.svg @@ -1,168 +1,168 @@ - + G - + :feature:bookmarks - - :feature:bookmarks + + :feature:bookmarks :core:ui - - :core:ui + + :core:ui :feature:bookmarks->:core:ui - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :feature:bookmarks->:core:designsystem - - + + :core:data - - :core:data + + :core:data :feature:bookmarks->:core:data - - + + :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: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 - - + + diff --git a/docs/images/graphs/dep_graph_feature_foryou.svg b/docs/images/graphs/dep_graph_feature_foryou.svg index 6b8af3764..0a61e8b59 100644 --- a/docs/images/graphs/dep_graph_feature_foryou.svg +++ b/docs/images/graphs/dep_graph_feature_foryou.svg @@ -1,188 +1,188 @@ - + G - + :feature:foryou - - :feature:foryou + + :feature:foryou :core:ui - - :core:ui + + :core:ui :feature:foryou->:core:ui - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :feature:foryou->:core:designsystem - - + + :core:data - - :core:data + + :core:data :feature:foryou->:core:data - - + + :core:domain - - :core:domain + + :core:domain :feature:foryou->:core:domain - - + + :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 - - + + :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 - - + + diff --git a/docs/images/graphs/dep_graph_feature_interests.svg b/docs/images/graphs/dep_graph_feature_interests.svg index b13783a27..b3e8ceed4 100644 --- a/docs/images/graphs/dep_graph_feature_interests.svg +++ b/docs/images/graphs/dep_graph_feature_interests.svg @@ -1,188 +1,188 @@ - + G - + :feature:interests - - :feature:interests + + :feature:interests :core:ui - - :core:ui + + :core:ui :feature:interests->:core:ui - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :feature:interests->:core:designsystem - - + + :core:data - - :core:data + + :core:data :feature:interests->:core:data - - + + :core:domain - - :core:domain + + :core:domain :feature:interests->:core:domain - - + + :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 - - + + :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 - - + + diff --git a/docs/images/graphs/dep_graph_feature_search.svg b/docs/images/graphs/dep_graph_feature_search.svg index ff299f33f..10316170f 100644 --- a/docs/images/graphs/dep_graph_feature_search.svg +++ b/docs/images/graphs/dep_graph_feature_search.svg @@ -1,188 +1,188 @@ - + 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 - - + + :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 - - + + :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 - - + + diff --git a/docs/images/graphs/dep_graph_feature_settings.svg b/docs/images/graphs/dep_graph_feature_settings.svg index 1b9648d8b..f5b9bafe6 100644 --- a/docs/images/graphs/dep_graph_feature_settings.svg +++ b/docs/images/graphs/dep_graph_feature_settings.svg @@ -1,168 +1,168 @@ - + G - + :feature:settings - - :feature:settings + + :feature:settings :core:ui - - :core:ui + + :core:ui :feature:settings->:core:ui - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :feature:settings->:core:designsystem - - + + :core:data - - :core:data + + :core:data :feature:settings->:core:data - - + + :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: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 - - + + diff --git a/docs/images/graphs/dep_graph_feature_topic.svg b/docs/images/graphs/dep_graph_feature_topic.svg index 49fe361a8..191ec0387 100644 --- a/docs/images/graphs/dep_graph_feature_topic.svg +++ b/docs/images/graphs/dep_graph_feature_topic.svg @@ -1,168 +1,168 @@ - + G - + :feature:topic - - :feature:topic + + :feature:topic :core:ui - - :core:ui + + :core:ui :feature:topic->:core:ui - - + + :core:designsystem - - :core:designsystem + + :core:designsystem :feature:topic->:core:designsystem - - + + :core:data - - :core:data + + :core:data :feature:topic->:core:data - - + + :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: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 - - + + diff --git a/docs/images/graphs/dep_graph_sync_sync_test.svg b/docs/images/graphs/dep_graph_sync_sync_test.svg index 58a31af19..6b6892050 100644 --- a/docs/images/graphs/dep_graph_sync_sync_test.svg +++ b/docs/images/graphs/dep_graph_sync_sync_test.svg @@ -1,153 +1,153 @@ - + G - + :sync:sync-test - - :sync:sync-test + + :sync:sync-test :core:data - - :core:data + + :core:data :sync:sync-test->:core:data - - + + :sync:work - - :sync:work + + :sync:work :sync:sync-test->:sync:work - - + + :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:analytics - - :core:analytics + + :core:analytics :core:data->:core:analytics - - + + :core:notifications - - :core:notifications + + :core:notifications :core:data->:core:notifications - - + + :sync:work->:core:data - - + + :sync:work->:core:analytics - - + + :core:model - - :core:model + + :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_sync_work.svg b/docs/images/graphs/dep_graph_sync_work.svg index 2581a10ae..cf43cc466 100644 --- a/docs/images/graphs/dep_graph_sync_work.svg +++ b/docs/images/graphs/dep_graph_sync_work.svg @@ -1,138 +1,138 @@ - + G - + :sync:work - - :sync:work + + :sync:work :core:analytics - - :core:analytics + + :core:analytics :sync:work->:core:analytics - - + + :core:data - - :core:data + + :core:data :sync:work->:core:data - - + + :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:model - - :core:model + + :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 - - + + From 53de720bcba72750e050c4a855317ecbdf62d95c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 08:43:16 +0000 Subject: [PATCH 28/59] Bump org.robolectric:robolectric from 4.11.1 to 4.12.2 Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.11.1 to 4.12.2. - [Release notes](https://github.com/robolectric/robolectric/releases) - [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.11.1...robolectric-4.12.2) --- updated-dependencies: - dependency-name: org.robolectric:robolectric 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 1374261ce..b5afa6c17 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,7 +53,7 @@ protobuf = "4.26.0" protobufPlugin = "0.9.4" retrofit = "2.9.0" retrofitKotlinxSerializationJson = "1.0.0" -robolectric = "4.11.1" +robolectric = "4.12.2" roborazzi = "1.7.0" room = "2.6.1" secrets = "2.0.1" From a3863bb7d29677c65b6fc08b2d1acd34eefd87e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 08:43:52 +0000 Subject: [PATCH 29/59] Bump protobuf from 4.26.0 to 4.26.1 Bumps `protobuf` from 4.26.0 to 4.26.1. Updates `com.google.protobuf:protobuf-kotlin-lite` from 4.26.0 to 4.26.1 Updates `com.google.protobuf:protoc` from 4.26.0 to 4.26.1 - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: com.google.protobuf:protobuf-kotlin-lite dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.protobuf:protoc 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 1374261ce..aae8aa093 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -49,7 +49,7 @@ kotlinxSerializationJson = "1.6.3" ksp = "1.9.22-1.0.18" moduleGraph = "2.5.0" okhttp = "4.12.0" -protobuf = "4.26.0" +protobuf = "4.26.1" protobufPlugin = "0.9.4" retrofit = "2.9.0" retrofitKotlinxSerializationJson = "1.0.0" From e75590ce210c4982f0f24af9e411d8e656422931 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 20 May 2024 08:47:08 +0000 Subject: [PATCH 30/59] =?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 6544acde6..3db185098 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -188,8 +188,8 @@ com.google.guava:failureaccess:1.0.1 com.google.guava:guava:31.1-android com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava com.google.j2objc:j2objc-annotations:1.3 -com.google.protobuf:protobuf-javalite:4.26.0 -com.google.protobuf:protobuf-kotlin-lite:4.26.0 +com.google.protobuf:protobuf-javalite:4.26.1 +com.google.protobuf:protobuf-kotlin-lite:4.26.1 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 From 0c522c0d50b78ef9064842810ad324acfdbc2b55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 00:58:25 +0000 Subject: [PATCH 31/59] Bump androidx.test.uiautomator:uiautomator from 2.2.0 to 2.3.0 Bumps androidx.test.uiautomator:uiautomator from 2.2.0 to 2.3.0. --- updated-dependencies: - dependency-name: androidx.test.uiautomator:uiautomator 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 e0b938e75..313aa5e4a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ androidxTestExt = "1.1.5" androidxTestRules = "1.5.0" androidxTestRunner = "1.5.2" androidxTracing = "1.3.0-alpha02" -androidxUiAutomator = "2.2.0" +androidxUiAutomator = "2.3.0" androidxWindowManager = "1.3.0-alpha03" androidxWork = "2.9.0" coil = "2.6.0" From a4f706a2152f7b290b7a7c0d1a01884dcc38f5e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 00:58:32 +0000 Subject: [PATCH 32/59] Bump androidxLifecycle from 2.7.0 to 2.8.1 Bumps `androidxLifecycle` from 2.7.0 to 2.8.1. Updates `androidx.lifecycle:lifecycle-runtime-compose` from 2.7.0 to 2.8.1 Updates `androidx.lifecycle:lifecycle-runtime-testing` from 2.7.0 to 2.8.1 Updates `androidx.lifecycle:lifecycle-viewmodel-compose` from 2.7.0 to 2.8.1 --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime-compose dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: androidx.lifecycle:lifecycle-runtime-testing dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: androidx.lifecycle:lifecycle-viewmodel-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 e0b938e75..2eb22a3f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.0.0" androidxEspresso = "3.5.1" androidxHiltNavigationCompose = "1.2.0" -androidxLifecycle = "2.7.0" +androidxLifecycle = "2.8.1" androidxMacroBenchmark = "1.2.4" androidxMetrics = "1.0.0-alpha04" androidxNavigation = "2.8.0-alpha06" From af5528ab41a9f8775c3cda324cdd153bfa567b88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 00:58:41 +0000 Subject: [PATCH 33/59] Bump androidx.appcompat:appcompat from 1.6.1 to 1.7.0 Bumps androidx.appcompat:appcompat from 1.6.1 to 1.7.0. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat 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 e0b938e75..a2feb890d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ androidDesugarJdkLibs = "2.0.4" androidGradlePlugin = "8.4.0" androidTools = "31.4.0" androidxActivity = "1.8.2" -androidxAppCompat = "1.6.1" +androidxAppCompat = "1.7.0" androidxBrowser = "1.8.0" androidxComposeAlpha = "1.7.0-beta01" androidxComposeBom = "2024.02.02" From c06ea8257626eec5e52ae8520658e7ac18d47410 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 00:58:51 +0000 Subject: [PATCH 34/59] Bump androidTools from 31.4.0 to 31.4.1 Bumps `androidTools` from 31.4.0 to 31.4.1. Updates `com.android.tools.lint:lint-api` from 31.4.0 to 31.4.1 Updates `com.android.tools.lint:lint-checks` from 31.4.0 to 31.4.1 Updates `com.android.tools.lint:lint-tests` from 31.4.0 to 31.4.1 Updates `com.android.tools:common` from 31.4.0 to 31.4.1 --- updated-dependencies: - dependency-name: com.android.tools.lint:lint-api dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.android.tools.lint:lint-checks dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.android.tools.lint:lint-tests dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.android.tools:common 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 e0b938e75..6511b5da6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ accompanist = "0.34.0" androidDesugarJdkLibs = "2.0.4" # AGP and tools should be updated together androidGradlePlugin = "8.4.0" -androidTools = "31.4.0" +androidTools = "31.4.1" androidxActivity = "1.8.2" androidxAppCompat = "1.6.1" androidxBrowser = "1.8.0" From 4b04ef688d7488b3585d91eef13bcb284684223c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Thu, 30 May 2024 01:02:48 +0000 Subject: [PATCH 35/59] =?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 --- .../prodReleaseRuntimeClasspath.txt | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 214ae5ca8..ba87b8c2e 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -83,26 +83,26 @@ 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 -androidx.lifecycle:lifecycle-common-java8:2.8.0 -androidx.lifecycle:lifecycle-common-jvm:2.8.0 -androidx.lifecycle:lifecycle-common:2.8.0 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.0 -androidx.lifecycle:lifecycle-livedata-core:2.8.0 -androidx.lifecycle:lifecycle-livedata:2.8.0 -androidx.lifecycle:lifecycle-process:2.8.0 -androidx.lifecycle:lifecycle-runtime-android:2.8.0 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.0 -androidx.lifecycle:lifecycle-runtime-compose:2.8.0 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.0 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.0 -androidx.lifecycle:lifecycle-runtime:2.8.0 -androidx.lifecycle:lifecycle-service:2.8.0 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.0 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.0 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.0 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.0 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.0 -androidx.lifecycle:lifecycle-viewmodel:2.8.0 +androidx.lifecycle:lifecycle-common-java8:2.8.1 +androidx.lifecycle:lifecycle-common-jvm:2.8.1 +androidx.lifecycle:lifecycle-common:2.8.1 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 +androidx.lifecycle:lifecycle-livedata-core:2.8.1 +androidx.lifecycle:lifecycle-livedata:2.8.1 +androidx.lifecycle:lifecycle-process:2.8.1 +androidx.lifecycle:lifecycle-runtime-android:2.8.1 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.1 +androidx.lifecycle:lifecycle-runtime-compose:2.8.1 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 +androidx.lifecycle:lifecycle-runtime:2.8.1 +androidx.lifecycle:lifecycle-service:2.8.1 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.1 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 +androidx.lifecycle:lifecycle-viewmodel:2.8.1 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 androidx.metrics:metrics-performance:1.0.0-alpha04 From 8d515159eb3cb8f97200984ad5b87c4526444804 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Thu, 30 May 2024 01:02:51 +0000 Subject: [PATCH 36/59] =?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 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 214ae5ca8..a8238727c 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -4,8 +4,8 @@ androidx.activity:activity:1.8.2 androidx.annotation:annotation-experimental:1.4.0 androidx.annotation:annotation-jvm:1.8.0 androidx.annotation:annotation:1.8.0 -androidx.appcompat:appcompat-resources:1.6.1 -androidx.appcompat:appcompat:1.6.1 +androidx.appcompat:appcompat-resources:1.7.0 +androidx.appcompat:appcompat:1.7.0 androidx.arch.core:core-common:2.2.0 androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 @@ -75,7 +75,7 @@ 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.7 -androidx.fragment:fragment:1.5.1 +androidx.fragment:fragment:1.5.4 androidx.graphics:graphics-path:1.0.1 androidx.hilt:hilt-common:1.1.0 androidx.hilt:hilt-navigation-compose:1.2.0 From ea4ab1895b02a643a2aac60ea2987d01daee062f Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Mon, 10 Jun 2024 10:07:42 -0700 Subject: [PATCH 37/59] Add DeviceConfigurationOverride for insets to allow screenshot testing insets Change-Id: Idc781bf23021c1dba0d992bda0a3233e38e7c436 --- ...DeviceConfigurationOverrideWindowInsets.kt | 68 ++++ .../ui/SnackbarInsetsScreenshotTests.kt | 349 ++++++++++++++++++ .../insets_snackbar_compact_medium.png | Bin 0 -> 32969 bytes ...ets_snackbar_compact_medium_noSnackbar.png | Bin 0 -> 27004 bytes .../insets_snackbar_expanded_expanded.png | Bin 0 -> 197927 bytes .../insets_snackbar_medium_medium.png | Bin 0 -> 78433 bytes 6 files changed, 417 insertions(+) create mode 100644 app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt create mode 100644 app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt create mode 100644 app/src/testDemo/screenshots/insets_snackbar_compact_medium.png create mode 100644 app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png create mode 100644 app/src/testDemo/screenshots/insets_snackbar_expanded_expanded.png create mode 100644 app/src/testDemo/screenshots/insets_snackbar_medium_medium.png diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt new file mode 100644 index 000000000..2fc88e561 --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import android.view.WindowInsets +import android.widget.FrameLayout +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.children + +/** + * A [DeviceConfigurationOverride] that allows overriding the [windowInsets] available + * to the content under test. + */ +@Suppress("ktlint:standard:function-naming") +fun DeviceConfigurationOverride.Companion.WindowInsets( + windowInsets: WindowInsetsCompat, +): DeviceConfigurationOverride = DeviceConfigurationOverride { contentUnderTest -> + val currentContentUnderTest by rememberUpdatedState(contentUnderTest) + val currentWindowInsets by rememberUpdatedState(windowInsets) + AndroidView( + factory = { context -> + object : FrameLayout(context) { + override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets { + children.forEach { + it.dispatchApplyWindowInsets(currentWindowInsets.toWindowInsets()) + } + return WindowInsetsCompat.CONSUMED.toWindowInsets()!! + } + + /** + * Deprecated, but intercept the `requestApplyInsets` call via the deprecated + * method. + */ + @Deprecated("Deprecated in Java") + override fun requestFitSystemWindows() { + dispatchApplyWindowInsets(currentWindowInsets.toWindowInsets()!!) + } + }.apply { + addView( + ComposeView(context).apply { + setContent { + currentContentUnderTest() + } + }, + ) + } + }, + ) +} diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt new file mode 100644 index 000000000..b9970effd --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt @@ -0,0 +1,349 @@ +/* + * 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.ui + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.windowInsetsBottomHeight +import androidx.compose.foundation.layout.windowInsetsEndWidth +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.layout.windowInsetsStartWidth +import androidx.compose.foundation.layout.windowInsetsTopHeight +import androidx.compose.material3.SnackbarDuration.Indefinite +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.Posture +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toAndroidRect +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpRect +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.roundToIntRect +import androidx.core.graphics.Insets +import androidx.core.view.WindowInsetsCompat +import androidx.window.core.layout.WindowSizeClass +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository +import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.BindValue +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode +import java.util.TimeZone +import javax.inject.Inject + +/** + * Tests that the Snackbar is correctly displayed on different screen sizes. + */ +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +// Configure Robolectric to use a very large screen size that can fit all of the test sizes. +// This allows enough room to render the content under test without clipping or scaling. +@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +@HiltAndroidTest +class SnackbarInsetsScreenshotTests { + + /** + * Manages the components' state and is used to perform injection on your test + */ + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + /** + * Create a temporary folder used to create a Data Store file. This guarantees that + * the file is removed in between each test, preventing a crash. + */ + @BindValue + @get:Rule(order = 1) + val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() + + /** + * Use a test activity to set the content on. + */ + @get:Rule(order = 2) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var networkMonitor: NetworkMonitor + + @Inject + lateinit var timeZoneMonitor: TimeZoneMonitor + + @Inject + lateinit var userDataRepository: FakeUserDataRepository + + @Inject + lateinit var topicsRepository: TopicsRepository + + @Inject + lateinit var userNewsResourceRepository: UserNewsResourceRepository + + @Before + fun setup() { + hiltRule.inject() + + // Configure user data + runBlocking { + userDataRepository.setShouldHideOnboarding(true) + + userDataRepository.setFollowedTopicIds( + setOf(topicsRepository.getTopics().first().first().id), + ) + } + } + + @Before + fun setTimeZone() { + // Make time zone deterministic in tests + TimeZone.setDefault(TimeZone.getTimeZone("UTC")) + } + + @Test + fun phone_noSnackbar() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "insets_snackbar_compact_medium_noSnackbar", + action = { }, + ) + } + + @Test + fun snackbarShown_phone() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "insets_snackbar_compact_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_foldable() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 600.dp, + 600.dp, + "insets_snackbar_medium_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_tablet() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 900.dp, + 900.dp, + "insets_snackbar_expanded_expanded", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @OptIn(ExperimentalMaterial3AdaptiveApi::class) + private fun testSnackbarScreenshotWithSize( + snackbarHostState: SnackbarHostState, + width: Dp, + height: Dp, + screenshotName: String, + action: suspend () -> Unit, + ) { + lateinit var scope: CoroutineScope + composeTestRule.setContent { + CompositionLocalProvider( + // Replaces images with placeholders + LocalInspectionMode provides true, + ) { + scope = rememberCoroutineScope() + + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(width, height)), + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.WindowInsets( + WindowInsetsCompat.Builder() + .setInsets( + WindowInsetsCompat.Type.statusBars(), + DpRect( + left = 0.dp, + top = 64.dp, + right = 0.dp, + bottom = 0.dp, + ).toInsets(), + ) + .setInsets( + WindowInsetsCompat.Type.navigationBars(), + DpRect( + left = 64.dp, + top = 0.dp, + right = 64.dp, + bottom = 64.dp, + ).toInsets(), + ) + .build(), + ), + ) { + BoxWithConstraints(Modifier.testTag("root")) { + NiaTheme { + val appState = rememberNiaAppState( + networkMonitor = networkMonitor, + userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, + ) + NiaApp( + appState = appState, + snackbarHostState = snackbarHostState, + showSettingsDialog = false, + onSettingsDismissed = {}, + onTopAppBarActionClick = {}, + windowAdaptiveInfo = WindowAdaptiveInfo( + windowSizeClass = WindowSizeClass.compute( + maxWidth.value, + maxHeight.value, + ), + windowPosture = Posture(), + ), + ) + DebugVisibleWindowInsets() + } + } + } + } + } + } + + scope.launch { + action() + } + + composeTestRule.onNodeWithTag("root") + .captureRoboImage( + "src/testDemo/screenshots/$screenshotName.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } +} + +@Composable +fun DebugVisibleWindowInsets( + modifier: Modifier = Modifier, + debugColor: Color = Color.Magenta.copy(alpha = 0.5f), +) { + Box(modifier = modifier.fillMaxSize()) { + Spacer( + modifier = Modifier + .align(Alignment.CenterStart) + .fillMaxHeight() + .windowInsetsStartWidth(WindowInsets.safeDrawing) + .windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Vertical)) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.CenterEnd) + .fillMaxHeight() + .windowInsetsEndWidth(WindowInsets.safeDrawing) + .windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Vertical)) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.TopCenter) + .fillMaxWidth() + .windowInsetsTopHeight(WindowInsets.safeDrawing) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.BottomCenter) + .fillMaxWidth() + .windowInsetsBottomHeight(WindowInsets.safeDrawing) + .background(debugColor), + ) + } +} + +@Composable +private fun DpRect.toInsets() = toInsets(LocalDensity.current) + +private fun DpRect.toInsets(density: Density) = + Insets.of(with(density) { toRect() }.roundToIntRect().toAndroidRect()) diff --git a/app/src/testDemo/screenshots/insets_snackbar_compact_medium.png b/app/src/testDemo/screenshots/insets_snackbar_compact_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..aae785a47a05aad6e1b318977dc3cd5407e00698 GIT binary patch literal 32969 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 AbpQYW literal 0 HcmV?d00001 diff --git a/app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png b/app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png new file mode 100644 index 0000000000000000000000000000000000000000..d37f02c656cfa55ad44910427e2e149ff315d101 GIT binary patch literal 27004 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

89yOyJOQL^@RKlj&>PMIFNu~~Yem$duW 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 $%zH2jK^*U{0{@Qsfr#RbHI+b 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∾f`W_??SA6nowG9*ErA7QXj0@V~<`#Dc-)$4S7t<(i0?V2yL;9tTv%iMU1|`DIXbA{z@%%L%*-f|=T`A~hb@B@+ zUi3!gYwN>-2*(8ilEA7@hw%jQYR6*_<>kLRNPBe1qmwk-`&zcn-GRF$5$SeaqvxF; z%7&tXh<_)D^xQv?a-!>8k|F+xcf41G;B03iQ0a<3s_uu#>4{fnCayK$E8ww9jOgRZ z%suY~kpIqOUHa7RQ*PnW7iW9HN@c@D0BA+?0_h8If`Fl#Y=xZ(9mLUuD^l<$T{(8<1fZ}pU&cER_}UseJp(uK93tSlX7;f6Nd>8c!Z^SYlsf<%fB~BHcWXNA=oZOpwCn4=9&t49$jGt$4oHTT zO}+wrWlG{LQ29b8@+UUEQ1}k>1M-ih?Yr`7X~)70CfH#wtJWFAnrOn}GwJ}zc=PD` zUfYv!OofI=%y+8$Z;_GO#-cn%*1+>0Za0_HqgNlHh!FZ~5GkFoHz8U@eA6kRAwma^ zElxzgcbs>|tF2xM^0!cH*(jSJ{zS`w+muEiCF358=a7YCz;C`ac-57+?9$yzhd&k} zhnHxQ+=5tWqL@b4uB-J3795F)2G6k5@$Vpxrhs&N8_P_ghrnBn^!pz5g^1zqax8u9 z)m&h)j6PBIb(;HS8AF+os*hjvRY8pO`Dti_1a>1}!qhQn#-!hT-Uz_Dq`HH(ABxE%smPE=f- z%}(0!s^?DPUYuM^1}@n|LeSJaedF2nr#)M`6qTZGLctbnm8Bwk?J9ED^5yskK?@JN z1@~@i3x%Pg%CCnKmFh+!(?=h$>`k8*y2a4{z_(o7d6mE2c?u4mB8PP|+fE6G==LE} zAa#-Ea@yks2VpCpNnInD2Yp&KYW-%QG&$(iRw`E7Kz}D`Bm1ZOIPY-4TqjqyH;N8&Q5>P^IW7HyVJV1~s3fxL~2e0AzH`~3; z`yA#&h(MwcrdbEX2#p|^L=45PaelAKC~}waotLC2 z8AOQ&8dwNoetUMhV8y$xH*m5+bw{sS6(u@A8`f;Mxr=&XU0PuztgYWKLw##7g_>L&r ze!#Fe{JR5^*0WfdjqHp+l$Uw+r&~7qvrfRs;lv2k3D%#iH*XN|s77d{QR&r`C?trG zFmcKt8WcL@z#Q_ci$?v;`Sg{6i0n8n(IgTwMFqf}WXz&kpVjqh1$%rrXDL$e?%BCs zq7q&*<&{W_3A;!e6#kYr9LkI6sHQRqW7FaR;;At`StMHpv%WZ6GDMI!+~{9a-kgH( z(ZSw9%;T<$s%#cdMX|_VRyBTQQGaM%$i~FKeKj9-^=IFA_Asm~JzDpym&}ph!h7nI3j+WX+^$l|L7^?WB>xKPoV0@B)7|`Ds_<)ma-Au6|Ls!w7AlcE(0aH`yam z@*+Z$L=Ez-g|O9{>> z1fRujpp$bRh*K58th9L^AKyK5m?c#wkzdm~y!tcq5l0*DBUzH@ltPP@ohlFp)4$ zr}3k;{$tX&LZI)f7aoe_PY-q2U9vel{q_)dig@wbuB{-rt%z^Lj$YM7tk;S5|F!q! zfl#k)*ea1ErIIC~Xd%1oOr`8I_K0j*$DVx~ig1dMtt>;rSW+s>*d<3IOAOgElaw*G zQ8SD&#(WQT&U^aK`~Lg=_4(8M*5|pOd%3RbetxlF3iRde%-vq%SBklt=608c`!VYrd_lx?*n`EKW9zl|vp z@+n@$i~8=1fh;GyeCkMvL@5H}Cl&Iku^nF3IaVcc$iN$zSb_ZzOI6g`-KuUxErKc^ zo+L+v5{{pP^uR&A;-` z;Vz5Lpz5)LB$EuIdj;kEw>uwr5(Y3|IfNXFhxCRhyZ27fijgkg_uL{x)yxFNpf#E4 zi)cGW)HnTtF?u(3_%W4R=SQ-rf8yL?%cZtbn;~5>n-O^>ua>1ysj*?a^Sc&r_8*|& ze0NO$zb!8oW1IW<%53ZyX4ls8(!4bIN^A@Gdz@Mw2hKt^KXw!4yEQj&iGIy~V9Tvm z=fPX6G>6zFzKSeTqYWo)g?MTfr8Hdd+QSow&AAmYBT8P`=Tt;*`@AoRf&G`7Q|rL+ zNXYjFg6)uf4?E-ZNuE@0P#G7e2Hf#aUG1^ERD8xLMnpRO^NZ1FttZrX1JMa$cTtC2 zn^FQNcb4>808cJm6}13Sorno5*?h}V8oSd<*u3~hgrC}E@G0Y`ZtjY`BUVt7ssxI# z=ziYC2Z62c>iwMYM{63;%R;OTGv4pPP&C1c@f7 zDghi1z;CluROT}WnDJwlu49j7zfQ6wUWqGCFl)E;aVXkJtM#&;?>!i{dJ{yTLiZ7P*IGnwBitoETcMl z*`H}E@WyNvvamt|O>U~B{mAV1`9xn{1 zJWjn`YIbLivWw}Kl_))vY*#2OH2lv~4t>RSkoz|hS zN$#PS4rS^kCeb!*?twVvavPtM2X-?JotF~w@~73QJozU)9( zbT(?y4oa-XDNn?7D@zps-b1I{!wIWEAK$@LYB5+j?6Fe%+vtZruB~2Dbz`v&$38k5 znPz_h%gl8d9gaA z?+hMN#3`W~$W!xQ`jV{nMLWK zl?tY+WE820NXQ7?cY+NX7y%@GwGZiPm4pnmJ$-AS0H9|+E0kVwq{6cyv3`^20h6bO zu?Q@FNviH%v$~58Ls_iIhikIt*yl#AnBzr8%tp_F}HL*M*N1m5H+Ve%5DTm-h+rEoe|4$(!$eE~5KUx1f3dE{BvfA{ID~L~_FFov z$~J`l7^4k!|0aup=*AW~n{P#4!wcE2u))o)%ADsl^9H0YQXh54t&jC#&pEX8*-Z2~ zw45W2l~Fy4p63WC zcOIck@wtobz~IA%BksE!GciRBO3k&ry87E2B6p>heSc%FO19w+;DVL_J*2-+&RhKv zBw~kN^&yzW8nQ?(`0VS28q3>U! z4d$m3P%EEzWBkaeaE+TC^2pFmd0TsT?#C%_t5Ny`0J#s0qQ8x;)1<0;`{>b$$;Q|^6h;GyebKAs-rh(hPw4)sC>hd$NyayySywKkY208uzk z`Hpd;%10?#K=7$dw5KwjxNd|t&?&x3%6`_NRI8& z1VtfxDeyk3wP4_pVzz9y|Cqge>75jLx3GAE-H^9Qjumv`Hg~kiQ2J2xO&7rI`)?bU zmvYGKM>xi7P+H7aXFR34FLIQO{1zK`Gcl!rjA{i%MGoSRda2No2%~;~l6$dkJ$1$K z_kOz4Dt(+f39&^T(I${%0(*6P*J@mRyH8=7Z?wY0NymnZO7(kB^Fc>4=TT8@fsWV% zTz{}or%LzgmH@?pqSk>_*u1ohRy@J_BZxdXeO#$0Y!`DZ#t&3c-x-%c#n1C(h?yz7 zVD8Fo58e>M_0w+zDGczDUk4Gc&G3f7g(j3x*2!wGeqBtX?^Bs+(S0_l!i@cU*>wHW z4*~6)NKI2pfc>}&rk+rWEHTShG}8a7;*JZRBum!2^zdg3ret!Z1CJnoD0Q_0E+?VQ z&OkGrv6xupKoN$NT^mo`F1_=JD`gJE2K(x8tiH=Kl@+<@V6}e%O%AfdO!UHVyo$eB zqvF&B%W~Zy-fF#(~_De1m*|8od zK~>#H`Olx1lctr+nBsKx84;SBNUHL}E%|I92kHRY9-jmbzZH)i-OiiKhtk}6<~=!2 zZt2^avClL35?5PSD}$1Zo7D{%;)YpRc&mRcttkJ058i_#!7-I3-@gQ6>Zy-;bL)B@ zSsdk)^M1hPs*`TXL|w;pc>om0DO%KX~}ncmJM zeo_wt^;>4yfmT(DqOAg?*K&2_Rl^iKkL@M><6urPf5b^3i2q92Zz+x6r_kWpNZ zor24pHT;L18xY=J5z{q4Pml(v*h6&o4CdV6ogZDktG8v64|Av$-!OgClex?1XTAkW zj&aBHdCgy|cT>ejf-B&@oK z$Bmqnh2r_36frh6DPB3zUY0FB9AJbqY`Pu=sR1tQtw&X@az{814>tIqk7{^dpR3+| z9@%0~nLo#6k_ifKo{6o%81yWBl@#P{${SWW@xLE~p9D683f%$bArYwB^aeqh2V^l> zs{*Hy{hT~^Ken5Qirt>=02)>SfGP_D5%PO0D2BIOJI$b6wRmqe;VW;6L}HJ?IAqD9 zFUae2N2jM{85+M}dP&-<`(`#Q_htKrDFA!C0PXjGtv$`Z)?SY#n--$&)|QTx!y?>U?=nB?NrJ}`BsNaYMbzcS6X3`PwA%Na#6{^JJo2j2`7 zxoboY?$ZcwB_My`uHa`5FIroKvmaX=|5Cksr6=TVAEgYvRRK5`oVG4#@V<@V7P(!@ zT)5>eph;!4zPkVJ@*UsyvHc+=a{pCoz#~u=_G7bK2Atj0<4V3q6cVm&X3CiMu`=%( zOi3B46zRR14&0@diEjB*-Ca8fK|EE`}O_kq$A_7TpGQC&g*Z#UI5Iwl4X5c?s{EwOQI(Rnjn6=~;YxH8a4 ztKGhoZD^xNCyA`79X+s5=lvdCaquiLgL4+CL6sgd_m56e_7>(dr<(+hy^5;Dpr{3| zq^WjTPJe!KwUIOYrG2$Wmy=H*ZD&TstI<>rL(b#CfEi7J|M$fG6~cXbMz4XUKAqjg z${=SyBjBRL=PU~J=7c-LC@+RGUT*iB>SL`gEUvk7EFu7fPO z^;DlI`wDZ+Y`0XU9OCTeq2mb5qU=Ts@ZT`&%WyUWTT)0}Z*$(E~uqePmmtesa6c4H1RoQe9MgZ$%QN8+3<@j~>^+SHsIe^UoDXp^hiM|>Nq6`Q|w&ruIE1>d(%>p&YzuYEp0NW|t{iBKN z(K~>^MKgMEzyySs47hp-mg>1wY+@h1l-n6C4Ad;_cZv$_VS{aVpJw?VPC{WudS0JngBb1x_N^ui7Zuml zmj7fMUnG2Si}`BbHHdZY?NPSETTwjaCjC1{^>imQlg}B63}^RhCjpPBj*0SNd8>AV zufKJ=`fd`3ep9_pvOw?_3|5W6{D@Aj(VW(|d}$kP-uxo{?_oNVB4lG2xP$4|PLL$} z^xS8~>_2j|?vInteOLt~K3g8_Oi(iZv+D#b)LXA{r9xNz<5I+19n{bv8<*w288YRG z%;T~>W36B#4XXq<(kJeKWmFblX~?h>m?zfX(pC)@V zu)i8AWA?UGU4De>~Qu=z$k{ zgZ5Y89CwPEIqQfLbJ~;`izcxT)l2b}DvJ&xA=O9nDfz+U5$X_SQ{VjC)*r3I8s8mF z)H_njq0t)r8h(gQX@XC%o4;P|(g^JXNv)1Tw6V~|fOs%^KP{D?lX><(BM28TOI@9` zu-bELpoCK5RbSwya17kM=DIE)!8g1hW?-ite4$BRb z8Le}&b^V_eA7Zm}N{d?Lv0j>>aGYtGV$qrmfc#(Lg%x0nn* zF}6qRHuHeMU)4Ywe_|$I>fD8`>Eqs`>rs_0F^hkaeKcu5_8S!X80Rs>S@tTuUbFbiD|`t)H%MZ|tx#Y;k;5an9XddXIjQhR zy7HC4oF1v{N(npZaaw!fs*LOiyruTVG#hRGUQcrQUo+M4pE!D-cAp=Z2+weUbUDF( zOW@}S0whj3r$u*vYgy;4BmPLUY5B#N0ynlD@Mg1AmUd&h|DVF}smIj})+O5g^%Ld~ zO{UIHl``LNu$k}O_mJ2~d4X|BriA2JbntTdjZ-f;-$n@@_a6r&3Shg;YUdVfRn9lt zaHslBsO>^~)n0sV);Xt;zoh!WlezFh^z44&vLsySr;7DYd*xOTX}xuf?;vdie@7^9 zX{U3B?JVIitp8v=MB7VzJ& zJK3JZyb&Qpyu$P_*3?S;!E7)wJ?5K~b(`zKlzs-D=IGo~+(iNgm4w_T0ptZr6b ze7NUlWnbbgnP6T=Z^1a#MBXOX4`fCuF0QPGJ992+&(=w|lxD*N{{$a3(>VYUNxx@Q zwqAX47AY+38oLjx?zT>xN1GR`lvXHA9vr@BV>jXce3P7d?R%Ce%vz&r^F}r=qoh)0 zLR+kS`iaIGt|KGg24wM21Wu$8MsG97Qq#5zPK5=<>nn263O=Dk#d#l3YN)( z=Hp3~o-&h$H5s0B;itzs1?pFB@vfP7S1{~~1N*F7>e`l~zJ8>GOJ5GWKE%mrteYZ^ zfLs-$A>FYwvi>fxgaafmY%uIcH_1tiM-tAj7oHH!9OuJ$U6fzdX|PuH9TtAxX3ZOo zSX6C|7=rVcwc}bm?OYEN=f4IUzUt)m*u-BgX&%o7Ll?I-bOKl3evx#HU(_Ei-!D~I zr20h9niBl9r&utrcVOjm0!PYob>A^~&PE>F>dkK~gn4ffn$2B0RVDOvg&oP2j(nn9g{QSR{R8E;Q*aqwpq` z5s}&IGv)oB-SBXFzpY#Xq<+wV@j3v1b688-ig(>s;JYyJdVjK=_IUj{m=)TuN#%|! zKL#eM-8Xt5G)nn>#d`kxo-c+{I*c9iePdBS8toK;^)zJt$h!;6d9*S`2ujis_K%xe zjd-H+oLB?l^_YqBe2(yX&j@;%^#i+%A2`(-9<5$EspyF&Vg@GmkK=G5I44&-899Xa zk7MsQU2bAWPMq4HdbsGWtJe}&N@gZ-+CQ2c?lrq|U4Ac95@labN0_Y3S>|aF>(s zTq0&UTp2<@oP*U?W>5ulrmH;;;m%{v(dT0c^oKdS1@n*cMdR7EPH$2}!t*X2FNqmY z#6rd*J3EF>zYD&s;fkmb zs%N1S@8+VtImK3ygZB`S=x%z`H-zQ)tm0J}Kd<+-S%TS_nT&Arxtd*|S*uGrh*wK; zYW(g5-(r6Pg*^J%gqTCBBjZdtqUztBTmREfjwUrT-g-BBk?UR`T}M-)ZelsshS2JO zeRnk;7B+I3*7%{5dzulDn?)Jey}ITPk;Nr44pDs6h0TGWy^FZI9!9m9kwh{q5-?Gu z&?vdXa-Zx2{MPHaBRub_cU}|BcC@7l))Q}kXqzQ-_UPo}{AlApnos37#s9GSsw~1h zyvSVmZrfo9=zZk6R&=&|&KOL!rgGctQl*cg#Zsd^W6=Y#mYqc!$Wo^HP*3|ven8+p zWmVZkr?FG=`a+wO7#D-wheu80UCXaW-Jd2vhfT|UiBHPm&9k@Zm7 zx*v-;;hNt<_P+z=5NgYZ^xig%pM(|esdftspxQKcmS@0IEAIq>6ydDZeElHV#jyOwBrQv@!wk-oMV zzaaQMQhI##U0@aC?IgjU(0$yZPrv2;`mxK(xLu6vtGK$(01d1sV{+rOYM%^(OXR)A z$Wqk%<5Fvz?^-F5j`0ZMH@Q6;txZz=B(rzV>2Jyx{Aqj`VpYqjD`#0`ZwPRduc zr8kp=@RZic&kN%0oVv6eJBUXu;=9r62HjDL`c(`sV^!ZaTNG?4AMT@sBwhb96r7EO z@7b^?fAxa8;70ntE<`OohhYwc^ha>jwNUT-E7Q9DyLQ6bUT51MrvA)L-dV|o^gkv< zp36S65U6d&0Xznm)AjJr_r^Ao=RMzji8toT-c9L0YHz#w0L=he-ic6|5rl)ef*a^F zUm>|03j|~BdKH>m7hX*DEb-TlQ7+l$-*NX#MA}JgXm{l%_ek?IBA+SW>~v^kbcFYh z;vO=Wvx=%U1TntllG5=h%R04QjP99*7L)U13@KZ;niYM1uh>s{l|E?vnf%*k>ly1! z)b#Z{YFp`@m@l89w1w+6;Vm!Q$wmFz2sCsQLs=X&0EO}ueV~?pH6{wEfHA@Tha*rBr*SH zQU<+Pb_i!ze%%mJA{xHoh`!!?^~b%*+x{XvS2VWsX`xrACgCS|ttwTYxSu)A)BIza zU0Kto*u+q*sR$Z%z^=Nx98wr*8rEt(^=78=JpkKcc9uFhof)KrR@Jqudj zQY5)`^YszDjKkjEm9que)w+N1e$tqZG4+}i6@CDbxGfmqy%ArdOw(Hvod~?*R)FU) z?F*k_Exhr~wHXqI;9BSk3T13~$*PUB#3n0@e~_(XSVPDy9$ekj38&jqY$sy(Z;C7r zc5;HvOP09OyNE}ld{5yU39N;FlKPA=dQEZUP9A+XoDZ1TFSUGzZSu7 zkyzP{Nlr&+y`;~ZTyyU?Rd^)ufLRwJpqits6fD!ajmJ(MK}Mb_iLW;dXOKOa>ZkSN z??VEvN2{~RIMc9|$nGUOx1<4}h+Cy-cJIP9+1oNqEBiC2HX~n`#`G1~2fW^|OhH#t z7cv+8rKo08G@Mf7O)UEAq#oOCQTs6A6gNBW#M=mx3=38^NT@@qvde zqSiCLte3wR)N{1&>>&u|x}$Yd`1TohfR$bCuctR!m@IgB_$Dcf{QUdss6g_0WiN-l zyVIeZEshg2<Rb<2rdvf5Yr)~3rKj4z(5XtNTRfucb9qlmk)l~B zoLBu}p@!bAty9FHv4SaWAHHm{(ogngZ`7k0yn;P+{-D12_!)5v3OxLEJhQkDW_di_vqr4#3Ufxsk4LZti zpmsMtdLO%VM_FUi_@Zn&^(#_)@%u)so8CbXpv~Ssqkh`UU)vS_V>MaI#V%(b>qlCA z*HNSHm&KQ0?{?~1P4_nmw{dZGZ*mCcq#=DwQD;-A(hnoT3gkMSU*aW-hA2IpTJ1Zv zt}$tkgDptVUCY5)isTInY|PgbYsl8*6qR+a4QCkl^}Rw?tC`@*M21aMSnJVu`YQ$d ziI-p6lNZ#n5gD=@YIV)I#ES*}`K zdaR!CO8Mq|;QOc+``x9s5odLFn!(eAtRf%27=y$uw9bon`mdRCFKqlUZj4f{e91>{ zR{65MYW5$Wzlbvg+Z)U!mGYJIChEO=Nf7)vZm%^S%Y2-Rh2Svc0J7nVFH4ZCm$DKl zc?u=1;pbEhtXXeRzp|g9zwU%oMnt#gI-C2Ir5mUddgI~!i!V_hm}GDyZj-riggNI)MDFoIteMZLUZV^OzaQuA88i4{@j_K>(Dmq`&@vDDOF5K zWaAywq9;j8per?0onHIdcWD<+%?I6eEN?x;p_@Z1L4fheMxa(*={h9IK49cwvU9RT zf&sGW*-cCEg&nDd9t|xqm}`XZ)m6%+jS;&(j|!H*K?u#xFyp%pD_cd3JK&KpAQRvJ zG{a%kmS^zmxxpt_0moP7&RDeY|lb3!az-g3P(fTN}ijhO0SO6#DY*K$_LSzHe$vGW$ z)LO8`rNn31!f7NUzax6UAEyeRh#}d5IDaO<=1!TDboR4qiSGz@v2UtJ%w}mI&0Fl} z7bjun@IV=??Y9WXJNfXIus3X<-Ymd~4-p2aC!`IV;>m<`{={{>2q|OEQTN+iu|dbz zRjK_@q}d{PC^i9=rOe#cUAXl;#oZUn+GcB`RNN+<#CCz)JzynSVn@xL5eJvZcR+NU zJ7UT4R|$5RH7RgPo_XvUI$Q3QBlsxceBy@isY+K8LElxeju>do4tjg5bmLJ?0kUwCHW{YW@s z;IT$(`O)!WN=`~vl)Mt_ESZ9r+<%t+pl%2LdF8S9-r|ZpHuS9CF}kbs8wjo`S+b{A zf-zsvYFaLk=-qoRNrb5H+sKUG{8Zu4Rtma890gietYA6Err!jc22B+3ODWUz8+*>r zF>L>7cVC#3R=!F)nk1LxzOFLcw!YnkAS1m$d8*xWMMe@AjIGsuS3D8@M8(_R<>pbg zlIRJ}i15nE=eu4;I4SwGq_|NyY@NS;6GZl3Q@7DkI@ABHpE4UC#3A-5Raw}%@tlI$ z94YQBUVZENbFLlMi8Etm_%xbv2dT}N2ea%_VH0S~^Q`fY?W4La-Pwo~I>XLNop{5o zmP(AF75_~jJ4Y8CB$xG*VEFGYggDTBuM^dj!*$?XJE$-xoHs}uZ2W%*pjRw%Oq zlggkz)wiR5zf!fRpW|tN;$n(tngV2~`*itqcgl@13+`;?0Fp-Ii~DA8bwf^0gh!4& zIJEwCI^KYb+;!l4jh$tdR~m_Ybf5di*pbG;wV9~vK1b^x;2%(VPPcZ_V%~8sIZ3{Y zQCzG#QXm^JF1T6&iNDm(kILP4BDR|NX>6!%J+VnZR-z4cZezMN{}q$rvQp%Wi7e3f z#QF^tW$B7%%AkuTrkfAa5x~sZIwW0NI=NE26d*i{bUZBlSZKa;U0rTMPwZJQ6{B;M zaHH9VJ*Hp;b%slGbDHu_q6J!N5ppfP$Pe2*? zZ98SXOPAR&Mc_ki`F9wcnr!M)pC-L1Y0`Z-Ne86hTV0*d^;K^FZ`g}O3V9P_CQ7JR zZ4SM-NSZ`~Dr6qob%;ChUPhGa;c-13vCfADGuYaTRSOu+sFAyREQPUaM=Iqsl;o^= z#VW10_IrvHjHa=O8`AB`-OX74>rIWP=`F#|lnnT;Q_UVXf*5RsR%h6!@kd?{DP;2E zvoU-+C82T4%;yE%52<7t4mWl|81s5zRjI<%+DbnP>ahwPKr& zLmsD1jRX4>FVaupzV53d#@)_6fA-hR5bVt=HhKm<|KL@_zwm7W*&!(MWpewiuNFUC zmJdIkteDfAHE+#Y_~d7Pn6-I3YfM_At|9yp(oQ9H(xUtleUa-8RkH=b#l%ASF0rvD z%l~+eNy<)IEHlzQgX36CCj_DW6p1q>T7#f)Zf(@Wf3qKme1x0Mdwx7IR2Y3+lD>B!0*tsati?ZN>d#lc zMg@pFx$U2l`wWPRxXp7xu#P;%9vxiOrJ0D!ea&r6-&=HH);z?OzE{Z)>|yBSJNw!) zDc23om|VPGM!a~wcYQgaYR!~D?6T_<3+ek7x#f=1X`$gGZB1mFT4&r~6-2F_C6DXX z9Kv7FbOWSnOyAO4*+q(SXb)IahpwYpyQIm=f_bju0(S3B3;49k4e=35bTpRc$G`_m zq>MmFF;xrm*~_le$khlDa{7ooo$mcdMb`oPwJ4d>^kCDNtc|5N#G4X-Qy;K*mL+j= zMYh40fj+f|F?!6J0Qht)`G+UWG1{McClp=9hPvVx<( z5ByEuSXKn@qNHn#Y#qJz_ead%H*Wjl_JQsT7ayAc7v?V@mc&Ab%mrWiAl-0sn?(}Z z|93JGf3NTj67a|d$`?yf{~{T3jc%sThQ3%kVes!WS??8IVQ?mJmW=$HIx;#Y!9tXU z9VjRK`)ST3ohs|xTM4WD*WCghDP@y4D@NEf*|fGPsv51oXGHp@Jb`vI|4ucnI{rt$q+EQ9|GU4b)2(y*W7J_x_XZqkg$UGC z!H)US>4=X^PYQu_wa|{!UBAB{Cj%m}^bCK_B~Qs4`jNQ9)(N9m|6JV}boixQ=jUFU zLH{lbrL=HxMfn*H<2| z7Uj7a;$G)V&*X3g&G}aEyjXUpXtiX&mOh8>wlYHgv$ZOeL4lRnImVM3b_}()<$SaZ zYy23F)8$X(Wz~mlc!8f%qZQ< z7tIpm;)`|#3!I-!u2!l%^m_IK>9uI(UUFy2Kf4gFFl-v{Q`b+Vg*ElU-z$Swgu7q2 zCv$5}Ic+|YP(~vLj$!e!@?sgJ%`aMk?gVMYbFy2S zk6MpOPP-amcN}Mul9w_K>^7<+xy@}pRoV^>Q}I~nJHg05(pMp9u)gqiHv5+w8mK~d}v>NRLf>R+qj zK!v{x?Jd0vT@hRx|9}Z?dFJU~3I!FTV;n54@1@s^>d2SD?xHqteZ!az4*Z;h73~@P zLNl?6x5*jJyH`h>Z>tL{;c6<_>th#MP`Vk?;uOP)z%pr}Z?t2!R5=SAh^Wue7}S=E zc9Mh=IANz(<3885U*Csw@Ndfl-WdUL=0T+D2+hS89?iE`Qoq%W`E|!>b`Qbrak=PmfOeXmyWz^wEGsRBw>?qSMAvP6OpX*>rnYv47hgFZU6gG>V+b{#& zIzKfhH={dLMi?ifUlze5Wu3X5qK$86l^Zi1LH%6VT9rf7izvLS4k1KZTKsDL^S>w0vce;n2SYzoV9B+(|JZCq9|~Loi2IjMhnPVR6zsno{LV5Mbc$*}GUU<>V&=YK zMP9yD4|CgZe`iYzMV<#C6m&1#bvn7t+w#rt)0{2nN?A8gCcCx|WDugzvbZz14u1G) zY1_*8znr1`$F$o-P9*_8q30S|vh2G^_n#w*@;e?e?E~$X^Y0ra%twxU%W1A4mbY_0>>paH4w! LcKP`w`{@4z?XH|_ literal 0 HcmV?d00001 diff --git a/app/src/testDemo/screenshots/insets_snackbar_medium_medium.png b/app/src/testDemo/screenshots/insets_snackbar_medium_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7171bf417933593b3cc161aef08bb7ce093ae0 GIT binary patch literal 78433 zcmeFYWn5J4_6Ce}gQDb6BB3-$3@xBYH%N<=bPPR&GzyB+NIyt-OADhQ-8qCv3_VB< zHSlhpbAIA;&iU}ZpWpun7>2p`o^`Kvt?OR3Uu&o-kPy-mVqjp9C_a_f!oa`^z52n& z1^#oQb}5d5@d`sx{*jKi>DHWAJZLfjaUxYM*d!dUM3Y3(txCI6*7=E1$E-p)^hF&>dKgo=csFcw?z@Z%rfk=Pa9>5VS=el{X+ZS}-b zFW~YxO*Twf`_6Y%@mXIc$bT#O2Jqb&V;R!JbXR|1)CS4mU%d*w`M=ly)5HHSa6nz% z*(nFuTBd(w+d@7{hFZ}7>McgCe0|JKZcOvO1ClEz8M`$n^`r(rlz&tN8+fas?0!Z) ze3!gaWq}-cE5kkf|MFt_w2zxcDx0ma)wKbZ)vt*;t7G97s|Srsoh64Qg?#gnSOnXk zW=64ujnB>=?ZGA{aPyUG$>d85v%i7nAya9y?tLUCx=N-|&1^o7r-#70tg5vm{=XhG zMW?hf|23ks@S@nR4l|iq#{+wBW?87me!N^d6OBjLpD1Z23J3P2Vc6&&{qiQhMV@mc z2WZ~^vmD+dRny{TYqZqMUSZ@zkt0Uii}T^h{><6alEX~oY0k-sJ-QzXNfPhE0=^D? zt%8*?PltFyf zr{Nq)iRe-x-8+3x=COQugORETSHbk%r2cx-wMQI)k~x@vt6U!Z)T{eV+Wm(-^HAov zf$vbkrF~T&&XAApoa0FTtJ~&W-&TkY*MljT75Ua3YdnaTk>EXN{f_6nJ+SJw+Had` zDwRSBLK+@&*$ZF(I_fA2X&tbz5kraqs|f!PF+mQ`aEZZ-I2Ub_t))r zTSd`d?%aE{dltB-t$b06>M|dW-c}nT+MH=+Nkh>C>%&HWBdSIp;&0`7XWQQfslyZ> zxQTWZt=gzKX+!#U6F|+~Q^gj1kXQB;z1A0$eooV8{E_DCAPwWoqb{|nUc_ZfdE9g> zGHZYS%6Kl&Jt|>P!{LJQNV(w!&|P4Krw#gFja+_>G>t zN$L;(V4v=9m>uMT_*%O9)_$QXCL5J76H2ft%PZY(DF9rWoBP`$FJt0TW5mq!jY)Z( z1f%-m(PU()FE=()|D~UA*ZR3#tjHGEP43?FIPsk*GSDQA(8uNyMdTJPJMFcYX=d$6 zSKmF&C^0}5BKvN#D?Um^U=(_M7cvh=rj$#}eLEkwa84F9UAGVUQPnS=jsgMFZ~uV- zz0FoV_8;-7q|PU@=28QP7b;~*k`jqg%}J+d9Kbz&uHEj92Up(oV~@zVqHHNP;{2b~ z+SIrAOgB(ez%5s@e=CGz;x+g1TgI{A>|I3QsWQaDXK_xSjMu3S(MgXR_CN1y2jgd- zlD9>CbO8lt;#rJJ@*u1Y$O7&ETuI*opNe^^{0v0r zuDij+kN6K8tmK#gSB;GR;|BSYR`|kJcg;2M>QxwyPhbNLA3-^Tz02EljiQMEt+qQW zp9H2KgrxXQ_$NYI)sNPfsy`@YOSKs%>j2S_PAYF}fgn{Hr0gX15{;lS@w>n|qV_js z9s2Dew>Q78t|g`qnR8PSxb6G)yOuG-2?-Kq&2o&FTgH&i3Kc&4!u!J&H&<(u%!Ja- zwk&-;H_cZEQk*w7XwxljV90pTfPYf3W81MPM7s|ZV_&<+3wk)i9JM(8SjXq})cPq_ z*2ekS{@H`KMrmmCHH0P)y`%Z*{kZ&(oV+cwCmOr{D7uB38?ML<^gsjPXJYRD`NjJ* z<=ycN06*shgBM@HsE5uOeV4s7^hxhQz$nhR=&$FN( z5nqxn_R9OeAxxe#K-X^W|J)CJSdYG-+@A|Pv7X_-+^r9^kxJ+5ZeYkFp?NrUur?u? zYlF(j?#%NObJd#hk;ROYD$99R^|J8fXz~*55tANx1h!si#R5cy*Lg(jLkz0CQy|8y z$Gd2<^e0Za=lq)=@EDXN^LZ~17m~@OkB7i)C4pz%G`8ixHWrN6K_N5Me$z^4UGpMl zP?!U}PS9~-T;F(omhK~nLPDX8c{0|%r}l8^@#8-Ti(TZgU}f~bGz?mn97Ea*jU=?g z0|KiJs(sTTY19v&zo#N@`yh5?Z+7vN`m`q!$IYYKif}L01 z45lxMy@BpD!+lz|2?$p9j_91hgZmSyPM+_Iu@h+VCrb>F66Jws>ofzd<~Q-PyOS>k zFAoug3j`-DJ1z5<{4C)ye2BC|P6UcK6*72Qo38z%%*eTZa<~3+gUY5;xct?%2T775 zrM9rs+=d=;KRES?4{44#^)D43Nq=z67>Gy`19!c&pC}QOzL-a8Bfclg`4f}J-zN{) zMz*CLl99C<5`}vClJKB?BZz5#f~e}v&}Y19h!e6v6l=Br84qIWv#uRey!5Aa#NjC8 z`4E_g3zNA-o-7to0;e|9?a9j>TEtWqAd4HLqQ;Tg=3u}9MYTPG0r6S1 zKeOq}Ny@P=YHJ(BSg%A9`g4`eNd;=!(ui_Hf{}$;KT_T(+;;4$w=dr-u*R=<%=Co;d3P4Nj?1ovL49AnVpcN3Z zxK@T^qIB+gII-_wH1$R0w02PSiPXhz&cNVTuSGBd+|^YYifofjR+S|7SbV$7Vbnc*mwK(oh$wRvY#1Z-Y9yUc&M&vCzy)bmxhr4;Rv z=7#h^FHhstbY_eS$5JNm((QwQFG-x_7t3eTd{9)tVj7DbKe?Vj3jUf=kfO7IL90U; z#5C;zm^|@T5V=&!)(R3!(!1k*We_6ckW;*lZ%Ub&*r%ib3BBg=`=I;#&pLGF^lvv8 z_(8v0l%75h+m}#MoEJn(>9H8N&tHY$($QPK4 zMY_eRNh0$Cs9D#fhQ*Ke{mAmRc8R?oFzW&;Vo&7ECWx1^&&=`^wVf$YaVdkK=J)8S z8RKV>zW6%L`y^06Y}+u7UDe}V_mjpKc!PJ~<9)9zp2Voar6HXTP3R~zUjGo8)I)&M z%Khi+7yOESwi702TGAd3v9l=TqPadXa|B6!-fpnT@EF*4oca9C$N$2idL+_+J%;zA zk@IOw!>^gmemRu%%O^faD}Vnu2)!dLynnTHa^Ye9f?KL2s{L#S6+mjS)o_Bj_-?x? z4N+s!Gje>U(UV8Ks7>f!Nc3U*B{Wv<1E@1lxvK3B}n$~rEn9`=Qec9D^re(;Y z^xfldkL#Asfk)N)Tu#!ygysD=Klt@cJ$+^Zd}5?hB`4E(_5PKn?i(93kQrkZd}1sl&rs9AWKEM+@5YRoS25)Ju9J(Y7)0j0KSeuZt72k#}t; zr*!ESUr!I|`oj=uo5p5OLrgDTJz@$~PuwJU_iOM;fR|;9wtuVo#nb(M@@x$T&JEUr zYj4gSG1k8*%b^cyR@gILN0l2M;y;WhOws6MXQaG1sk$9DPj>9ibY3(`ev%Y;ZZ{*G z^5dyU8VpyKhU~0dS}8Evn4$GDyQV9)(%0-HwM|vrdTXuHHikKY+CQCOiR}}8wP$Hl z{FiedqI5*6Du2)}Li(ieREzSa?-)iRVYrWmD#EMHq@e zZ%hsdZ~p}u^a>D>A9RvTw-7?7J#LlZ*p%LIYmSBkas`@ zp0rJ-l7eaetTC4P20F9#{0`zX-yTkf%BSKykXg}!$W1nKDTC!@CT!X7j66J2NKAy6 zoZmX{We@4u5aQ(s1&7h(Fc9tZNrg+X6aL{9;?4QZO9aI!%_67hBF{ZW|6Sfl0c#n? zxVLH0PBQp~9rxT{2mG&iwV6ta?fGmnee`CIkb#?UYyIc5y2&!frr~YRGxvL|`v7(H z2Vot0PUD`;P3S%(uy6O+H}zfoR)Zd)7dRI6eT~7KkotTDL8dO1UT4^a5*f z+U8=U?;}54ZGfd56@m&EqmX<03SQ56k>O#p1+ViP!9(|~d0N=!CJ}`ty z87MzvOns{&mOn`4=IHOBbL|2vu2vM2IEc$aVZees;2*k={om?~w{1uya_Q~~>2kA@%aY@3lKw081tMMgyt9Jc ztCauXZ1ltTPt?-KM_yW&?U&0?=?X#mjU_)VnlZs-O?r8$Y0T{R)AvHoKD}5j?@r_; z@7ap=ZA;5xG<#Zb);W1`e|xGJ^X;nt8R--gIY8n?U1K!h=*ZS`J?We1QMn6DQor3BT37+ZCy)-j-gnfVcAjBuT52ONOt?DLz zTq^%OT`-B8VW${g+g#geYW1s*wk8a1Y^o@aZ*#tD#?-u7C!W^TJMlP1(JHGO`R3xX zgZ*+ad|Tk7;|rSg@QiI#C0C~$3Mb9IcKfX_C)EoO@GC)ay|H*uvo7(OGU z#I;j&7?!afJ-`sK)=+n1TG-sYVOS=^(f$)&WX?5raPRrm@gZJ>Qub0rA4{!w&`9Xf zinXKlO#&XzTr4sMSk_CU4j8rImXxZt_$LcyhpC)f{Ka}@YU28xbKhHXGUa%3i9=Hw zg$K|M84zPB0bH#B)Ami{eRy&Dl6$@8&612avY6Q!LWeV7EPAkkBo7u&3MpfLLl7$2 z=;2kyqJ%yJ)W4DP_!1qR365E0A;0@HK;Pqz36W4?A35ss1Jk;}r!Lf!N57+QO()e1 zmL|Ir!?hMYpZ>j>!?WQJ-CX9reVS62N27JPk(wo$sLngHa;!SuI*hVU(F0q$9$7AvJ+;Oifb_ZFf8p%=}*Yml{TrMI%of8!r zaPIejpZp!;W_Y>E(py0fy77cMEu0QAX&1Tq60WHJBmr`3Uv>EY)fR9sW9~F|BztlN zkt^Q9g>k9y&P7AQzzzA;svH#eV(uKOnv-%4%$tm3q%?#%u}6AzZ8I& z?|x?VM?q~b+2bFO_Z&a=PscF`*Z~Zgd*R^H&$@mJqj#RsMcF9Y<=XG|v6Fdb&ZV)PBQP?F zmjmaMnfa9U2{+azO+9MYN2}Fm@Vb!Y>X|+tG$K{@aAcX6aAD`V;?(%L%K7usjy>*( znN}bx;@o~_KrH#0EA(M#aDtn`ZnHD8)pns*CBx0Zr7ul~Brqqj^nF$~qjaVcQK$fC zUY}iIxi)^G-ti=-F4OsOPE7iyN~SQZA)LdCiR%z))GFgW(T0Z31Q--+ONYnE;4kc1 zamsS5Fy4bbS-y+~@+aN)max`?q(H~ZtddLx@cQq<=g+aR_s^Pkf#RyLPWp@sm*%6A zuUVgkHE+ZtI0khyswKR9NKQSn`EFg{hka*PVY=XH>Myu3j82xTUyiv#q*6DxP;U|)BgSXFsoRDu@6w}->E;p+q`qG~FWJw>? ztM;dak2vIc%(1eMcSFq8a#)_0=XxPZ>&3hL9y-X+@b5vryGrZ9U8+8xcyvi?K+D;*ec}Uh!nw!#9h32j z+9U6#8?BnsQ?#Y6D}yxR_pbC9zf*8ZyC*ob$#S$d0Rz92!7u!{xe%olx8iuP^auOg z(1}&a)}U2C6&=d}h|T@=Xg2#(JXsoE7D0d9m=E2mI|sDOBk9PiVh~kE+`NbS_xOvH z#)WR`a+RndGnb==flAc8M+_wGS*2eB#DO~DHhzf73;(KTO;T#Tx9{W+?ELPp&veseVZ%NYA=u`=BdntK@TAlR!&U zH2~@pmBa>&^92GLc5h_5S4vE{zhxKU#zKn2^0Ski2)_)xq=MLOSM;#{Z&JOX^AXq< zW5|s5Q>NRu3W7;unCS5zC)Lk;zUzIAxlonMnYMXcb~#r&0OoBQn+7}e74Q$ZR%JCh z9Y^Ti57OANNO}6ednc)dyv84T`r=@E?eRv~xr#Ck{&ru@V^3R0b*9_7r&r|iIL}JD zgNYmn0AE^;a2h}~c;$K9SWZz-;<}fE5#Jjt-MAa_&RylDP5+2vWLRT6mmS;MrUQ~S zm_s=plD|nZ^&YlOi&P2HXr3*sK7mVL5+S@*6RVRySUpiPOA?vGZR-mzih)<#w4Epj z5h3X7XIDW~db!vg-I;2h11&p63*auRoJq)SUI~<}B3AaZChL~!hapD?6zXE|89MyO z_X8F>uw{o&zNrm(gjk+usd(R>eZmBIP-1?hMMpBoxY)4oOS(LDPTRK(4$EhNjyOy=_k-1qYFu1r8g7ZvR`t<7h@q0un22lKdYKoUEVB>ktjrP^`NV47IH6&=ja`HElr=`T4BJF{||kw z1`lXseZz_wvd3;@*LL8lNg~s5T^aA$u3V6CY`tWc7LvYDmlm-(Pcjn?_hMX61G*6y z@ln4|slR5=WsWE0kYZ=R|6dhc^G;9ckj(K(tjFqhL{mzBS-^mM9Kw7Cg?Z_lS# zB}t(vp}HT>_CF+>z@1&}v}+N{Q#! z7Fk)v>p(bfSW1~S3->2_z_q(djT(m2e&x6ENuviZojOTQ#>83p-ezsm4Zi=_o3y)W*invC2IO ztFt*9$>+kQbJm{D3y84kGEev&von*KN^DucBpZLU+C-$ut@oClFW-yp^y4j5!ZVsK zzSZnY??`q!wVgzZYr)TDsAm%g4;R{|Gxpabw6{^nd&S}DPJ!GWeHkWaj!fvqz~hwZ z8f$wysJ}^E!vSYoZPy^Jh)8Yv)c}Hq|3CL`-v*7_o}f8!MGhA(?MNb+p|ewuC`Jbs zKKn+^@jNQc&YpJK$6Caqs`0qdpTD3SvJF-@IV?fXBPknQI!DI%qineA;h%053fyH+4k4r4ePW^`Cq5b~XBPk7$4C@?gKFGHj$)=N$=;5x?~iHYPIwKb-46 zTRcEt&%7#zXOEZQTa}Z3h$s6!bIy51ZZ>Gt{#JD6Mddf#4ih+P`Z+to^yJV!4gCV3 zf;#*4!HWZx{k~e>sao>ElLe}2i2LJT-;7Kv;em(J10uY$W7878)7qXTEI~jsJ}sVkLy{wr!f!_NO&(=9L+kZA9^00ur*6}8z-je>ZAc? z;h)P~x0vK1W?&zj%p_L$ZWx9ZV`VF6{@c!M*BWD;X+vdAAD>WG+rv$5%%F1~6Ij9( zIPAgQ*6>dHx~Kvj-ow@`dLz%&x5f2hOQcsVR-bD?*2;IDqJK!InLC{?mJUb(t~!Q$ zeRJ-qI@=`h{-t=A9xf}n8lxl}d^P7&`$vXEAE}bF@g5<%bF(xd~4>qM+hv& zuzUTR76FW66tMozP5$QZ#A|v5K7D2Q*YEby|6NS?S5C69PviQ6y-ZVIvT$$1)$oBB z<+Xtnb~{FSllKQD%I_^3o}L1qu8Ce7cid@Xd0nl*zMMw8@HU`(cb(s=kF*mB9FWc5 zv|-NhIiO)D@9{*7UR_OneYL11n|hio6VMnfxcU1!{Cg7g1-EbE127Wfxt62$!!Q3v zxJ|Y|KidO1K`3x1`pn-}|LbEsL|F50KXkmVAnFhm5^rcsnzm2N|9!!qpyCb=+Wr7# zbZra@XGK^O2DESD)nE1dEv^StbfUCy>KrD!>#oKO=>Ir*4dWkFST(8DZC`EY+4XkD z|I!KKhI>>w;sJcnb&awD%3MN+>9ROSV07&tx~=8VectPt?r=3_GE{ku(xS(Om_~J* zmT*!4uJ5i}b(-8tcc!XL*x{aE%N55M1xWBds=zLuXt$NOk8Kxng`e3krR9T9`pIF1%*&jVG8UU z7zHkS2Hbb#5Rm3K|6_~q_Tt(e_9Ww=g8=nENb>X4x3AUs9m!wsINm@~_Ynq0QG#E% z$hf}Q|6ZeMQVsqLN4o&}9GA1^D6Ql9^gs5HqjHbf`dH&?k>V<*ixiSG{u)WYjmv@6 z!35a-UFmH-MU>_rK*Xn;s&j^0t#6-PnN+D{k({Up3uEZfw8qr?#r?L9KR4O>rOshp zY4jv)U^N!PBb<~0dF^xfO~1cqB~!f1s%aoY@@yNWZ|wcJb2I1R21+261Ncgyy}vnl zsdODb6i}uF8v|{f6baWNpS7I`t+R*I>|Nh0r^_hrwexAemnQ%@xJf;{LLE!yiJEv; z@Sig9efRJIdgPX0psS~xWf08g!jnE-JzzJdGMUJ|_a1N79uQ*4IKCe|S2E4{Q}e+= zd=%>sW=>89tfylWth+m`R&#C41gOv(vWU-2nC9-Zq#E?t7+HzmZQ7j3bO`@Y(RWJx z@`f!hYmJ3=8ur)^j{d#}wOwob_@TquV)z&`+m%rhHZQ4kF#ot@C}{UWd`E<$OI7JD zN#DwsAYZ|NK5WQfDT*9_>B|&gdONM$GS!0L++9F$u zg*_~rx22s#@{^<SuuW;32cA9q~PFZ7V zQ{OMY}%CM6ZelAvKM*3^^4I{XlPBP ziv4AKb+=D<_4s>3=RxLjSmWyq^*hr$y?2O5VcF}PX8As5`6+R*)sHONdMT^9Mvg+7 z(o|W7iWm-t+BSxWiIgRZjlT8l!_H=Q+L0FCAU+ObQHRkNYGl%u?^KBQJeBFG9}s=TcbSVYNq|`Mwn5Xp#Jv`1H~Zh{IIsfM@A@8Sjm`roQ2r zCNR7>s0PRVjOn_wjh~gafzmTwDluPTfOwy}K{h0L3l15Q9-4NOlaAiLMGDa&EwvQg z66pugHGO?pI<+HVlQr_tp-51{+K1U?>IUx+jv@zf&mD4QGw^M8X|SasmGH;L?dV7H z>toI{)*lgr?sYc6gph3Zd|4Pt=pkL*)RJLdjN6f|hd7z{Wctgt4S&}Ub-+x-SJmH~ zc_TiqYpPuZpC0>-!iH%oxaSx-^s#oLSeDGq*yojr%K(|K%)ZAA=^DgW_aZJ zdAfN0m9NdbZ#cE_%PntGIhsY0hOZQYG8jC+gHom~*$aouu{d-#m(4qy142k_d^6eR z9y<=fn_<&bw}r`t2Q$rM?2T(j06?8OX#Jc@=uP)`EnJXek{A2eWN5rLE7#M7&z||< zi*5%C-?vA>v(&5uF3GIaxE+gyC@H}RN=Hvq3i8_31ib#&{I@Vstle!P=NifPL6o%Q z%EsXHAMe4!wcQV$qAxF5ba)HNm6#+18q2HIF{Hsx1IawM8b+r z)3^3N=hk;A&R{nBlZ*T&8f*=qSL>ka=$9&i+V*W3H&*+6SnMbPf?7exQ-8-rr-+Pqw%?ZZ#K1@lyZ zOp&R-&mBw-c61PVn3($JR>G>gG=X2{Jw+yBrSJ}&r(AL?6>IzvG#%z6!@rbO(TV5* zdt9Z`fYiz3bhbsOdYc$6c~LIK6%Ados1i_*7A1ESC$xi8hi$#ewreje`H@bMd)GqX z^fUuts*HfmRgDD2l-D|JnIB||P~TMR$$tLn^ooH@@kUEC^s8U_c;ydiY5v}H#e)YC z+I{Omf_>RxscDm>@k;w|c>4;?P02ycz4tK9HOj8kmgw?~IRQqoL~Rz?LC<)u04X~2 z_i1uwpc#kjQ5+s+@dXW$Wk;;4xgOzkH%7S4E~-a}ojnNpPw-yIa8RZAt?WkUn(oG8 z9J|W!QB#tW_8Ne>G({z(>^^K$7B3KGJ*x`+I&5oNK-Vm2t1oc-)QpHAVq6m}fi|zU zHPG^@W@a(e>KB(VkF1uYprLx%g*TA8xa3C zh&u(j)w^st7}59oVo($wLaSG&NE-Ekm`CFl5?29jP!JJt+3 z&b!-~0ac?%e{|1e!0Tk8TK2{*{b{soVYL}BNyhtD_z^25AWHGo3gqok0k8D^c?@%* z^7D?g3mMrTM}U~t1Q7u%e7cXgsekMSEs>4UDN4h6gutO#7%1cp6|4XKXL@;Nw3(7neyCdtlXdgNG=z|C`CQ6#W zvBm^qU~GByZR_R?fU@UwHRD8XtmTU$dl3LSdC{<=RIc02J&Pv zj1DkExkNsj7#a}{#A(n8rg`!qvDIq=aGvctrcEYWwq}NUGR}_j|8hCm-q{2I%(Or7 zU@ABG75KKYEJ$NwOrLVdn=0h_1UU{R3g5z4rXf`pTLnOMq(kZ<+NT9RkX_7P3GFbv zrz=hOQOay(i>Qidy!Uep$V4_3G5FM-+oWN3njL7mPuyqOx-i~k2seq8y5pG-oFI=M z{kP-SOlIR0N3Z`1qFR>cyS+*jE(Ws3kEAbfOU4h|Im3%&5xht2M2e3sCk@K8wGl1( z$sZA+M^0$}c3W?HTMANzfcZ4(t{N4z2EY>2n7M#Hgo|%g7uJBM*=VfK>uz&56=Rky zY!Op$l2Q6PPT>hIUWtf+u{5LLK53hI?m~@ zRLtOZK4noZtCb3qIVC_5&Y6fj<*+7`-4zIAI0_ zrkz{eOPkw3Q#$_n$8BTg8-qOZnYqeE6%?xn0S^yC!BRB!9CwsjTAuyW|KA8&Y;cXX zO=1YzOi0);&a9Dzz7Q(iqb+K=cifT`PaJkX$mN*^UmpeOz8^Iaq;p_g>HNHXL^%nNH@SUlO zP#t=88f;5P_uj8>-_>WTQC9RmGpr6(P0<|N$$Z#1P368Em+_iah;k5eWOcV3ma$|a zzBLnV{!cD&wR`zeI7i`~P|WOE#mV-!HX(iEV>-yfHY$Y-mrTgRzSG zPsaL*6Ysxw_RwM0N)5FiY!t(+7{Eb%la#0owDIa0Isqm}&ASfhr5v5g#8H zMu;DAM{0HVpu!h1<($=muu zZXBmgVqrF5$#HdHVZoN?bUe%xt{o#`wXvC+26=!J#0NqLX%sZl003Bx=vkhvW9n<6lD_%EAuT1RTC9I6vm}vn>T6J5?KTsd}nai-^D{fI# zp#KMhW*1w#v(s9-ek4!R%nqHnT^htRmx(+)N1B|_!=dk?g)gzvo*ZzhRJ0_(K#LXn zOd!3NE4yPq3iAS@-~}>W`fb};V4*%DAFN5%lWab6QoKY_P-2zavk|9UG0={BXb0wl zh%PCQ1q&UjCgV`5j!(BJ**I!-r*Xk&eiy_U0!JFiYI}m76PgE34Vc*`Fh1q)D%|pI zJP^*9=Bt6TI25t^pu^Jc(Q(;u;wys;F6@Ca@Z)VT@Bf|`sN;b8}* z`U`6CR;zta!3reP=*dY^KVV6_a@QYGb(fYv8f|-exaEv{L=*2hf8md}<@xLJ4{zoh zHTw1Qd83f@K5^$}d&+*ZpAwAgGh(i@_x6iW$>mNF2(l< z)7(p%8rU%9ZQ}h<7-1QR;nK2fpCM;ST)3Uc7HbmsxLpHC4(=s3x;?90)WCrO%HSrN zL(z=qdYp0?5yZWD)|w*!?Sp2^t)<<>KCh$KW3q<^lo3h%p(#heFzBsS0bL9jmwX@) z)xCBqfe3h6ki=F-x=H#ps|3{n?Y%z|gUHW)8T?(iMal!MQ(VdQ-=~4O_BQaP8+0HS zVf>;grKb(~d7ZR+kjT$1I$FH>bfkFe=uWR*?m)VjPve{?irXvS1TqrZT_=10EI7PH zT4MXNh*;Yq2r|z4x{H~7HBXwnqiPBF%)7np?3D~hG!ux@7(8}^{~7pzGdw{X?2uAF z;Zr{BN^iIo_9@67Qx+R$R|vAEg@}Hha!F=pS}g(vxV--rN-wkDyj};-4HYVUzm9(7 znKvL6gGehJ4d*i`kdhl$Yb;WFJ_fJGkqzufR_Rq-Hj0$mA}+kByoJq5-ea+W&iw?( zbGi)zb9HW;_y%;4>}BlW_UWee@OipjQ#*LxTO-Gc=G_vaTQQqqJq^`}X~$by^-j}H zF{#pC*^>HosweIrr)%xYQ}{jd8h!>ZkmJh@G2)xkUw$WgICsX5Wv(G`J1?FeRL4oJ zXT7rPeo2sLu6@xKo^v|xEcINijh)%WLyM1k!zG!8DY4isIWK*YFPuMuy>l697ujQj zHJmB}U!mW_xogm?{;t0+(X1?N1I?3L#bfRQ1xBSG4S5nAGH9D|PRbs5l04?E2{(|_ z#Qe2h?^M^dO7t~1>z|5Q{}F`SH!-Pk(bzcqLEc&1XBidRILl3Ngu zbS%Hl1KQLincusK{8V>hL4j-#(jm!>;? zDNa|H&m+e#2-B?n6QF)1(|3ooxa8k7k*7~;M8)7f@1>LZgx6g$Ol5gfU>&c?VUu)5 zDT}J=pfB^nH>`g@FV}I95F86)C8|Y z&W~`L{Cig&txu|Sj~2-051-G}X88XEH<>hkXg%-fy+4AZTi14Gtq+~GAd_%vV-)d~ zojHkSCRPY!TGnoJ%mmMQxd@Qs>S~C(7e$0&!;Y>_X@KhYbx2c_8kcm3Tp#kHf(Kve zDzt%6*$LW%?ysDlT6cK+R*b$# z-D$jvy5insU<(`A-TiFB=2JNit3;31*#HAPDbXqqa>@h!zAGD0{WVCX=YMhBVIgNW zX!Lk&+1ns>w+02O@<{K0@{gmg;9+LDp?z7?PcgbWOH7);CT!kmPXGY5bFx-HQ}A~D zz7T}ATPXM)SJDhYW&Zj}wWjwV!+V#Y3H^qsyrNxeKV)9cOWHCf^`W`a%n5df3lLUG zDX{hL1{<5@es_6x$Kt90(9r{A-E2@2!Xi3)&A95Z%sBgO!jbZR^G)Z zPljXZ&I(P|Hy+DQ^F(ZJ<6hJpQF#88^zkw^E576JEx-#^me zyF7!^hs_NuGe%p-k}c(3;*yS2r%Qr?H4Dg@hRJt_aYBSvY?_y!O--OS#G%D{C3SEs zZaITB(}B5GfBhMLUdhRB2Ei&l)yYUD(4 zWT4)j!}?j|yqfpu*>D=gJT_HY5@GgyW|RaY!Bk<^wtsmH!GAExMt zjRgk=C=>s*O44N0l%u_VdHq7~SDrHz>$`-q>_G2xG8(Mx&)ebfE#kifJa=E?F?t=v z&#ApoFEJ=5s6vOh@)4W_ndHn1neQuWpSw+| zx9ErRxj{4KtfUdTMu1}Y^!fT2NYzO`zTEKCVBLD^;IWHE0PV%f=2I8t@>$`dAuVoj zd-hyZLin|i6zAK}dvKuAYd2>OOUZthXcsdsd>S((ozJqnH32x`F$UgV=8FXjh{0l6xv94;&t z01VcP-n7B=Oq?S9UO!$8l4pqk`!d7KAKas)Bd!jG4PB+R`=N3K;VbwNk9A1tCilA% zlyur$qrhTYrSb*qo|)i>&W#Wi;fOAh8iW-`m0zuN8gz&;?%&))VU;?KfPdI!e3eNn)Qx=Y?EvX zPy1`J&Q?P+tIf9Nsu$F>Al+c9{4(h1xX82>YjBq$)fn8lS<<5q?KNv7cRvUiwFr9O z|KYWEOV*?ylR6)lf@nz(f5cwxF~B|T6pp%zml7KO8xr|a@iOc|d<6hE#r9;AM(Ub^ z`}kLPr1T3P|$I+t?`N)e%$NQ3Bc`4G4ruy*Oh39-%eA;B-P@F z%&7?Cbi_$AR8X`oHzoRS@pyU1pxrya81@D4-%3_L@*a|6Cm0c1s{}%JF3s78h8Lw+1WV;%WP~KqrnRDV!Pcz7^ub8In6CPD0rS?F~>DJp7pPr z-rDiKhZB-b8exF>!mbYx{BbypmKNgua###u6TC6nJVwNiPGTe8P2d0ttn!)U^(;c6 zDllslBDm-7IG8~3*5145trU+wllLZH=EbGpm`9GfjgM^Mg1U$A+AiG;^|k2nbD{Zu zjA^+wR*7bg4n~otm_L3!8nh`J zjYV!8X4N<_Lc$1|P7p(eYC;9=)3vI(M^=8>R39xD`=JLsgndSY8EbZR>jxBcDaJ%Y9b2HVg=#>WLLoG~5E9$TRNVS2| zETG-Ekmic9S|g_0loX`Z*k5%-$8J;x!?LxnILVTaE6Z)FLh57KYfT0cIutb9`Kmlv z-u?zueAI^5D^Fcg zuz=K0jC|uu^2f@DeA&unG-@y&QQquwt5XiTNXJ@ths(6Cq~L!52Pm^&$P9hd^C4+2 zGl{!*+qV&?!(8)<40?6ITQU};Wa>sg&mA-*Ne2%)G%g=2wm(m12k9BFXyD1Wy+|ew z*VOOhk5ccHTc1zIVvwG7rj&u{fp-Z#yYoM$ctf9;@6|X2&Uc*0YAq{O*E;Nmt zFAJL5ZjH8Q%A-uX{Gkifz|MR}*^BN|{kQS6=ug~>s7~ieLOW#mRDQ{s-|sNba!Yo- zLMlK>ToynDiI|31P={2#HOc>`wN7gstog@8pgExUo22#tw|BUByW1Uwiz+FznS#fc z9yPs!E+H1#UU%oce`8RFv*j2zKxF8~9hge$(XMFW&P1#xmIM1#VNc+jE%@0z%y`nw zMQSqm*DZIV!pK#Yn9*j-R)3Y0S+?Vkg2US(pRcD^Ub&4h;?ES`z={RBL)1WcGOS0s zVvmw}%5@K@KZUOpfSwGO)(|JiHNMr$4?l#qXw);&;D^lIBrU#zC=3_27Xce(-1!85 zDgQ}4Hy!^Qk@YP%2T_p7(E5Nu&AJ%)YLIQPQwF1+>sF2iPp*P2=sZ;C6Gxvc3E`v-7vu>tj|NP0Iw`w=N2=9^n9 z1B3Vp<%fd2%TJlM*t3W9J6xU}0rdAfMAcc;2sXdDSYfN``quHbLg$v^)Luw3NrdSS zF@Zei;l-g84@d))ota@FTmWtqcfM|SA0Ju=#@a$;??YaZn-3^;dK7fU%z1HFSg*@uU$Ay_*yDB;2vLk<%`@DqbFKr!auY0T}EaehkoIUD#R+`9$3sTIP&;nldd3;fz%fO>q$XmxNxy zr!WHxfr;@p2z)1BK_O;aNqUPypm zfpLTl)I4t??VdDsIDTXu)HbEVeEEuD_pxEIS9zQRQG{x7n@fOc0kNlN-?#l)7tsR` zBj(;(%aHdxne3<1acl3^{S%OA|EkvKE;pcsQ;M(Ro+r~%iB{#8o_2dmlPjS#&phTI z!tdx{=1A7}($8B+q?n5(*&v60MQOxUvY11E5Pm`qB1 zUQ2cD>R`=4)erZ z_RuZVAXx0D3EijvqbRTBky1)z(wXT5&S|4RHDk zQCT__D=ix7@qsm_oxWED+&DqLR3d(F%?>;Cc7R>zIL1~ zbS~FBEMu8r9(T!&N@+6l^_uAVzd$!>g#Qe1y>f9`(BqQ(Qqk!=C*5}jY? z-Nu%BT7`s4F4ZQ=agTN_%M~1_;&`$=??*0sOM|xAftvm6G&a}eIJ4%MYOu-+8)PJkqt%B;+ygxT^)DaR#Sd{|s$R-U3 zqRby(AA+%70By3+1lVcmSz0F519ezq!ff#m23v*r6!g*#pfRr z`$S0WCs(&d43r!nZT>pQ%I(N@mp+X7u*)$gipJTp^2;<+JShM0TH3bn7fNgz$r`Ve zF#P|p_m*K*cHO_If*{=>N_V%UGz+D>QzVq`E@=b>>5fGS3nZmWK)Pd*0s_*p=#G8s z{$G1PKFjxfIoEa0m-qWx_Z)M~F@K|eb57%1$u1#e7N2)NgubDdzPl;^xJMy1kT zCXDTw`GG}S;3@<@B-+o|qmmdx4~EGw9#`{_YT5qke!k>nr6#R$9xz!+{X8^`p762*mq0c|ZNjuMO&bk=m7^D#SDAWuu zv4F6DCl>2cXm@myu!@aTPI?Fy!L)*>ZxJQ0phJ_;65W`x0&`aq(I&gcQ_SMxemYh__b#8oW@?fvz%klyN(<)5<7&&6xOk&EsT{AXsn3928|`f~t~ZrY`-}Uy#wI=*D&ABBmxGqdOAVgR3+78Q+*e7A{wV&Y(Vc#3 zWL&A$J4tZ#jLCWDCTVa~*=sf;>wRk#vRnQas2 zosKD6lsK4qiAl>USEbg8s88-^NYYY8@J^iRPcAd3jLF`P9aC9t9sL`OiW(EXzicKy z#*!I;^^*iRexNZ@M4H;(MH+$7ZW7f81Y>l+*KB`)w^y84LqhM`E6a;&)%G}-MGW?HBUTcG=5<?OR^X%q5*V2M{3QzyBb2Hg4CIg=mk8^x zL;IXPLLX^dDjXqXl!+{21@w86;Ian*za?pm zy2At@oB*wGfOerNh(U%m|8lyC+Br$oMPUZ=p=M0Sj55C0-0U#54&wE%D(~+oOXUJ! zxTyb1<2mPS@>3=Szj$35hcQzycf>FCy+CcgE~9BGqro%&9Gwu;$8bM4ezfbDJmXrZ z>q?0J0Q#i(y?Pf5{@6*%hHnP(`DGEeY)Xkjg`SxH_Vvy^(2K79{I0FR%w*zXeu(?4 z5~I7nGIyx>b`?i5^I?bq3vt3&! zJ_5%&BB$R^MCmO zB{|i4Rk9F|TU6myBbh{6%zzG+KVcUDD@>m}r6`bx7JBzFn43AQC2tp_7+{SRh#Qc`+Mk-)XPh+;OMlDl`xO{hl3@A z%|2%J5j0uHU+zC$xeU@x%#`sqHnRapB!HfpIJj$6AxTANbdQCq2Vngk`nERLKALUN z=kU4g+rFtUPC>n5k3V3Az88G&HDEH{cl|*lo5m_Zg+^1PC|FjL14K8Vb&`iiui0F$ zJ`3^MEe!5GmniDX*tyc!;!-~K9kYw`RdYOIiBe-5AZn_NnW76&xMh=2r;oMNs}aD( zYGhzZS+I_`mRDhUnvFEmxA~+fon1zgM5?*Fx6g84#7-~X^A-1BWh?g!W9qcYH%AWx z>MHadCaS;K2^faI8gj}47(khC66WUTCjNqy9JXx(aNO(x+Pn5^@gNdf)MIB{aPfXg@$ib~^XY_Ekc9#f~o zaZ_8`tod^89@js`nr zGHY70eWQ#RPgx?`k)f6}{X|&k`S78$3YpT0e;H`|m#Ya$=+No<)rR<0h0a{Q9=I1D zwVNtf(~6G(xO-)V}Y2wuvN3@|{+I zzVX%U9=MrY@dNgk#WTN&r^8v6ERjx_s3Bv7nvk5Dhz$|`$Lobz-Vl~z;pdd3mxj70 z2daN5P!wWyiyb1!*DlzCIW+`WX^A0yCPf`4yc$^Qra-v@*f=O*-7hT2a}l#W_#Q;{ za(hNT+CM%xCFR(V<&0aQE4&DhZ&07b*+iMGY1Q+v+1R!U}zk8571;o&4I&$2SyH=ny=j6K8zPZT{K4lFhhzVO)8Ei9a$$ zp$MQWlE%W()P4-({W_!F!^OyU6YzG+;pg}!;Mn3ZLc#4O;QJNtm&$j3B~j?8p#bVc zE9kBPx+Qqd>^&&IHfNW~om&u0SJWjd(9a+A=>cca>C9W`l`6@|weOhgc&IRkLLaZ0 z6VXMB3_S`dpnZRP-AtTNN2gVgV^?CJXPL_F-{Qe@*mWe;2_VB3X9Am>bLt;n5&YOZs z0#|5)$octVI4WdVY&v^Ltw#5O3gyPHib;JS7(zPvJ-I_%d;lN-eqo$#-9aP^dEaPl zB;1V|(9t-(${e_I$Q|?5yx6<9!UwPCIz?`^SmXF-s*^8?Kr`oS#LP!~PqaTP1dDOR z%WlNKWW-;ZF0V6_c(wSR>m7S8Y{9(a=et|wx$YPsQ@|J4r z@hY{avD(>pES|Tyr3DKJ8WFuqI*RUF@eWWNigOIE!Arpiu6z)Bmu|NCkOa%TMrCF% zgT_#F^~s??P5b(8l9lnkU>`;y-;d@kEjH&E2gYHkz`|Ce9GA3&y{fSfS`@~tf51gf zE(-o>J894uP^v2=|8(WGRHBbfh~WxUXH`Qw>_UP&gxkvXn8Uyg2>@Yt4j}bPWC@9} z+}orTkgZkLB^gEyh+JR&oQ=fGW|*9sEsc=$pzKTcAwuSR!uV`Pp6FTIg_CG(zfmm; zx(Qj=VdUOXU)y^}h=!a1(Kn8gVZDFl;!gDGYdPvSNfZ{I6m=KT>M0U&&vmB35Q^Yu97?JboH71 zTq^(gQlO7C<0G-y14_e5PM(H3Iqi;1#kJ|McRvzrpDWLOP^Wi4AXl~^JgKc!BDWZh z<78O8l7B8E5Wn3c>Z#Nw&WPXK(|R*Sb(iQ$xa#9C82MvcMp0oU#E5JnZ)--#Qs?E` zxP)Lg$Rbut*LNHn>P{=^io5h@m2HEuJ-C^(JNwJ=Lj*`S_(J}}=IlJWON+r0r?EJz zdF>eUXVSzs15_&y1Nhunzn2_Xv3^Hf>q)+q4iTqnlO-}pqD;^^ve)Ud%XiC3`WblC z)*Z{`acGbiS=gNEUTRqGyRm)h{rD5ZmAN;d*z+n0$4vy1nxC`XVNLN~N_fI_Kad+C zmvQ4Vyxi(P;=VGYch8;C)$`>5mvoAel9L^je*QA+aISS;ktF#?SX;=)t-e9GZV*ef zCnrIlYH~U{HvY>_PV`TSNgg!1$@?g(%Lojp2(s$_AD$&pAV~E6RS$g}Xp*H`;Aeds z`bY&GD|$DJ2*G^E$oqA_@YC0^m`YBHsA_nH$6VBPKYSc|AEH`w>%JGJ5XFHvIeFb|-`K9~Rhmr8yM*J8d`vJ$DK?+zSDrrV$JTs2f zhXQCY*Kx?S=e7! zXe1>L6L~C^S&IW?7|B=fSi;^5D)iv}iZ5H2(6c}6stHoh zW4lR$78W$QWBlg1=ZBhhddGVoQ!u5Ca4LB|$}t`ysI{o%Jxa&ki-V*a$P*P~+a&=t zS;-CMugl6rD`A3UC^vigCnR_Y&qyen?`;ipGSi03y@}VAIdN9f|LV8d{>3*{<6*R% zw0e7a$vXjeh_eFI{{vD83f+#IQDUIsVgUqGpx$i`G;h8EDIs38ps>)p8R-Bufv5If zR=UWjAnv12qV$a8fk&2C%_{V!2>INPN`4|e$~mi*?Nn}XE69vQ3m$_$)lnrV3fV$j zQf_!nKPk17acTepRChFMAv#!KdGYF5sS5d7@S~R`+U8~K|LRnZss;ns7)ME1{#w|q z(382Qk7r8aJr2aZ$v|5fpucMZeJ9@USAsh(eth@Z<0?Y&JZR5l?!{8(MUT=3Zz8Sp z`d>Wse}`ghMRh68t4dUq^jP%<=1LjgeU$WWKRO20#-==-S9JH%jR~EE{B?nC?No2Y zTVKAh4^X8-8lF6_Hf{HJws1@OfBk||_Y0q$kOp? z%xD~$3{@D<$0dOSp9C@yc$C^&@FNCb%TSCPhl`ers85dvsBDaE*dINDC>suYV^$hY zA`d(jQ~)$&`cUACC+3}v&B$@m_hfGB32(yCKk}JBwDYMTVOxP32RVU~6ySF0^f~AN zO^5dMwe!FQV|R|LNY9as>4q z#rfSq^YFTJFVFXss?4Q{XTu&As;U6}{H?BPAWC5vTFwI`8X2|9*toYccn-3StdD7J zU%8veo@BU7olQ1*E!$~BcaFEi)}>NPH)k^DXT4er8j8zB=^Ker$U3k_#~e&A6OkT1 zu&Rg1_2Dh;`a+4(Xt2VN{D;A5DIJi6BK}nRobo=XHOcE5ya3L{6gK;giv{IizVsKa z>Y?6cF;;14{$=9d`*CXHaf%SYt-PHJf?~9-YZEcxY~pn9pJ5B{%^L1)Hz&3R-29jt zw|ki-=WLVNGG5CnK&jGSV=gQc7kj1q<4f4_iT|BsJc1ian>eDeZb=$fuqIsc3?*7B0j^PAO7DU9$zl(3sG4%6>bI%u*m)Csq1Li~_H@u?3;by2@C z6`S@+@@(>@PsyUhj?gW!K=YI8aGP(1VUlE&x8||Ng{}_P$mwcgPGo}I9rsYTRdR}?IvbC zVIiKwCcDw{k}wfmY304-dL@T^ooQL;~b%cd46~Ha5xVh@m2zj9`dDA@Qk3V6ai*Z ziTx6yE1K0BQP_gpTz0Fo@$G90JI>{tZqI6w2Rmx%3okKpv`A6iYw18Eh&QI|h26_V zgFh!9BR}1rk137*@BuScf;E33%?+N(UdNqP8)ulqbk3fj%Ts3o2btxYRr+HP{c7b> zlaj>*t(oj}yQ!$ICINpAb`+hY0YqMW97(d?28y1=)NWp`>YJ)7?pbPp#ax!e{`4}n zGQd~e2{c4Nk%K{u@Szii_?sQXi+mO!BKC&QIDJ} zEc4@MS_c}hjDd}OJq&t7N&=@%COgBWBR&Z1&S%5X_$23I!PC(sRpa-Vf9kpO!(B@o zx>uzD26_Ld|2<=NOw$(m;ClDy(GDtP;ILA;^rADdp@0oBKie_+{~n(Ff~0Y!U|-f2 zPhw;)TvYmH{NT#?;0D0q!W*L{SYBB;y8f``pNTKDR-CneG0G>lTBGNv&R0JCaPncP ziLZhi7miRUS&mK*8u+u_n*_)Fkz8B5;pxzv5JUvRB#|^Xh?FrM8d%hiaexTJ86~X1 z0t@{*vqMVi1;fJdMkFV-5OWgddQ2;^LPLt!l07KPiUbWtdi05+nZlv-aHImbHHm%c zI4WP~LyX`klQ2qdRA8k=3C+`> zOUn3dkl|H1SmJ&NaKSD7T$(bRdI*2PFXJ@Q_A^8B-5{h;73$SDDH#C+<*6W za(y?q4X7@%nfx~I5BCpxJ{cGFK}n=wOt{igfgc|<+K>$8A{x6LwQCe$e!uy!0i2|u za~WXJSIwI(G%`aAuB3cl+xZP!O0v6YrBbzdKq2aq(}i`Dca6NcNuy@!tLf%B$#lPY zu}4W!xu^r?wrOQ#zzEk44v2o~t$1g#SLYV!-j*vXfmK_%EKitjyGg}&=jpquZ&zAG zUL5Zj_3#|j482m6=Hr))!eeK+g$v|sahr$Hb75lXr?KOJ!h2rvJq$g@5ZUYhqS|bC z*Mr^ckg}a$Dan^zrWbS9b+Y+~;e{)--w%k;A6z!Z3y_n1smw-Pfbx6#$0A`jqKZw% zDQBoO)K^V65Ac_m=0yU8{As*=gaxJ|R$m~lTyKI+sr4!2H6_i7a460^(I?HO3l|v9 z5c{4VhlzQ0rRjcK;rq*Q#)He|??#RmO~E)pCJ_$FQv-m3V*p_0Gi-7v0kKeZ$!fw^ zecJRR9z_u^vyu&hX9LPI*+$dV)tHrW==e2eNe1uI#u1M}4ReyK#cbiiddN7)!-n|Q zZzCD=pBREd9p@mP?NNB^`ay`B5_jbCcm#-N-%hJpV5NBuFU14|X`XNtOTixF)-#yM zO2!3?2!{rK*x-4lk8yZ`+v&Fv zu5tKfJW#Fo$`BGhUoi!9M!$UHwKk$5Fkk{0ZuYPywD0?)YD#MF)1ix{jb#?~7oky9 zfKF$&v7o@?CRb^e|cb4$zZ7i(4WXD{u`GB$p?=#-DhFL3(zYJOV zy2F0!YY+I{$07Zuoe3$_N{1*BO~vf;o3*7XRHdnQTz=&( ziSA`bmh3KiR+I$ zjg}{1^IZ_44}3}d+t)>hw7*2=x^t-W-vMb>+|~jlZxEX{JIUzP&jpG4FdT}hRXmjD zD?)RsWQ^jJ2m_!8f&?czD93Bl$#o;rPwqsN2&4IKHuV>(F%hr%>uxR$i)lk!OE7$g zK@*4ObKyqrbue{Z4wgYW9OU&UDIy!I4XVxPaMDs9?#dQsJX0nkKffIn-w5mYz4W9( z;23YLXrylhOZz=vZy|O=J_{@|8s92yL9l*TEsiPi6-mRyQa#*=VZBP}jI!Hw~)w*fwQ($Z>x2(}4{+4Tb% zmy$r|Lg8RG$HmOT7N#s#9Au0o@B~8y`8C!!a>sXsWiW@RcD3^(+KAE&Ff1fIBKm=Z z?z^W+*$Mr9+0?(pjK~)itFu7Qt@*=G|AsEcN1CmrT36lgH6ZrUT@G(t*En4Tgt@cJ zX2nc$AVwAR$GrHe2mR)uNjDn7;)O6(3S7GJWUpB~C?71!n*-{3r@TM;9Tfovmg!U$Vkwdg#w8zoLsqIbjA%?oq{i zqaGY2BEYY@BArQzSFe+%m}{jF=gtvG+@~9eabx^o#fTkYkcP)Rn$QTS0c~jbA@!1y zq!GLK^(sEfng3OcPs z`||i$Vmm1)zObT>EWbi5tP6u(if4LI#VqhCyFsjg@nb|vT;50@54yCLb*C~D(SUNN zRpx5<+vAZHHl%-s2Z24bq&VR=MU0CO<|#V?h)eF7z3wQ%94>CXnyOyu76Z`&5iUJE z%!h}EFF%Br8w4T{gEwJn>YVeoe}W6h{QP6g)(pdJu>_(hI$7>H;HTieh?@}YeWpHj zcO(RDmX98(FmUz!9O<8mzMs}*w94tnTUP-8bkZsk5T=~-j#b+lA{_8gj+w7N~ zvPSFSh`^eKhco*9Vc)826|Dz3;iYYm*M&hA7#ZH6-;d2S7Jch33_nPjcI zYQxpu>=SEC-sD>PeD>(GA8y>z&(0CuMY8Sc4#gJkT(fO|M1JRZ>Qk06P++@Qqb}kD>sVOf&Mh3i_1zzOxUk}6xzka`JXobFHYjg&^VE=XV4buR>#uuK0jV8YJn0qP+w3=E zG0lzCUMu8&7Uj#ge>B3C@g2r+?O$f3x%HWVdDyr71X0#@9I4%BNOi|SoDv>J=pw|= zr*EP?qlZ%j`8^Z@p}-NW4H0&Ik&WH%=#)aasZ#XY3?>{oeL=THGTT@!`uQfyv@_Ss zJHPsyexqlo-nXW!<|IwsW{#vc>6KPR!nZs4!}KDV!-5fHe>G?jE{d`DEicRwH5Ar# zqO^bhzNl)#|JJp6{X^1%3h<&ph1cfHqvo0n<6Y7({RAlHk?5#)PECr%d=LQd3ynm) ziYECNS2MKtG~?YW!@ytaSGt~Qw2Iz9M>twhGZ~C){f0Wxlf0t)S4-v_U9{Ed75lIL zlO_RlLx04o`q|!cmn`mMfw7yQ>DIuHST!mhTYGo!?zz1-`#2_?h}}6ik2L62abmiMY+Ezf;5wTf>W-Lkw)G=sdHR_~v@>Aim< z-YelcTn5qz-%~ywet~y${0`*r%QtGjs8^+o$y}_C-**PdCn=s7BDk5SgOg#JHo$hV z1ayzon~`8A$I0v)uItOg`wqT5QS>K-c;&N#M{yA?|Twv%D2lA_YkS_lJTI_hI-fzjqdd)mdyGZbP*JYi)~E8r9O1!oOd! zjf(LzTv~eOWF^@^)T;O<3S-{+T{~JfyKnNJy3VH+pA|`y?D%=S`*+$DT-a-#3S8!- zdryKhBuI?(nBB0mEUhPx?H#ph;7f@2J@e4={;iv>Mptjm-sk*0NFcL?%WsPTOxxBI zSJvB5DW+SZaJzRe>)OXw^Wfs{aJ7>%-mU$O4ls_ELnsr>s7r*zGny)epGoyzA2q(t zxk%&I+et*`QO|derbKSj*5WNJTIFpzjtduVwJA}%Gt{SO$T}}dcsTJL zbFGUJ&Ssu!n_DIbJsr9Y}QKCt1hY@}Pg=uJAuM+j$KsX2aoEh@>(M3szKXKZ;sy9ysaQy(wye&z-0ZO9dD zxT@?wxmD|z#f@E_pR&jAT9@0Z{}F}$a$Ho#outUVcxWtrxsM%+&Si;xycG`_E_~&; zKYTxu0v*s4$Mof|UnV@v$F;GDhEs*l#I3<2H092%k!dNbVdSAb6*u3P7W?C44Jstm zIcv$yU?EG2ajfDeslFGCa5Heytja0a*n2#%_B9U?d=?a zwnFibw#@G+peN5tQFCXHMB(+_zzz5;Y`G|@CVYT~?%_l#iq;hkbzhi4%!uX5?GJm^ zxrB#J*u~|B^zgF${BibBs*SOxN&bbkBn-E+|2rmB;y!(n&7j`!A}Y00u8(uR7d7sK zn^xJIBZDPkxP*Fhf_07rOPb65&3Ev~73hE}DWqnKop85b+AO@M;_)_#SYE9BizM3; zv}#%SbiAlXk~^%66bp%3%?dX5eL;#@lx7l&95Q7}_b|2jAu+BhK||Thqib6)U)Q}_ zet7ds0037?B0NgyX=qij;}>7~5HEwqr`A56cE0bzd!E)uU-;QVS1ttEIseF_e+6j4 z8d#m4Y41oUN`Cm7Iv(vdbcsBiE3^7Rgb&hCLAEN6ax=`ByRC=QnK+b=7km%Yi=`lh zjyO{1 zNS2$KYVOy{oyy#>^@nN0NjuVumP+iy$ZIEoi>=SEP0Kb}9+5VJuX=yHwksvZJWB&^ zYiv9zIB**E(KxIe&Ec1AG&qK8)^n^Yfqu46&7KOt%fhk;AZx(Q1o$gfv?!?;MUjWiv;lZeL`y?N#iiTz z7`X2Bo-9a0!|7vjB%W&Ih`K(C^()UyM+!LETW)yH!Vs{{8Ca^8y=6O1_CmL^3%9Y`L&)Jl||g=b984CD~=R!i1#gX zkPw_LRbQn4H6`~|zP*f?smSZVcZKF3uQG0~vdk$oh4MK1>VC@QmF%X7LeGxz3rbm{f zwi3)VnyE97DoK9d4PUHlk}y$pW!zA)ds6qvWYkM(E~xxzhmjEo6taf23!6%P>fZ`y z<3BLbFoG2)IYR=7EqefxndoU&%$? z?#AArxEH*kfuHd+;Y$a`9Thikf7!cCwf@Q0FYGA6xl;%03Lv(il8BwV-Pq2G{l8fc zVjNa*I~HKDUw#{`2K9qWY3Qf?bX5ABM3dXltsnN#zUzT!HqB>Av7{DP0V8 zE9F#gp2F3%>XwSatqOWyRcVlhOjkU=U-HT5>@kG}T&=sU)_rrq;RpCV)`w>VzxG?n z7<;2v$xrcLMntvMTqAlu$IIQZx(B~aG!r#Lfelt;PgI-E=%yV1v~)r{)?(8Q(CXnp zUl$ugqL~iWW4K+?(6Q)flH%hak+OWY$onDdOEk;+a9TK;e!ZJ{M+e=*Cc+mLAK*8a zP|893h?Hf|O%RFa-OGwNsPxS;gaJlF3t$n2!G(X-Lf;`jI{au`guF{Xq?mdkCFi%Q z2QjO2<`f)ErF$HLg?x^aIf}GrymcWnE1{OOza`mFK zC{F9;L8U4+v&QxpYyhM$Kj?~nZU6U*AS|Ea&yYQK1nthmduHb^gN*}EF0I&U0rR&! zZKFMY=gD0y!H`pj3W25X{9u>bd^kBHx)SX zsWL*DFu|Mz-rUc0`Y3U_U59 zxWpu>`hIu4IjEw>4v0`>8k6?*O9kXWQJ*JDjd0?e(#Z(m?64=#k6oMegzT{=NVB92 zqxl5^NA8y^7jh*6lS*Z(8Y=2ai9LKDsX3xg)|thWrvD^m{0?>TXY`gvk~_c-1TVh3 ze+)LDzdVF=A?!dw_Y=2QbwME2OUXu!xDisq9bsDuAM~?t`M-zd=e}rJ&Cek?_4QO#34h1c zl=U&3RksHCklI)sWaF9QcQp7QtA4twUXtwk_9Y`LVY7*xX3|f;Akj|wtm+TNQGE<2 z>Q2)rso{l!TDA}kR_hpgPwq|0m0& zA1X~f3`dm=U~)7;bs3OqTuR%g>J*6?gx9@Y1z{3!G>u@NPAY=Es~D4yPPJ6HXwOQl zt|yGxDQ-$p(S>nv^DCd?UXzcvXO}Pv*-IUjJ%H+kLzY*@ykM1TKq?o{GV|tE!dBBX<#9TN1Tnlly@B+(YW~Vxz~azXnCcKWst&hHwybqTVRk)PVuaoOx1rHFtnk#@;hx5*i4)|9%iKWdp5EJu4 zW3a3V7MZFXQDC2^2E-=UjbD0NRA3PFc}LBd)Rp0AbCqK^fF3UCK?Yqqokclz+GDVQ*6KmVqeee1=+)2it+CWrJoYDMi_DAZZAXctV`B(AHspr%%n9=>0Iap#^ z8VeTmnH;nu)^Sx2^y`b{FqN)-J&12b!|kk3J@plTIOo8D*#mrL`C^TZpY4scDmDFu zhC1E45|v7OH=g)=Y{%7xp5nfGdY}9hf~D}2LU2`0K4Sa->@YM(0}cB|lGVo4rRP=C%TSZS^)xHm7Cx1L6sw)(L)?otx~;c0ymj7&0^M*Qlw&*U2TF{K#e9M-zW3pD#I6~y z4QZCQhPDU-bpwp%$KRHgvXlB^?4v#OpYLQX{4m7QOF&6&;{T}E0Axp7SBFpRH$77X zJ^X-r9%uIqGBq=4WzIfNF;*eF^=WZS{)yE@L$lRP7bH**1mAcLDSRcB@19}_O|^oF ze%p$D!m)4GfYkp0yIT-@AeR+6z z{BM!{9~7|vPg@ySWJ17rAg(aDyyL&Uliv*G|F(PnP0#$VVf@!H{!NMb|E1fyYQNax zyM=uRa}OZw*AAW~$j!8GCiEG`UcCF25#v^q!sQo+g^DdXXu)v|ifDeP8y}{O)aQkON7gZjv)6_*imj}y zB!@ZN4y*L`$CV*R+hxU*wY6$@E!SwSOM>eVe?QKja>(hflr5UBJW4Q4%j3jjUUtJu+6j7NRV2w9;hF1` zy4J$e-AuK7>#5Ko_4it=`URz}m#HIHAN%ItIn;5DChe0Fh~VG6>*0lqH|qBN%8X-dJ`Xu5N{3kqN_&cODBV zX~@8pT3)6R9N(Q^NrMCZ&-ptfZP9;8fQgB@HJ@o;9JbeJ?0Ye@4qj0-p~ku0rnpmC z-JYb2dF4GDU$j6Mhv#v8*3dDo?7c{mS(VSCdr&O2r0kE?GAz$=-FRuT4ARusPn#&s z$&tjoIAn31Ec%3Gd*`?3X*Ikz4|Y~_aoSam^H0vZu`?$655j$awDw5Bt7360QU8Br zqfbT&o-*(>->6gCquQCMFde&^Um3ImyRpstx-a7U_&>^WZ<(!keqH!MDX@wh?ODsU zTp{L6x3~-&DqPLb#=F3_G5h6{%af_C%1CysTSF~9A}ix?Vw7DZ$;F4T=10Qo(XCe$ z_M?P0<7%2aGjT3V8$C-MQnqRrmysMn>*>eqD;nm~=D-M@e;*;Xf8Hzxr}b@u|J~Vc zZ4d(Fb#1NWuTZeexM9YW0o>LcZUm#Swe%2 z1e$(gW>6WMPpye}EvsIhklUl76Tuc^?Gl+wUp?a%(Fytlk$03uV)ky!XBuLed+wZM z7Y#S3MVAT98J&>YZWY>l(U;Ay5eXIL4>Jgn-POt!SrQkNN)!r$k?C$7%J^xO|O9^ro-}AR7 z^_l2Jr`lXM`4PFkwic1FTieX*u!zqZc^`~WH9^no0i^eL`)Il9A!oS}qw8Y|sV{Qxs+zWIg2b^Yti6SSY&#y+xSXIG04qx)|h z&V{L#U{U(^n9VH$D?j5jr<5`#N(~z&hsS%F!!M62L*h5b3yQXHeKj{uXzNTyHLd$D_#0>VPtGv4a_Ba@jCVOOCWS~`yB!|&of<_lQ24TX zMA^u{?dBOZR_+NSo~F-uLGB@5Z3pe6q2S)=HY35lOW*XHa?v(&^Bghq8$R%;Wj733 zspJiRuq%Nmrurz$-*0S+Bk!*1K(9NmyxQ}~0)}?qK;T7>8DqhhE!VN~Qnq*3t#_X?J$~ZapP2d>8W-HsqTl`y zRF8pS56l0=gWo$1tDz);%Wp0xirQ9c7aU9hJ{5?wZJi2uP@X2n3jAcE);(*a-X)FS zRxW)V23`l3+PlbIy4Q%Gf1`m$ zRL0V*yXNV&4K@KPHCX$1cLQqCtb-msRmV^RZQ=~-FaiB?&D+76a?V6N66&=pAQx5(cb<+*zkwSL^RZm(! zeS>v3ig9f`7XF0quku{wp(tF!#SHTRDDuy;T=lfdrzvr!hl?4{xXa4J1600v?>K74z2cBU zwZ7a@jJ7M%F5J0UxRM}YVjO4N;j-PD$UAxmEKj=Em@$6HO5vBJZ+*UjUf!rV)6Z=d zTMTcm4p{=-4)46`PR*HL`Z~d&DWB4xe2GbknrEuvD1<-`*$2mm*O_s!&d*nV)N330 zd2ZANbKN-2ZI?9&twv;2Dh7$pooh{%%69YH&yogXp&mE7hb%r?tlG^)8yaUg@DA>F zKCoVPmti-BF0MS>v&|)9Kd+a)ubzw%oTIqi*nD-rBICP13x&sqZD+^XJOyyH%Vw@d z(a=f4G~DNUX+KPo7)AMdJPVo!YsId{ciJqurF#GIj0je7?0dWvCTpv17?CdTk7uA! zz`3c-|8#0a(C5vJ8eGx34H=bnJ=5_yXEyuQYLZIY3-UJ@q=;81*kn^Cl<{mVV@PaN zJRyE_-g|XCE(Q@ADfLHlEd%*{y!;0i1?h%x0=sOyoB;PJ-k$qrC|Hmzl0o zEtkv_^hpRc#*5K`D{7qmbXC(`46qo{pe<&czUJ&(XXU%OUhs;S1bda5eyts5^}*oP zL3j49<-4y@Ciy43p95Dq!u;^PS_;d`v_IXQ*h@5GlJEu3{*>GE?3m%EY9*Op+$l(8 zHA+8RPmbypXRNvwD2A}Gu_<1X4+-8J$1jaCuwe1mh|mxOa^YAsUN_F;E7Mlr3E*Cq ze^6c+j~udY!aj^7xWZT)%X)xlvXsJIRD!JhtcbpOte#6iF>yIim{JFnZ;hDB}rrHYBYVM(esN3#%}aUb%J z8rWGnFhHA5D{T}NUy#(MwBGz0#Qbh2VZs(2Tw@f_E+%)fPT`CLTFB-8AcCFMOGqj28c>GjTzIlD- zGFJnZm#DJ5nqHAz|Jc3nsz(hM@lIzC-}XYHJq&u>aJg4jYV~WL3P)~qh$l0D+%yyP zY26K3PbU$&wOH@!*VUg-Z!R3>$FV?HzFhrsw&1G0;la$^5Anxry*bq%JFr12F+hea zTJyROMT4irLvT?@(Cxq!aU+yxix=IA?7C09M7>r+9tE9>EN*4GC|G>G?iX0a`=$Y2 z214S%b$_y@9IC^sJC`{(S)Mi_)Q(EV(No(w$>EcFtl%j_Xq}a9gM7JfB|_2d&F>N$Jv#9hhnT^Y{3(m4fmK6TWK*xr%o3D^qjIoQTx{oJYZOaWa($v%LN8xsVx@(sX** zFX5dc_;o67SM_?O@>RZ{LXF|aev;K>oBWSkxBY9eSHk9@`hG8NM1)f%TQUMG>CA(wDcUECI|Cr|>s*`HQr;qR` z@a2|*mmMK?cT9GsWY(VL%shYYyU>=n$NJ}5q;9d>a{CQ|2;jc(5a*f{f(*ZUno_xx z&u=rbP(I#rp(c9lX#lh9LyNg}<`6n-$}@HT($Al^4CXrvF;eEMI*S&YE>Ik+KoYwl zAdQoD->+AVla70iMFF;}Tbs=*)A#cO-h;uaeoZMnn;5{kkc0Lggru#1vAyNb#}1+{ z#@p&Ir_uch(!xHT>z{n+p@i#7IdLX&ec8_;)vY=apkmB>e1(cH**!iAyZ=pExstHF z>NQ{Jr=uZZ7MI`RZs|LJX;_`iGp$pzZc#HVWf8NU5fzW>N2|M3fRNW6Uexm@9kX2g z5Qni$8C}3en(HxwU(9jibm?nIutSar@ZdH`a(!Zp#XaT}`H_ZwS34iYMQu`vYi-Bl#A2tIe4E0r zRE+R9@<-Oz3cb0iU-yj8IGt(@(PFHY(CV1*@2d0SKwKKF!3aJe()<{?B^>equ6|9w ziSG6^qy(#utCRay^ic)9@D}QZwhSTSry{OLTztEJoGJ`hFTdd7M zRyJM5aQvjlmGb)+N7Hit?63KY{*&xW!h3gqS&l5RK0VE$x1JQjZn{Ocw=E+rQX7Kx zv1N`x`iY>A--a@mr`}l0XPLMk*%lNR#e+j`+b>RRuZmP(IHdlU{568Wp|Unj?5!W) zoAT7Fm1x0H^j-}_`-y=4R{K^m(xfZYgWpzH{JzF=UdTl_VYNSz&KL8U+m4J-=I6Jc zi$5#s#i;KweVY<5MFh7%yJkLRu6KY=}dJ&-EL-g$iXF22+Bl(xOf=H^Fh zlnqJXaBsr3LDba^EXer-2@m}QeVjZ;9j8a>HTib;aldtz?bQDw?>(cMYP+scKq-O( z7DQB^a^SAb zoh1SZM_WV17Z$EtqN`gL70C@biiy`K&^-zBbs{G_{q}->d(x+LW!`&PyIey{1voI4 z6wN5~Cg_YWs6A~sINGV}eDM$7biksxB499QOZ?p+*nfLw9 z5yIh2(?4_K@Rx<9c%O{z1G#W4#&FtYE{Ro6*52ij>7w_^R&*pGe7r;qLK_RA;;Y-l zia}Kp7J#Pz#hp_AO|B>IS^01{09;_ZSmv_mY1V{SzlFuckhXkvKZavtgCkcK`pr*k zf zcgmw)mL3Oo`L4$6XM>M@Nz!_$bhloe5~pe1|6OiB@l~5Gmf@#nDZJ`NvHH8Urw6TT zMLIPe7)nHR+eS5JKXYesTPiDBfkpBgMSBT+rjxIBrh6QZF_#~_vNjSrP5?Za%=%7J z(px*cdRI>lKcq-_<`eX%F^Fh;H|oJ2BD_9t?$N&X_gssJm{9pJT&SN{Uq|rz z?TN)r=~PU+x%O`^I~Bj$4TE;q;B`ErnWDoc0@K(>bW%W%uBy{i@C6(S5`_bGj`+h5 zkqW129V3NQDKvm1(Z%@GTm75#@j~?K#MS$CvCr5eVc*3)eNhvGC`Z?M#7Gtj*DtbA z0RLK_dIrS@v-5y=nZ&qBfB%f(UAU&Mcj&QDJiEH{G_WrC&F7mf|5t4 zEw9*B2TPx>*S+v6(qwvhv9F_}qgU)R_e0kJ52W#F6o?vO9f_*(1eeYp?3uf?AV%^_ z`ulsUe6N-5>dm-qRPFG(??6wkA0?el6?FUxq}n%upIYg=KN!~){x6{~D7QOh=dJqH z2l0hwNrtb?mSE@*+oCH>B6Jk;O6~}sg0&=Liary$m;PMg&tFPFEZBzDMA&HY?}%g1 z%1!f^5`?k=O`OQI;y8;`tS_bR6KosvkkW_<840YbtnQ?vz*x7BzM&ll?gx5qlsI+i z0b#vvq=Y}at7qxju=_D^2Nx z8>e1l7h13#;fgG>_{~tEUXsh5QL4GRW#T?0FrCKYA2nMP? z4!hUBFzJURD_y^AI|8`XC*LH+Jtu*2-@c#b*;=+@T-;s$)sFSELgAvH;n;99K`L1U zX&{=NCw(33>C>)`z4q>~_bG2fELi9#qx@Tdn3@t62M9TBplgEq)SAMQJl#UNxC-kz zKMiohOYLXazib?EQ#buhtnFulJ;8$pl#2D%KM!JnTbXnPc274(7CVQ+8O6OOF14qt z@p*VD7rvAX!IY%ru$?n!{PUZy=@u4@*O?zGE7oAbtRP@6cm#CXBY&sN?VMl$T=e49 z_W2xr{6d=Xv5b+=?6e&5;}qzFalfx#k&^NLz1;t^8N%6=`Y)Jqy5ubn*iYn}#Br;I z-{jS_X9iDBoRCed+@k1i{Lj_n|6G%zD{%AQOde3yshb8%FUs<7e_J=>wBPi;9JFNm zpAIembp`vwhcG&_X5jr-$`L0UHOc#Kh42E6jOU*;M@-y>E~JtE&ps+=E66sh)WCfs z3jMkvImW;D^7+Aj<$0iPbaPzOr6{YLBJMBX?EmN5e88hKRp(^$)DLYvfZqW8+<@!( zyh9;-;WowE+S<@)U&c@=W<2jsQI)ol+tlGIGqm9)>Iin4OE2!G3f#n02SklDbk_B~ z!*uPRmQi?szSjZ>WF26K5Y@|*JA(i=`R-7=FTSTZ;bF6|Ih&tdExud(rsBU*ja7_q`Ij zQiYalvs6sVRz3ifAlb%6dZYF3hXB6SPw{L`c-8jcWub1lq#Kh4I$T{zDFP?74Cm_+ z-xGAaxw8sAR!DJ~`TR-6jSd50i=B02He1Tb)U^3$&(1f9 zX^N?FsFC8>Xp3S@aMpo>G_ zS>gzU{QP`b^k&52Mos2>L4dJSP0B^mXQ|*trW785m?cFApR>ouf%bdlo)QF~=yx1AB6fIi zeK3+yLe{>2CAZtBgJdc+m0Owex8nw&So}%)Mh*L zmCbNhf{ol9qzR3G;1nMlm!~ISk((EtlMCR1ADmoVa+uGOe5f_T!nVO_ z(YuN_LNXeThYb`-qq<=dI>*P!u2Ll!5+;?!!Xl$UlImj(6$UBTXe>wNV!wtMZ+IUd zfYBh@e`7>YcWZkD>?cAZE%`lrl4q)9Ew22Ga73m`P2t>@9_2igYGXGEy~yU9s?57K z1S=KUDmAFFi168MA|G;YkoGx*Z&X7~vMdynm?TXoH)p3WYs8zlSmzdA++%0*{#6rm z%VdPTAZ!)+O6ym{nU-XDljm#OgNswX$9ribN1fQy@8Xg>pKztWb~5=_2-u;a(<7Z_ zN%rGI(Y-gJ=)s<6PG5eT9<^Z`&{Mr){9o+lHz)Ia_kPo-0sC@F^(RP!?tb@-*{OsoM z$-BTGGqK+zlYQNK*4ytN=Zw{*cUNyVREE!Ox7(rb2*0yZ-#S!|VoDPpdwFXgn{nfM zn+gS@{TZ*w8L@DI|3ZlUuM!hKHTqA(EWQpXjJb`Z?GjSqaJ@0J~J(R zA+47F9~sF0zhoe}F!UdJb9s67#%L`4#PYj1q$79^cCs$TJn?Lg&@S`xhSWLsZe`g(zy+D``QOxxvgoU~C{7P*PPb0L|4}8%gAd+pTCV;KW!ew;KD`lh zT^T?SkS+q$@!@9Qi@K56Saa!(2_2NP!uF?Od*Iml*ne>Z7;uTBQ)q5CWVQ5ZU}XJL zD6@}&_cFReP=WxcBd_d{AdK74UWD@0W!$o3!#|D&G&7YT9+%?Ca^$h_QfOx0FBJ{5 zhwb{D%-Jm$MCufw3EMl!Aq^GDJpA4< zhq-9`^9{KHs!`2&q;ROOl8E8NE#J&#RJprtZp!E4OeoJakK!w2vI$#XIyru(d=oYg z^L&*(Wo!{=flOww;R3x560Eb&mm=E%8u8p*PY}9)l(;>KPW2YH@;qWb&CFMyY~#QQ zcYI2m-UzXUYt(2Mx;(<&pMv6~UcrGS7+fsP{RE<7C%ba=VDNuPEBvnEn36BBLTIF7 zd_;$0D${;F?6c$rradhC1y;4)b17Q&PseM8p?3DWsA40FAAZKgEQ1f3)nI(lALrZ1 zN%Ok67fWtecLhRjK#8RhE=63iff=Mq2LBP06DRLtlAKAZ-cXr(^-+Cqb zSwZBu+$3|dnd~;d*<63O0mMC5taZR+ksPP32{6Xo74=7q^1f&cp;oP|3^i zlf-K-KO>Ya(o|kv^lmu*46mm|v_IFz#1_6ea`inNvrH3~y&1GMk$je<3(eC{{%y}< zyK>uC6aCcK{D%54;S^+MVY zvXAKAE64b??}b5Yc3`%Sbbdc@)vv2j=sOgpMm-$7HOq6~j{z(t*S1HhKQ4Xjwk*23 z*CX*1e8+z?=Wr*`gWn*21Eg-$7H@JX^*)XVprG6awP)>7oO=ZBaQuONs`UgfK=w?l zkjbVmpYzqE(Z0IXD`MHO8pf4~IF=hkcLoEhOT6?d)iAeyG{ZGL%a?euzCyu8cqTmI`08#r zgGKGO4p{_${MT{2Z;Xl(Si;Q(J)g$qBICoI-?oy$y^okrZi!FbZQwS#ooryCwd!)Y z;;dHinqsV&igV)z0^h{N1ADf+GtRrRq0~+vGEr+B4~VU#Tj1DE z>AkllTH(<3MfzrGh3gHl%R$fj&PlAYtPI)qpLpVv+nc#Z|9RM$OX!o08|TbDyPudD z&IbsUB#1MqShki~H|_BLL;O2a1>w^<&g8l@boLtw+SP)PInLCCNjKD9(@qG@@k2LB zdj9YYm>lmN6!5?~DNbuRHyy!bkwRPlmKG@Wp2?bMl29G^%0udX?NQZ2dGEVDE!4HY zO_rD|$iU17ElqhNtjHcZ_^ZNLV`!)-At6qKn^)83SDrnQ<8Y|kYMqgU(cE5;DmUL* zn)ykE6cbrQw*UIKI79L7Diu_MVrwfDB4@vSb?-3oHKoO=tyj*AsNOBbT|!xq-}KvM zro!s#-W`pVohI_8osC+aDID#pfax1_Pf8m4{)GSI6{hCYDwG@t;lc^vGP{WE#065I z(1GOS=&GIajQEJvD0lA+jb*Xse;db4BKL;#zI6`yZ-XcYlD8AG49FXR-+|~_y!!TQ7_b@Fl27*I=L6>f>VQ&;d5k&; z&zWJbUqQ{NVt$7CvGe~RPZtE&)vxAHABaUk$Ce?5Sn3|0(jNzR&E{~W=>YXb&^Iw= z@~MyX|NOVc7rPVt)3rQQN6kw6T%C*kb#Cb(6IZi837_YsK9OH<+5*rQoh1BNV^(Tg zzru#@E_5+?feo)QRu2KIPKGlKe667TaMqVGHV|r950Z?W!W??^PCaKC#Ja}3XN#wP zduO-R7EX%%0yKg1s%ILO9Vf4wqVfxUN7t_i;R2#n)w^-&hwpA)L#Evksdk>A2cp;D zx%4sfT1zXoddWnGOg_oZaH<#z%{3|lMymNh^uS~Q;McH5_z?Tv;{|An|crZ zYaW!K7Wa6*0`gz1c!JPCMRH>uebSre%GQMP>t&ETrAE!S_pmvYhTv23-8Fjgjc8n< zdx1m%Am%*FI~R1DNDs?SrzGxJTIx?vaiR&I)IZ{V-;91vTLq*Jbr|)n&m&o>FE`x9 z=N;L}O_G9!-G2YNtWc41W%GY!qNHw-Se~8m6u&;866hft=5BYr zO-9$iU@e%YA>v1BmF-B8YK_!KTKK8o$0eXyWiCoOYVvJ`#BW>tE>6$4A1c$4P-Q<+ z&Q|!EvjE(Y8Z^plg7`QcuAzdr?H^$o{$b2$QxJ~FX}EbUjeYMXwM+pni%j0K(a_MC zH)8k>Fivvy?{-kLl3Y@MWi}zL`gqP z;e$!ds2@7-uV*IQxkMZVI{3UgkrQ?MiCyLG-FEiXh!OF8TLgnL>#Q23p(G6MYg8q^ zHaHNlpTkD!S@lk}eB_%LB&34q4-nfEf%aSR*xyfR!_NF)(kC0x01rSt0N$Xq7(dht zZ_qY@9%kYEQk=IRy)sF%QfB$_Bll&sqRJO0z(`Odu;Y2I{kGG7JKZ*$ z>@Xkcc`Uo4W{L?EH6h+2&3oG5qqWo+7lkfkdAQ(WVHf>6rU5n=&!!OVr|nWdVgk{+ za=LV9Z|wWi)hskj2W^F;IqR?unN4bdxjHP1s@**=(UL;Mjw` zfEqp!D#A`nc`4=K_PrsSGJZJ}LL*0YLKArP47X#fk>m^4Kd-a!w!0XV#Nfk}Tt8_D zWXjR-qhQLJq~lXyJ2Eq^cY$@?`{j-ET_BuTSBdEN4n2uSNLjyPJcNZ-MsVV^Wrza{*dIeyb@BUx-URRXKX zU<{yg!J*@Bk-AQUE$?nN>F^z-xP({X6}@s_8MPz7RljedeKikmBH0A6QIebQ^F@ZO_%?w(gcUt$|h z61TQ{4PSnUfgiR#bNZ}xo1V`wX6rdttrAu0B&v|~&e2_yp;oM)}vLIfxjhRmA7qZnLTh9H1?cD;rSvbhF$GlS7d{r3m zgaxeBJ}ZuPZ6~KJL6MffdNHlCmB*fXnelIr6s?-WyZv^Wt103hml^rAO?>zDHX)tI zMP9XR{W_gZNBgOJ$e`ud)V*V}0>{ z2T5(jJBVrGkEkXSilC5oV&WOLs;5LBw0tS%D@>q;0Zl*&w2ZYxmVwrr0?9S&T+G=o z-~5xpZXp{)AW^6d)hy3>9U1#cWH@?zuvj{ zUe}|GQq0@XpYMq;wh^%RT6cOSZQAoK5G>@#uMFd}E!wNX_!=i(|LtGfD&%hoxICci zh}NN!{e+7Y%A0Y6>F0_A4a7pZ{XgWB&GV?d>K# zNt&6943XC>2U_4`mi_;a4E=+7#G1%=n$x{V{x{2y3mMg6W`X1qFzcOGr819~$BMqK zr$;+cJIU(@Kj-zC-w!@Nx3odJHCKNbJ75Fs)L`yVZI--~Dn zO254*`@#JDOb$MV=WDR5^herHSPiI1_W>YzWgj!4-=ON{mjuQS9!Z+N3)e)vm}_w`V@fV ze))o$Ia~VlXuvw$Lf2{MP0Hj?&;Y8&qi?u7Y322`(EF~_fx}+2&ZVf^((Ee9z4eZ1 zK|Uv{lhcQ$(<8s)aM{q-BfrV{Aw~+FLfsWbwEIkIR8BBukWKQbizb9meL$4_^SLL! zi3W$A&S|%`XNgh?$)&R21{3e&~=iwie z$MjI(xGCmG(Zf3dDExeHb>IcIK8L5^*_ZUPUBd6H^sxRqFz(uMa;2B?&!f<1Fvo+> zY09U5TU$1_$%8l-J8e4^2u-1bKaC``E_Nk)?{`XcC!9wvQP3}-oZCR%j4v5vT+7?~d%ChOBk<-2^-y7Z zgp^RbJ0NouOXrjq)?Yakt7?&r;x)3Kt8^YeQa>@QT3L!n8ZViA7|9IpW?$@1l{30D z?3X-Q%;No1`G7=z&t|xP2|HSD)F@dSny-R1)^9L%vFJ(PZ*4~-ycsAoCM@q3${Y;f zujIKTU#M(9mz`#^cF;X)!PV7Lv9v=1=2a>Q+7 zWE)(CH?*oHppI9!G$aCO46Uc#sQb2V_@m}e#j*E`2*SRByby!P@5RL(em}q&B z>k-IQfS)KS&EJ*zdj8qqstwI}Gd4oXN}nK7WHN$(!g~)TPebot62<*TcMV>j-B#op zZs#i+Z&ds7x?3CQpxo;pl}BQW3t9SI=!zHqElr_Bpn_12#@dvyr{{;w0d$8ucm< zPfxK8r^9&Q4C&b%f6~jOk2TA)PrmT-d}Q=8-|L7~zS6R!qvbG(4&)@;kH)vi|o_ow>f+!N3#20%*@c#QXHcWh7DH%ES~Abxtkro)uH;=+^a`)oB7%4R7 zE$zYuX|v0nscAo*#|y^J%*t)Qzu3ilVbcgs;-HZ>6fadtAUU;Fr<1{9%bHy893|cG zxZXcUz0c36;jY+RSx!ZOTd@?IgW<37W3D)!90dFC`fK@0#zty$bt3yaTWP)}D8`$s zL-|<<1^I1yC;X0?XGxt))d)T3B{VqZD^=uZtsy(2V5D~(wSRh4IuK7IqR4%B%%^5w zecSd6=Il`787A&s2|C+}i|27m0R2I6vC0$_LMjhJzuv!;ZQT;mBPmtwam6Z{R8Jj8 zJa1qy3fWoulZPnHY&I5!0Qu-ZY~91pVT>15?cKS8T$3DS4e!$&K;#4ND}XG+OF&a^!8F(Ec0Ev1Na837Meq z_C$* z#zP_N-rgn=xe7uiuvWjCn~NAFQpyeWO09um6&9P?q*TIhSI@RF1K&Q0p50RFLfJdI zum~P92x$2C{sN%EUzR5TOk>8n&U*Rt;F=4Tb#usXDN!Lmz{ zRQCGcBQBM1Pq@)~t}6u$G=#q>U^XdgSwBAXcIR%hkC3ex2C&@pj%Q%HRt9=@wzPN- z4cW%pcoJtr*>2uchKbV^J1|c+z`Ob6?{j}MWG6<`QV%pZHf?%-Zi$haM$Qe>pUrrW zVFLL5hBh&o$A1ZcPmRrYfeWDeFw;aKoAs`NQiF>Bxd%Y{6UF!rX^k=259BDjr}E_) z+$**UVUE+)oe96X#de7C08K0Q{P!3(3O)({Fwn83SsHb05ZifNh0ArsPAMA@h6@pg zY|qi6iUPuI?m}N2pNiWN+Yj-0Wq-1bq6> z^Yj}XF@~uH6&cm#?|sZBhTz4KIHmBL`ZWt69iFUz*5?-XQTas6A=4E`Q4T#M^QU%q z7t>R}9KKVv#c_nKK69Q5+_*>bNdFz7_bL3s4cHFHMAlp|rNnU^bx_wYOFIENieo19 z->Tx7SfK*r>6ZyOqGV}L<+b^xlW;MZ=O5Bg+Ix^R|bHa z+3pC1F{FLlK1R@aQq<=VfYWg?&KWNxkXkIBO!jp(h3+Zy?KiuW^bX8k1(Vi0rl3y7 z*sTkj#oT1(z~gisNqqk`gY9PgWfXW>yaM}u&$-5HR<@CceF1VZn$N5)iW#f#dI>lH z2JoW?P8vAE)_vN(vyznp=^!yPm+SUHTIS9U~h9rI1V)k5ay zZ!`7%j~-83zfyu{cem!;d6K22O%pB<_BC*c(Z{z;Oy@dxVflWH<7Iv0(akzsZqg&g zO>$+;yH$HkfR*QFF?qaFilm-_aajwA2_{-D0hRN0FQxj3MN}=T2 zT2AJ^D&Dy|of9?epa6tumRo;8wr;aWq#bcjqBS<(;n!W=y(aMPYgTRL7(q{O`rx7BbFVKtt&D&lRc% zRW?;U{%?W&pMA0g8I)H#*m1&salX@A0WYt$3MDPKU(0QSWD&B|(N z?o652U(5A{%t}HZXOCREV;Xz`=VGgwCwr8zQ#rOd@3TtJ%)FU;c$%Y}+8_7UcKmx< zd98JHPHzdDg4OPaFT|lzS`GzO%x<9wl z+_t2A&T2Li-i~WMJM684;?5H_;0n5a8}j3$Qp=8Ka%9w*gkeJ54r$9;XiF#|S?*5g z?-h;ge5@+~>Vf;qWM|V#-b@DPz4VhhsyP+iEC1w5B=VO@{Q^t%q(~`%f82|Q-}71M zo&79A2$7*-mQ=;HOqh|P&q`kAhErvg)QepK`pFS86?DCroJ;HgytBslVrVw!t|(u!^l7V6 z?k_Cz+Xx$TcO$)nSmh}Zs@`2;ZJxZLRg5V59QY>&7^43(=qF&J{~MUIX9HNv9*v{X zJVDnn8=u4NtYK;*B1f|G=Y=SJv8RrF(DF!dRoa`$odNV^pINGCkC^Da$X|dcQ6Im3 zJLjr|HFd@)Xin4XBJ>o4bmB`XyKejdn<%=RC+nJY7DG5Ww}6f8QlJ{Vsek^Bq^Yv^494o~TM zJoSFr%CLbLasc;?xhfZGjcMP*O+zI*-?l~7RiWqYQJx=sA`@P>Sn_2x3DoDbLY}Lq z6kW)3sCcSbXwR2F@g$Yku&$^Zn9R~&h|4~pg9iw_|7i}q@0JX5f4w%3Xh;QRf!^ly zHRe%SeWRlQe}ZLE)7$sj-qLayid}WTqo_5po5{8&Y`a53^j_@z`pCEey*N}-B`+

70dc#>?fblYQIX-*_xflF~sRD&sY|u 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ǫcWtLC^ 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 SWF~)dVM+>W&x+;DgZ@89qMc>{ literal 0 HcmV?d00001 From b905d52efbae3895adcc50867942b7e4cbdb7dbb Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 2 Apr 2024 15:47:47 +0800 Subject: [PATCH 38/59] Remove extra ProGuard rules after OkHttp udpate https://square.github.io/okhttp/changelogs/changelog_4x/#version-4110 --- app/proguard-rules.pro | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9c7f3b935..5f4922bce 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,13 +1,3 @@ --dontwarn org.bouncycastle.jsse.BCSSLParameters --dontwarn org.bouncycastle.jsse.BCSSLSocket --dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider --dontwarn org.conscrypt.Conscrypt$Version --dontwarn org.conscrypt.Conscrypt --dontwarn org.conscrypt.ConscryptHostnameVerifier --dontwarn org.openjsse.javax.net.ssl.SSLParameters --dontwarn org.openjsse.javax.net.ssl.SSLSocket --dontwarn org.openjsse.net.ssl.OpenJSSE - # Fix for Retrofit issue https://github.com/square/retrofit/issues/3751 # Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items). -keep,allowobfuscation,allowshrinking interface retrofit2.Call @@ -16,4 +6,4 @@ # With R8 full mode generic signatures are stripped for classes that are not # kept. Suspend functions are wrapped in continuations where the type argument # is used. --keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation \ No newline at end of file +-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation From 56b9871fae8428cd40a941af8561403362b82df5 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sun, 16 Jun 2024 18:51:42 +0100 Subject: [PATCH 39/59] Replace bash commands with proper svgo cli Although this adds another requirement to execute this script, it will prevent OS-specific issues on `sed` and `grep` as described in #1503, and make sure anyone can generate the same SVG output files. `--pretty` is kept for convenience but can be removed if needed. --- generateModuleGraphs.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh index eacf19eed..483ea836f 100755 --- a/generateModuleGraphs.sh +++ b/generateModuleGraphs.sh @@ -31,6 +31,14 @@ then exit 1 fi +# Check if the svgo command is available +if ! command -v svgo &> /dev/null +then + echo "The 'svgo' command is not found. This is required to cleanup and compress SVGs." + echo "Installation instructions available at https://github.com/svg/svgo." + exit 1 +fi + # Check for a version of grep which supports Perl regex. # On MacOS the OS installed grep doesn't support Perl regex so check for the existence of the # GNU version instead which is prefixed with 'g' to distinguish it from the OS installed version. @@ -114,11 +122,10 @@ echo "$module_paths" | while read -r module_path; do -Pmodules.graph.of.module="${module_path}" /-->\x0/g' | grep -zv '^ From c072de56d6444686fb56650b1469735daca5cb35 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 5 Jul 2024 09:52:30 +0100 Subject: [PATCH 50/59] Apply suggestions from code review --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 57b6b804f..1f5e13f2f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,8 +21,8 @@ From fb991394f6d3614e428a155adafb2125548bdf3b Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 5 Jul 2024 10:13:50 +0100 Subject: [PATCH 51/59] Add android.adservices.AD_SERVICES_CONFIG to badges Change-Id: I2c63da1aa2ef0bfadb7fa88a2502dbc3551e7527 --- app/prodRelease-badging.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 4cd4bceab..1e7f8db61 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -105,9 +105,9 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' +property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' -property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' From 1dafc52a18ea07f9bc439e09295964c99f6e2bfb Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 5 Jul 2024 10:24:30 +0100 Subject: [PATCH 52/59] Update to Lifecycle 2.8.3 Change-Id: I3432d5387da4a3bc3432723054a3ccb60abc4a46 --- 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 9fe235681..ece122bfc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.0.0" androidxEspresso = "3.5.1" androidxHiltNavigationCompose = "1.2.0" -androidxLifecycle = "2.8.1" +androidxLifecycle = "2.8.3" androidxMacroBenchmark = "1.2.4" androidxMetrics = "1.0.0-alpha04" androidxNavigation = "2.8.0-alpha06" From 6f8dc49e4494b0e16e0732f97cb9c47c8411e492 Mon Sep 17 00:00:00 2001 From: dturner Date: Fri, 5 Jul 2024 09:30:45 +0000 Subject: [PATCH 53/59] =?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 --- .../prodReleaseRuntimeClasspath.txt | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index d3e90da35..7beefe175 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -83,26 +83,26 @@ 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 -androidx.lifecycle:lifecycle-common-java8:2.8.1 -androidx.lifecycle:lifecycle-common-jvm:2.8.1 -androidx.lifecycle:lifecycle-common:2.8.1 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 -androidx.lifecycle:lifecycle-livedata-core:2.8.1 -androidx.lifecycle:lifecycle-livedata:2.8.1 -androidx.lifecycle:lifecycle-process:2.8.1 -androidx.lifecycle:lifecycle-runtime-android:2.8.1 -androidx.lifecycle:lifecycle-runtime-compose-android:2.8.1 -androidx.lifecycle:lifecycle-runtime-compose:2.8.1 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1 -androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 -androidx.lifecycle:lifecycle-runtime:2.8.1 -androidx.lifecycle:lifecycle-service:2.8.1 -androidx.lifecycle:lifecycle-viewmodel-android:2.8.1 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1 -androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 -androidx.lifecycle:lifecycle-viewmodel:2.8.1 +androidx.lifecycle:lifecycle-common-java8:2.8.3 +androidx.lifecycle:lifecycle-common-jvm:2.8.3 +androidx.lifecycle:lifecycle-common:2.8.3 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.3 +androidx.lifecycle:lifecycle-livedata-core:2.8.3 +androidx.lifecycle:lifecycle-livedata:2.8.3 +androidx.lifecycle:lifecycle-process:2.8.3 +androidx.lifecycle:lifecycle-runtime-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-compose:2.8.3 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.3 +androidx.lifecycle:lifecycle-runtime:2.8.3 +androidx.lifecycle:lifecycle-service:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.3 +androidx.lifecycle:lifecycle-viewmodel:2.8.3 androidx.loader:loader:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 androidx.metrics:metrics-performance:1.0.0-alpha04 From 3c6366dffdddd568d3da8e10462dcb8d378b23d9 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 5 Jul 2024 10:30:56 +0100 Subject: [PATCH 54/59] Update dependency guard Change-Id: I7be80c44205f7e4afcdd9e52eef42b5e9c6155e7 --- .../prodReleaseRuntimeClasspath.txt | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index d3e90da35..15a4bf21f 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -147,12 +147,12 @@ com.google.android.gms:play-services-ads-identifier:18.0.0 com.google.android.gms:play-services-base:18.0.1 com.google.android.gms:play-services-basement:18.1.0 com.google.android.gms:play-services-cloud-messaging:17.0.1 -com.google.android.gms:play-services-measurement-api:21.4.0 -com.google.android.gms:play-services-measurement-base:21.4.0 -com.google.android.gms:play-services-measurement-impl:21.4.0 -com.google.android.gms:play-services-measurement-sdk-api:21.4.0 -com.google.android.gms:play-services-measurement-sdk:21.4.0 -com.google.android.gms:play-services-measurement:21.4.0 +com.google.android.gms:play-services-measurement-api:21.5.0 +com.google.android.gms:play-services-measurement-base:21.5.0 +com.google.android.gms:play-services-measurement-impl:21.5.0 +com.google.android.gms:play-services-measurement-sdk-api:21.5.0 +com.google.android.gms:play-services-measurement-sdk:21.5.0 +com.google.android.gms:play-services-measurement:21.5.0 com.google.android.gms:play-services-oss-licenses:17.0.1 com.google.android.gms:play-services-stats:17.0.2 com.google.android.gms:play-services-tasks:18.0.2 @@ -163,16 +163,15 @@ com.google.dagger:hilt-android:2.51.1 com.google.dagger:hilt-core:2.51.1 com.google.errorprone:error_prone_annotations:2.11.0 com.google.firebase:firebase-abt:21.1.1 -com.google.firebase:firebase-analytics-ktx:21.4.0 -com.google.firebase:firebase-analytics:21.4.0 +com.google.firebase:firebase-analytics-ktx:21.5.0 +com.google.firebase:firebase-analytics:21.5.0 com.google.firebase:firebase-annotations:16.2.0 -com.google.firebase:firebase-bom:32.4.0 +com.google.firebase:firebase-bom:32.5.0 com.google.firebase:firebase-common-ktx:20.4.2 com.google.firebase:firebase-common:20.4.2 com.google.firebase:firebase-components:17.1.5 com.google.firebase:firebase-config:21.5.0 -com.google.firebase:firebase-crashlytics-ktx:18.5.0 -com.google.firebase:firebase-crashlytics:18.5.0 +com.google.firebase:firebase-crashlytics:18.5.1 com.google.firebase:firebase-datatransport:18.1.8 com.google.firebase:firebase-encoders-json:18.0.1 com.google.firebase:firebase-encoders-proto:16.0.0 @@ -181,9 +180,7 @@ com.google.firebase:firebase-iid-interop:17.1.0 com.google.firebase:firebase-installations-interop:17.1.1 com.google.firebase:firebase-installations:17.2.0 com.google.firebase:firebase-measurement-connector:19.0.0 -com.google.firebase:firebase-messaging-ktx:23.3.0 -com.google.firebase:firebase-messaging:23.3.0 -com.google.firebase:firebase-perf-ktx:20.5.0 +com.google.firebase:firebase-messaging:23.3.1 com.google.firebase:firebase-perf:20.5.0 com.google.firebase:firebase-sessions:1.1.0 com.google.firebase:protolite-well-known-types:18.0.0 From d56e06e67643db0f894686a26fa85fd422a587c3 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 5 Jul 2024 21:23:53 +0200 Subject: [PATCH 55/59] Merge Android & JVM plugins into a single `HiltConventionPlugin` --- app/build.gradle.kts | 2 +- build-logic/convention/build.gradle.kts | 10 +++---- .../kotlin/AndroidFeatureConventionPlugin.kt | 2 +- .../kotlin/AndroidHiltConventionPlugin.kt | 26 ------------------- .../src/main/kotlin/HiltConventionPlugin.kt | 26 +++++++++---------- .../main/kotlin/JvmHiltConventionPlugin.kt | 24 ----------------- core/analytics/build.gradle.kts | 2 +- core/common/build.gradle.kts | 2 +- core/data-test/build.gradle.kts | 2 +- core/data/build.gradle.kts | 2 +- core/database/build.gradle.kts | 2 +- core/datastore-test/build.gradle.kts | 2 +- core/datastore/build.gradle.kts | 2 +- core/network/build.gradle.kts | 2 +- core/notifications/build.gradle.kts | 2 +- core/screenshot-testing/build.gradle.kts | 2 +- core/testing/build.gradle.kts | 2 +- gradle/libs.versions.toml | 5 ++-- sync/sync-test/build.gradle.kts | 2 +- sync/work/build.gradle.kts | 2 +- ui-test-hilt-manifest/build.gradle.kts | 2 +- 21 files changed, 34 insertions(+), 89 deletions(-) delete mode 100644 build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt delete mode 100644 build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 47b8af943..9c6989f67 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,8 +20,8 @@ plugins { alias(libs.plugins.nowinandroid.android.application.compose) alias(libs.plugins.nowinandroid.android.application.flavors) alias(libs.plugins.nowinandroid.android.application.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) alias(libs.plugins.nowinandroid.android.application.firebase) + alias(libs.plugins.nowinandroid.hilt) id("com.google.android.gms.oss-licenses-plugin") alias(libs.plugins.baselineprofile) alias(libs.plugins.roborazzi) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 27956195f..c735fa4a0 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -89,9 +89,9 @@ gradlePlugin { id = "nowinandroid.android.test" implementationClass = "AndroidTestConventionPlugin" } - register("androidHilt") { - id = "nowinandroid.android.hilt" - implementationClass = "AndroidHiltConventionPlugin" + register("hilt") { + id = "nowinandroid.hilt" + implementationClass = "HiltConventionPlugin" } register("androidRoom") { id = "nowinandroid.android.room" @@ -113,9 +113,5 @@ gradlePlugin { id = "nowinandroid.jvm.library" implementationClass = "JvmLibraryConventionPlugin" } - register("jvmHilt") { - id = "nowinandroid.jvm.hilt" - implementationClass = "JvmHiltConventionPlugin" - } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 024ec4fe0..9110e7fa3 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -27,7 +27,7 @@ class AndroidFeatureConventionPlugin : Plugin { with(target) { pluginManager.apply { apply("nowinandroid.android.library") - apply("nowinandroid.android.hilt") + apply("nowinandroid.hilt") } extensions.configure { testOptions.animationsDisabled = true diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt deleted file mode 100644 index 3fa416536..000000000 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.gradle.api.Plugin -import org.gradle.api.Project - -class AndroidHiltConventionPlugin : Plugin by HiltConventionPlugin( - basePluginId = "dagger.hilt.android.plugin", - dependencyHandler = { libs -> - "implementation"(libs.findLibrary("hilt.android").get()) - "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) - } -) diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt index 952386fd6..a8228e5af 100644 --- a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -14,27 +14,27 @@ * limitations under the License. */ +import com.android.build.gradle.api.AndroidBasePlugin import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.artifacts.VersionCatalog -import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.dependencies -class HiltConventionPlugin( - val basePluginId: String? = null, - val dependencyHandler: DependencyHandlerScope.(libs: VersionCatalog) -> Unit -) : Plugin { +class HiltConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - with(pluginManager) { - basePluginId?.let(::apply) - apply("com.google.devtools.ksp") - } + pluginManager.apply("com.google.devtools.ksp") dependencies { - "ksp"(libs.findLibrary("hilt.compiler").get()) - "kspTest"(libs.findLibrary("hilt.compiler").get()) - dependencyHandler(libs) + add("ksp", libs.findLibrary("hilt.compiler").get()) + add("implementation", libs.findLibrary("hilt.core").get()) + } + + /** Add support for Android modules, based on [AndroidBasePlugin] */ + pluginManager.withPlugin("com.android.base") { + pluginManager.apply("dagger.hilt.android.plugin") + dependencies { + add("implementation", libs.findLibrary("hilt.android").get()) + } } } } diff --git a/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt deleted file mode 100644 index dce0aecef..000000000 --- a/build-logic/convention/src/main/kotlin/JvmHiltConventionPlugin.kt +++ /dev/null @@ -1,24 +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. - */ - -import org.gradle.api.Plugin -import org.gradle.api.Project - -class JvmHiltConventionPlugin : Plugin by HiltConventionPlugin( - dependencyHandler = { libs -> - "implementation"(libs.findLibrary("hilt.core").get()) - }, -) diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index 023574e6f..72f7620b0 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 94dd3c09e..f1aa9771c 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.jvm.library) - alias(libs.plugins.nowinandroid.jvm.hilt) + alias(libs.plugins.nowinandroid.hilt) } dependencies { diff --git a/core/data-test/build.gradle.kts b/core/data-test/build.gradle.kts index b166df288..420c34a57 100644 --- a/core/data-test/build.gradle.kts +++ b/core/data-test/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 142637ff9..83c268aab 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) id("kotlinx-serialization") } diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index a9e38ead7..8bab355b4 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -17,8 +17,8 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) alias(libs.plugins.nowinandroid.android.room) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/datastore-test/build.gradle.kts b/core/datastore-test/build.gradle.kts index 53e5e2c0c..375b1d3d8 100644 --- a/core/datastore-test/build.gradle.kts +++ b/core/datastore-test/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index 725396ac4..b17bf6abd 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -17,7 +17,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 689a99e73..d12482a56 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -17,7 +17,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) id("kotlinx-serialization") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") } diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts index 7b0f14fc8..34393049b 100644 --- a/core/notifications/build.gradle.kts +++ b/core/notifications/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/screenshot-testing/build.gradle.kts b/core/screenshot-testing/build.gradle.kts index 1b816fc67..794416ba9 100644 --- a/core/screenshot-testing/build.gradle.kts +++ b/core/screenshot-testing/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.compose) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 90f2405a4..01696d5e8 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 52ec568c9..cc44b5003 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -122,7 +122,7 @@ google-oss-licenses = { group = "com.google.android.gms", name = "play-services- google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } -hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } +hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" } hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } @@ -187,12 +187,11 @@ nowinandroid-android-application-firebase = { id = "nowinandroid.android.applica nowinandroid-android-application-flavors = { id = "nowinandroid.android.application.flavors", version = "unspecified" } nowinandroid-android-application-jacoco = { id = "nowinandroid.android.application.jacoco", version = "unspecified" } nowinandroid-android-feature = { id = "nowinandroid.android.feature", version = "unspecified" } -nowinandroid-android-hilt = { id = "nowinandroid.android.hilt", version = "unspecified" } nowinandroid-android-library = { id = "nowinandroid.android.library", version = "unspecified" } nowinandroid-android-library-compose = { id = "nowinandroid.android.library.compose", version = "unspecified" } nowinandroid-android-library-jacoco = { id = "nowinandroid.android.library.jacoco", version = "unspecified" } nowinandroid-android-lint = { id = "nowinandroid.android.lint", version = "unspecified" } nowinandroid-android-room = { id = "nowinandroid.android.room", version = "unspecified" } nowinandroid-android-test = { id = "nowinandroid.android.test", version = "unspecified" } +nowinandroid-hilt = { id = "nowinandroid.hilt", version = "unspecified" } nowinandroid-jvm-library = { id = "nowinandroid.jvm.library", version = "unspecified" } -nowinandroid-jvm-hilt = { id = "nowinandroid.jvm.hilt", version = "unspecified" } diff --git a/sync/sync-test/build.gradle.kts b/sync/sync-test/build.gradle.kts index 0fac2cf83..fd9af1882 100644 --- a/sync/sync-test/build.gradle.kts +++ b/sync/sync-test/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/sync/work/build.gradle.kts b/sync/work/build.gradle.kts index 1bcc15964..7b4b55a18 100644 --- a/sync/work/build.gradle.kts +++ b/sync/work/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/ui-test-hilt-manifest/build.gradle.kts b/ui-test-hilt-manifest/build.gradle.kts index f41482814..3f084c6df 100644 --- a/ui-test-hilt-manifest/build.gradle.kts +++ b/ui-test-hilt-manifest/build.gradle.kts @@ -15,7 +15,7 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.hilt) + alias(libs.plugins.nowinandroid.hilt) } android { From 2caf7180a8cc5ce395273a182f62ddb1a8b47d85 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 5 Jul 2024 21:25:42 +0200 Subject: [PATCH 56/59] updateProdReleaseBadging --- app/prodRelease-badging.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 827aa177e..9c6b8ed55 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -7,8 +7,6 @@ uses-permission: name='android.permission.POST_NOTIFICATIONS' uses-permission: name='android.permission.WAKE_LOCK' uses-permission: name='com.google.android.c2dm.permission.RECEIVE' uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' -uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION' -uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID' uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' uses-permission: name='android.permission.FOREGROUND_SERVICE' uses-permission: name='com.google.samples.apps.nowinandroid.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' From a34fee2fcb953b615d37818b526f47246f6a8136 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 8 Jul 2024 18:58:32 +0100 Subject: [PATCH 57/59] Remove Firebase AD_SERVICE_CONFIG property Change-Id: I084f98af8f7eb739be1053428593a2b880ae33f9 --- app/prodRelease-badging.txt | 1 - app/src/main/AndroidManifest.xml | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 1e7f8db61..769e0a6e4 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -105,7 +105,6 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' -property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' uses-library-not-required:'android.ext.adservices' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f5e13f2f..716305ab6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,6 +58,11 @@ + + + From 9e4532f0ebe14e7739f7d8ce7637c4833a585812 Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Mon, 8 Jul 2024 13:27:10 -0700 Subject: [PATCH 58/59] Instrumented tests for InterestsListDetailScreen (#1518) * Instrumented tests for InterestsListDetailScreen Change-Id: I0325cea93bf1e1dc0b8d1fc56434d5413caf6fea * Use BackHandler instead of asserting an Espresso exception Change-Id: I6246fcdd51d09a609733fd83223f6d7b8c0cb6c1 * Workaround to make adaptive info use size override currentWindowAdaptiveInfo() is not affected by using the ForcedSize override, so the list detail scaffold directve will be calculated with non-overridden values. This work around hoists the WindowAdaptiveInfo so that we can pass in an appropriate value in tests. Change-Id: Ieef99f6d710ddb70243ac5105aa7805dd638ccf8 * Spotless fixes Change-Id: I7d8a0b3e2667ced3d73fc4f028d11823cda15455 * Review fixes Change-Id: Iffd288c9a927f13069580c66a6ee3150abb63682 * Helper function to get topics Change-Id: If336c4b9dac82382daf96284533a277cc58984fa --- .../apps/nowinandroid/ui/NavigationTest.kt | 6 - .../apps/nowinandroid/ui/UiTestExtensions.kt | 26 ++ .../InterestsListDetailScreenTest.kt | 228 ++++++++++++++++++ .../InterestsListDetailScreen.kt | 7 + 4 files changed, 261 insertions(+), 6 deletions(-) create mode 100644 app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt create mode 100644 app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreenTest.kt 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 93c674bcc..b15024cc7 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 @@ -16,13 +16,11 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.annotation.StringRes import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsSelected import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText -import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithContentDescription @@ -47,7 +45,6 @@ import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder import javax.inject.Inject -import kotlin.properties.ReadOnlyProperty import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR import com.google.samples.apps.nowinandroid.feature.search.R as FeatureSearchR @@ -88,9 +85,6 @@ class NavigationTest { @Inject lateinit var topicsRepository: TopicsRepository - private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) = - ReadOnlyProperty { _, _ -> activity.getString(resId) } - // The strings used for matching in these tests private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_navigate_up) private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_title) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt new file mode 100644 index 000000000..bdc09885d --- /dev/null +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.annotation.StringRes +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import kotlin.properties.ReadOnlyProperty + +fun AndroidComposeTestRule<*, *>.stringResource( + @StringRes resId: Int, +): ReadOnlyProperty = + ReadOnlyProperty { _, _ -> activity.getString(resId) } diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreenTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreenTest.kt new file mode 100644 index 000000000..21ac3e920 --- /dev/null +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreenTest.kt @@ -0,0 +1,228 @@ +/* + * 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.material3.adaptive.Posture +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.test.espresso.Espresso +import androidx.window.core.layout.WindowSizeClass +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.ui.stringResource +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.BindValue +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import javax.inject.Inject +import kotlin.test.assertTrue +import com.google.samples.apps.nowinandroid.feature.topic.R as FeatureTopicR + +@HiltAndroidTest +class InterestsListDetailScreenTest { + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + @BindValue + @get:Rule(order = 1) + val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() + + @get:Rule(order = 2) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var topicsRepository: TopicsRepository + + // The strings used for matching in these tests. + private val placeholderText by composeTestRule.stringResource(FeatureTopicR.string.feature_topic_select_an_interest) + private val listPaneTag = "interests:topics" + + private val Topic.testTag + get() = "topic:${this.id}" + + // Overrides for device sizes. + private enum class TestDeviceConfig(widthDp: Float, heightDp: Float) { + Compact(412f, 915f), + Expanded(1200f, 840f), + ; + + val sizeOverride = DeviceConfigurationOverride.ForcedSize(DpSize(widthDp.dp, heightDp.dp)) + val adaptiveInfo = WindowAdaptiveInfo( + windowSizeClass = WindowSizeClass.compute(widthDp, heightDp), + windowPosture = Posture(), + ) + } + + @Before + fun setup() { + hiltRule.inject() + } + + /** Convenience function for getting all topics during tests, */ + private fun getTopics(): List = runBlocking { + topicsRepository.getTopics().first() + } + + @Test + fun expandedWidth_initialState_showsTwoPanesWithPlaceholder() { + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Expanded) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsDisplayed() + } + } + + @Test + fun compactWidth_initialState_showsListPane() { + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Compact) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + } + } + + @Test + fun expandedWidth_topicSelected_updatesDetailPane() { + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Expanded) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + fun compactWidth_topicSelected_showsTopicDetailPane() { + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Compact) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsNotDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + fun expandedWidth_backPressFromTopicDetail_leavesInterests() { + var unhandledBackPress = false + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Expanded) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + // Back press should not be handled by the two pane layout, and thus + // "fall through" to this BackHandler. + BackHandler { + unhandledBackPress = true + } + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + Espresso.pressBack() + + assertTrue(unhandledBackPress) + } + } + + @Test + fun compactWidth_backPressFromTopicDetail_showsListPane() { + composeTestRule.apply { + setContent { + with(TestDeviceConfig.Compact) { + DeviceConfigurationOverride(override = sizeOverride) { + NiaTheme { + InterestsListDetailScreen(windowAdaptiveInfo = adaptiveInfo) + } + } + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + Espresso.pressBack() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsNotDisplayed() + } + } +} 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 ada4e49d1..919cb44f2 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 @@ -18,11 +18,14 @@ package com.google.samples.apps.nowinandroid.ui.interests2pane import androidx.activity.compose.BackHandler import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.material3.adaptive.layout.AnimatedPane import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole import androidx.compose.material3.adaptive.layout.PaneAdaptedValue import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldDestinationItem +import androidx.compose.material3.adaptive.layout.calculatePaneScaffoldDirective import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator import androidx.compose.runtime.Composable @@ -71,11 +74,13 @@ fun NavGraphBuilder.interestsListDetailScreen() { @Composable internal fun InterestsListDetailScreen( viewModel: Interests2PaneViewModel = hiltViewModel(), + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), ) { val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() InterestsListDetailScreen( selectedTopicId = selectedTopicId, onTopicClick = viewModel::onTopicClick, + windowAdaptiveInfo = windowAdaptiveInfo, ) } @@ -84,8 +89,10 @@ internal fun InterestsListDetailScreen( internal fun InterestsListDetailScreen( selectedTopicId: String?, onTopicClick: (String) -> Unit, + windowAdaptiveInfo: WindowAdaptiveInfo, ) { val listDetailNavigator = rememberListDetailPaneScaffoldNavigator( + scaffoldDirective = calculatePaneScaffoldDirective(windowAdaptiveInfo), initialDestinationHistory = listOfNotNull( ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.List), ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.Detail).takeIf { From 420076f01aadd61f650b6848cd23643ca59226b8 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 15 Jul 2024 19:10:59 +0100 Subject: [PATCH 59/59] Update README.md Add note about screenshot tests failing. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index be1270b16..1f5270323 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,8 @@ Examples: To run the tests execute the following gradle tasks: -- `testDemoDebug` run all local tests against the `demoDebug` variant. +- `testDemoDebug` run all local tests against the `demoDebug` variant. Screenshot tests will fail +(see below for explanation). To avoid this, run `recordRoborazziDemoDebug` prior to running unit tests. - `connectedDemoDebugAndroidTest` run all instrumented tests against the `demoDebug` variant. **Note:** You should not run `./gradlew test` or `./gradlew connectedAndroidTest` as this will execute @@ -137,7 +138,7 @@ stored in `modulename/src/test/screenshots`. - `compareRoborazziDemoDebug` create comparison images between failed tests and the known correct images. These can also be found in `modulename/src/test/screenshots`. -**Note:** The known correct screenshots stored in this repository are recorded on CI using Linux. Other +**Note on failing screenshot tests:** The known correct screenshots stored in this repository are recorded on CI using Linux. Other platforms may (and probably will) generate slightly different images, making the screenshot tests fail. When working on a non-Linux platform, a workaround to this is to run `recordRoborazziDemoDebug` on the `main` branch before starting work. After making changes, `verifyRoborazziDemoDebug` will identify only