From 2fcf7b8591c86eed22c2832b5c144118359e0cd9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 12 Aug 2023 00:44:56 +0200 Subject: [PATCH 01/43] Enable dependabot updates on a daily basis using the `version update` label for gradle updates. --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..6a9528470 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "gradle" + directory: "/" + schedule: + interval: "daily" + registries: "*" + labels: [ "version update" ] +registries: + maven-google: + type: "maven-repository" + url: "https://maven.google.com" + replaces-base: true From 5e40ef12551c686b2a3f5a5e0ae8af4c87a3becd Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 24 Aug 2023 18:19:22 +0200 Subject: [PATCH 02/43] Schedule weekly instead of daily as suggested --- .github/dependabot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6a9528470..5096f3bfb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,11 +4,11 @@ updates: - package-ecosystem: "github-actions" directory: "/" schedule: - interval: "daily" + interval: "weekly" - package-ecosystem: "gradle" directory: "/" schedule: - interval: "daily" + interval: "weekly" registries: "*" labels: [ "version update" ] registries: From d4e2ab6acfd0a61adba0a89ef30c1a67a4967b2a Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 24 Aug 2023 18:25:16 +0200 Subject: [PATCH 03/43] Add "Kotlin - KSP - Compose" update group --- .github/dependabot.yml | 7 +++++++ gradle/libs.versions.toml | 1 + 2 files changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5096f3bfb..00ada2a1c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,13 @@ updates: interval: "weekly" registries: "*" labels: [ "version update" ] + groups: + kotlin-ksp-compose: + patterns: + - "org.jetbrains.kotlin:*" + - "org.jetbrains.kotlin.jvm" + - "com.google.devtools.ksp" + - "androidx.compose.compiler:compiler" registries: maven-google: type: "maven-repository" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 08391f2e6..f8d908c02 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,6 +64,7 @@ androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidxMacroBenchmark" } androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "androidxBrowser" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" } +androidx-compose-compiler = { group = "androidx.compose.compiler", name = "compiler", version.ref = "androidxComposeCompiler" } androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" } androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" } androidx-compose-material-iconsExtended = { group = "androidx.compose.material", name = "material-icons-extended" } From 5916d4b6cf3ca9e530a606be2c45d1b8da081844 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 24 Aug 2023 18:27:27 +0200 Subject: [PATCH 04/43] Remove `.github/renovate.json` --- .github/renovate.json | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/renovate.json diff --git a/.github/renovate.json b/.github/renovate.json deleted file mode 100644 index f19341761..000000000 --- a/.github/renovate.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base", "group:all", ":dependencyDashboard", "schedule:daily" - ], - "packageRules": [ - { - "matchPackageNames": ["org.objenesis:objenesis"], - "allowedVersions": "<=2.6" - }, - { - "matchPackageNames": ["com.google.protobuf"], - "allowedVersions": "<=0.8.19" - } - ] -} From 8d0b8934597f208bdb7851ff70edb93199e2ee97 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 18 Nov 2023 12:13:21 +0100 Subject: [PATCH 05/43] Update Robolectric 4.11.1 - https://github.com/robolectric/robolectric/releases/tag/robolectric-4.11 - https://github.com/robolectric/robolectric/releases/tag/robolectric-4.11.1 > Robolectric 4.11 adds support for Android SDK 34 (U). It also contains many bug fixes, performance improvements, and Shadow API enhancements. Robolectric 4.11 removes support for Android SDKs 18 and below. Removing explicit API 33 Robolectric configuration. --- .../apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/BackgroundScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/ButtonScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/FilterChipScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/IconButtonScreenshotTests.kt | 2 +- .../core/designsystem/LoadingWheelScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/NavigationScreenshotTests.kt | 2 +- .../apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt | 2 +- .../apps/nowinandroid/core/designsystem/TagScreenshotTests.kt | 2 +- .../nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt | 2 +- .../nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt | 2 +- gradle/libs.versions.toml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index bac088482..dcbc1e5c0 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -65,7 +65,7 @@ import javax.inject.Inject @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", sdk = [33]) +@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi") @LooperMode(LooperMode.Mode.PAUSED) @HiltAndroidTest class NiaAppScreenSizesScreenshotTests { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt index d3349de80..e8cfd9a96 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt @@ -36,7 +36,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class BackgroundScreenshotTests { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt index d3aa4224f..2f6ab5370 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt @@ -36,7 +36,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class ButtonScreenshotTests { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt index 510a0dcfc..2c9bc91ec 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt @@ -43,7 +43,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class FilterChipScreenshotTests() { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt index f6d71fe77..0104cfd47 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt @@ -35,7 +35,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class IconButtonScreenshotTests { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt index 412f42370..75a4aec3a 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt @@ -37,7 +37,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class LoadingWheelScreenshotTests() { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt index 05976ba47..e2e92b570 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt @@ -44,7 +44,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class NavigationScreenshotTests() { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt index 76117db2e..9190d5f35 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt @@ -42,7 +42,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class TabsScreenshotTests() { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt index 9db4d02a3..d9edfd6c6 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt @@ -39,7 +39,7 @@ import org.robolectric.annotation.LooperMode @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class TagScreenshotTests() { diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt index 29404da79..6fac01562 100644 --- a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt @@ -43,7 +43,7 @@ import org.robolectric.annotation.LooperMode @OptIn(ExperimentalMaterial3Api::class) @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33], qualifiers = "480dpi") +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") @LooperMode(LooperMode.Mode.PAUSED) class TopAppBarScreenshotTests() { diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt index 1c521d419..14b67c64e 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt @@ -46,7 +46,7 @@ import java.util.TimeZone */ @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33]) +@Config(application = HiltTestApplication::class) @LooperMode(LooperMode.Mode.PAUSED) class ForYouScreenScreenshotTests { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1eb9116e8..9ee708385 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,7 +52,7 @@ protobuf = "3.24.4" protobufPlugin = "0.9.4" retrofit = "2.9.0" retrofitKotlinxSerializationJson = "1.0.0" -robolectric = "4.10.3" +robolectric = "4.11.1" roborazzi = "1.6.0" room = "2.6.0" secrets = "2.0.1" From b64075b3b2cb36c93dde640202df3f4b009960af Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Fri, 10 Nov 2023 09:52:34 -0800 Subject: [PATCH 06/43] Add dependency guard plugin --- .../dependencies/releaseRuntimeClasspath.txt | 0 app/build.gradle.kts | 12 + .../demoDebugRuntimeClasspath.txt | 218 ++++++++++++++++++ .../demoReleaseRuntimeClasspath.txt | 211 +++++++++++++++++ .../prodDebugRuntimeClasspath.txt | 218 ++++++++++++++++++ .../prodReleaseRuntimeClasspath.txt | 211 +++++++++++++++++ gradle/libs.versions.toml | 2 + 7 files changed, 872 insertions(+) create mode 100644 app-nia-catalog/dependencies/releaseRuntimeClasspath.txt create mode 100644 app/dependencies/demoDebugRuntimeClasspath.txt create mode 100644 app/dependencies/demoReleaseRuntimeClasspath.txt create mode 100644 app/dependencies/prodDebugRuntimeClasspath.txt create mode 100644 app/dependencies/prodReleaseRuntimeClasspath.txt diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt new file mode 100644 index 000000000..e69de29bb diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7a3ada333..319b2b4b6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,6 +25,7 @@ plugins { alias(libs.plugins.nowinandroid.android.application.firebase) id("com.google.android.gms.oss-licenses-plugin") alias(libs.plugins.baselineprofile) + alias(libs.plugins.dependencyGuard) } android { @@ -144,3 +145,14 @@ baselineProfile { // Instead enable generation directly for the release build variant. automaticGenerationDuringBuild = false } + +dependencyGuard { + + configuration("demoDebugRuntimeClasspath") + + configuration("demoReleaseRuntimeClasspath") + + configuration("prodDebugRuntimeClasspath") + + configuration("prodReleaseRuntimeClasspath") +} diff --git a/app/dependencies/demoDebugRuntimeClasspath.txt b/app/dependencies/demoDebugRuntimeClasspath.txt new file mode 100644 index 000000000..511aeaa02 --- /dev/null +++ b/app/dependencies/demoDebugRuntimeClasspath.txt @@ -0,0 +1,218 @@ +androidx.activity:activity-compose:1.8.0 +androidx.activity:activity-ktx:1.8.0 +androidx.activity:activity:1.8.0 +androidx.annotation:annotation-experimental:1.3.0 +androidx.annotation:annotation-jvm:1.6.0 +androidx.annotation:annotation:1.6.0 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.appcompat:appcompat:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.6.0 +androidx.collection:collection-ktx:1.1.0 +androidx.collection:collection:1.2.0 +androidx.compose.animation:animation-android:1.5.4 +androidx.compose.animation:animation-core-android:1.5.4 +androidx.compose.animation:animation-core:1.5.4 +androidx.compose.animation:animation:1.5.4 +androidx.compose.foundation:foundation-android:1.5.4 +androidx.compose.foundation:foundation-layout-android:1.5.4 +androidx.compose.foundation:foundation-layout:1.5.4 +androidx.compose.foundation:foundation:1.5.4 +androidx.compose.material3:material3-window-size-class:1.1.2 +androidx.compose.material3:material3:1.1.2 +androidx.compose.material:material-android:1.5.4 +androidx.compose.material:material-icons-core-android:1.5.4 +androidx.compose.material:material-icons-core:1.5.4 +androidx.compose.material:material-icons-extended-android:1.5.4 +androidx.compose.material:material-icons-extended:1.5.4 +androidx.compose.material:material-ripple-android:1.5.4 +androidx.compose.material:material-ripple:1.5.4 +androidx.compose.material:material:1.5.4 +androidx.compose.runtime:runtime-android:1.5.4 +androidx.compose.runtime:runtime-livedata:1.5.4 +androidx.compose.runtime:runtime-saveable-android:1.5.4 +androidx.compose.runtime:runtime-saveable:1.5.4 +androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 +androidx.compose.runtime:runtime:1.5.4 +androidx.compose.ui:ui-android:1.5.4 +androidx.compose.ui:ui-geometry-android:1.5.4 +androidx.compose.ui:ui-geometry:1.5.4 +androidx.compose.ui:ui-graphics-android:1.5.4 +androidx.compose.ui:ui-graphics:1.5.4 +androidx.compose.ui:ui-test-manifest:1.5.4 +androidx.compose.ui:ui-text-android:1.5.4 +androidx.compose.ui:ui-text:1.5.4 +androidx.compose.ui:ui-tooling-android:1.5.4 +androidx.compose.ui:ui-tooling-data-android:1.5.4 +androidx.compose.ui:ui-tooling-data:1.5.4 +androidx.compose.ui:ui-tooling-preview-android:1.5.4 +androidx.compose.ui:ui-tooling-preview:1.5.4 +androidx.compose.ui:ui-tooling:1.5.4 +androidx.compose.ui:ui-unit-android:1.5.4 +androidx.compose.ui:ui-unit:1.5.4 +androidx.compose.ui:ui-util-android:1.5.4 +androidx.compose.ui:ui-util:1.5.4 +androidx.compose.ui:ui:1.5.4 +androidx.compose:compose-bom:2023.10.01 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.12.0 +androidx.core:core-splashscreen:1.0.1 +androidx.core:core:1.12.0 +androidx.cursoradapter:cursoradapter:1.0.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-core:1.0.0 +androidx.datastore:datastore-preferences-core:1.0.0 +androidx.datastore:datastore-preferences:1.0.0 +androidx.datastore:datastore:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.drawerlayout:drawerlayout:1.0.0 +androidx.emoji2:emoji2-views-helper:1.4.0 +androidx.emoji2:emoji2:1.4.0 +androidx.exifinterface:exifinterface:1.3.6 +androidx.fragment:fragment:1.5.1 +androidx.hilt:hilt-common:1.1.0 +androidx.hilt:hilt-navigation-compose:1.0.0 +androidx.hilt:hilt-navigation:1.0.0 +androidx.hilt:hilt-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.6.2 +androidx.lifecycle:lifecycle-common:2.6.2 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata-core:2.6.2 +androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata:2.6.2 +androidx.lifecycle:lifecycle-process:2.6.2 +androidx.lifecycle:lifecycle-runtime-compose:2.6.2 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 +androidx.lifecycle:lifecycle-runtime:2.6.2 +androidx.lifecycle:lifecycle-service:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 +androidx.lifecycle:lifecycle-viewmodel:2.6.2 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-alpha04 +androidx.navigation:navigation-common-ktx:2.7.4 +androidx.navigation:navigation-common:2.7.4 +androidx.navigation:navigation-compose:2.7.4 +androidx.navigation:navigation-runtime-ktx:2.7.4 +androidx.navigation:navigation-runtime:2.7.4 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.resourceinspection:resourceinspection-annotation:1.0.1 +androidx.room:room-common:2.6.0 +androidx.room:room-ktx:2.6.0 +androidx.room:room-runtime:2.6.0 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.2.0-alpha02 +androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 +androidx.tracing:tracing-perfetto:1.0.0-alpha11 +androidx.tracing:tracing:1.2.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window:1.1.0 +androidx.work:work-runtime-ktx:2.9.0-rc01 +androidx.work:work-runtime:2.9.0-rc01 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.accompanist:accompanist-permissions:0.32.0 +com.google.android.datatransport:transport-api:3.0.0 +com.google.android.datatransport:transport-backend-cct:3.1.9 +com.google.android.datatransport:transport-runtime:3.1.9 +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-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 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.48.1 +com.google.dagger:dagger:2.48.1 +com.google.dagger:hilt-android:2.48.1 +com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 +com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 +com.google.firebase:firebase-encoders-json:18.0.1 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +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-perf:20.5.0 +com.google.firebase:firebase-sessions:1.1.0 +com.google.firebase:protolite-well-known-types:18.0.0 +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:3.24.4 +com.google.protobuf:protobuf-kotlin-lite:3.24.4 +com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +com.squareup.retrofit2:retrofit:2.9.0 +io.coil-kt:coil-base:2.4.0 +io.coil-kt:coil-compose-base:2.4.0 +io.coil-kt:coil-compose:2.4.0 +io.coil-kt:coil-svg:2.4.0 +io.coil-kt:coil:2.4.0 +io.github.aakira:napier-android-debug:1.4.1 +io.github.aakira:napier:1.4.1 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib:1.9.10 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/demoReleaseRuntimeClasspath.txt b/app/dependencies/demoReleaseRuntimeClasspath.txt new file mode 100644 index 000000000..8123217b9 --- /dev/null +++ b/app/dependencies/demoReleaseRuntimeClasspath.txt @@ -0,0 +1,211 @@ +androidx.activity:activity-compose:1.8.0 +androidx.activity:activity-ktx:1.8.0 +androidx.activity:activity:1.8.0 +androidx.annotation:annotation-experimental:1.3.0 +androidx.annotation:annotation-jvm:1.6.0 +androidx.annotation:annotation:1.6.0 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.appcompat:appcompat:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.6.0 +androidx.collection:collection-ktx:1.1.0 +androidx.collection:collection:1.2.0 +androidx.compose.animation:animation-android:1.5.4 +androidx.compose.animation:animation-core-android:1.5.4 +androidx.compose.animation:animation-core:1.5.4 +androidx.compose.animation:animation:1.5.4 +androidx.compose.foundation:foundation-android:1.5.4 +androidx.compose.foundation:foundation-layout-android:1.5.4 +androidx.compose.foundation:foundation-layout:1.5.4 +androidx.compose.foundation:foundation:1.5.4 +androidx.compose.material3:material3-window-size-class:1.1.2 +androidx.compose.material3:material3:1.1.2 +androidx.compose.material:material-icons-core-android:1.5.4 +androidx.compose.material:material-icons-core:1.5.4 +androidx.compose.material:material-icons-extended-android:1.5.4 +androidx.compose.material:material-icons-extended:1.5.4 +androidx.compose.material:material-ripple-android:1.5.4 +androidx.compose.material:material-ripple:1.5.4 +androidx.compose.runtime:runtime-android:1.5.4 +androidx.compose.runtime:runtime-livedata:1.5.4 +androidx.compose.runtime:runtime-saveable-android:1.5.4 +androidx.compose.runtime:runtime-saveable:1.5.4 +androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 +androidx.compose.runtime:runtime:1.5.4 +androidx.compose.ui:ui-android:1.5.4 +androidx.compose.ui:ui-geometry-android:1.5.4 +androidx.compose.ui:ui-geometry:1.5.4 +androidx.compose.ui:ui-graphics-android:1.5.4 +androidx.compose.ui:ui-graphics:1.5.4 +androidx.compose.ui:ui-text-android:1.5.4 +androidx.compose.ui:ui-text:1.5.4 +androidx.compose.ui:ui-tooling-preview-android:1.5.4 +androidx.compose.ui:ui-tooling-preview:1.5.4 +androidx.compose.ui:ui-unit-android:1.5.4 +androidx.compose.ui:ui-unit:1.5.4 +androidx.compose.ui:ui-util-android:1.5.4 +androidx.compose.ui:ui-util:1.5.4 +androidx.compose.ui:ui:1.5.4 +androidx.compose:compose-bom:2023.10.01 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.12.0 +androidx.core:core-splashscreen:1.0.1 +androidx.core:core:1.12.0 +androidx.cursoradapter:cursoradapter:1.0.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-core:1.0.0 +androidx.datastore:datastore-preferences-core:1.0.0 +androidx.datastore:datastore-preferences:1.0.0 +androidx.datastore:datastore:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.drawerlayout:drawerlayout:1.0.0 +androidx.emoji2:emoji2-views-helper:1.4.0 +androidx.emoji2:emoji2:1.4.0 +androidx.exifinterface:exifinterface:1.3.6 +androidx.fragment:fragment:1.5.1 +androidx.hilt:hilt-common:1.1.0 +androidx.hilt:hilt-navigation-compose:1.0.0 +androidx.hilt:hilt-navigation:1.0.0 +androidx.hilt:hilt-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.6.2 +androidx.lifecycle:lifecycle-common:2.6.2 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata-core:2.6.2 +androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata:2.6.2 +androidx.lifecycle:lifecycle-process:2.6.2 +androidx.lifecycle:lifecycle-runtime-compose:2.6.2 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 +androidx.lifecycle:lifecycle-runtime:2.6.2 +androidx.lifecycle:lifecycle-service:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 +androidx.lifecycle:lifecycle-viewmodel:2.6.2 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-alpha04 +androidx.navigation:navigation-common-ktx:2.7.4 +androidx.navigation:navigation-common:2.7.4 +androidx.navigation:navigation-compose:2.7.4 +androidx.navigation:navigation-runtime-ktx:2.7.4 +androidx.navigation:navigation-runtime:2.7.4 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.resourceinspection:resourceinspection-annotation:1.0.1 +androidx.room:room-common:2.6.0 +androidx.room:room-ktx:2.6.0 +androidx.room:room-runtime:2.6.0 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.2.0-alpha02 +androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 +androidx.tracing:tracing-perfetto:1.0.0-alpha11 +androidx.tracing:tracing:1.2.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window:1.1.0 +androidx.work:work-runtime-ktx:2.9.0-rc01 +androidx.work:work-runtime:2.9.0-rc01 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.accompanist:accompanist-permissions:0.32.0 +com.google.android.datatransport:transport-api:3.0.0 +com.google.android.datatransport:transport-backend-cct:3.1.9 +com.google.android.datatransport:transport-runtime:3.1.9 +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-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 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.48.1 +com.google.dagger:dagger:2.48.1 +com.google.dagger:hilt-android:2.48.1 +com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 +com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 +com.google.firebase:firebase-encoders-json:18.0.1 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +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-perf:20.5.0 +com.google.firebase:firebase-sessions:1.1.0 +com.google.firebase:protolite-well-known-types:18.0.0 +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:3.24.4 +com.google.protobuf:protobuf-kotlin-lite:3.24.4 +com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +com.squareup.retrofit2:retrofit:2.9.0 +io.coil-kt:coil-base:2.4.0 +io.coil-kt:coil-compose-base:2.4.0 +io.coil-kt:coil-compose:2.4.0 +io.coil-kt:coil-svg:2.4.0 +io.coil-kt:coil:2.4.0 +io.github.aakira:napier-android:1.4.1 +io.github.aakira:napier:1.4.1 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib:1.9.10 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/prodDebugRuntimeClasspath.txt b/app/dependencies/prodDebugRuntimeClasspath.txt new file mode 100644 index 000000000..511aeaa02 --- /dev/null +++ b/app/dependencies/prodDebugRuntimeClasspath.txt @@ -0,0 +1,218 @@ +androidx.activity:activity-compose:1.8.0 +androidx.activity:activity-ktx:1.8.0 +androidx.activity:activity:1.8.0 +androidx.annotation:annotation-experimental:1.3.0 +androidx.annotation:annotation-jvm:1.6.0 +androidx.annotation:annotation:1.6.0 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.appcompat:appcompat:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.6.0 +androidx.collection:collection-ktx:1.1.0 +androidx.collection:collection:1.2.0 +androidx.compose.animation:animation-android:1.5.4 +androidx.compose.animation:animation-core-android:1.5.4 +androidx.compose.animation:animation-core:1.5.4 +androidx.compose.animation:animation:1.5.4 +androidx.compose.foundation:foundation-android:1.5.4 +androidx.compose.foundation:foundation-layout-android:1.5.4 +androidx.compose.foundation:foundation-layout:1.5.4 +androidx.compose.foundation:foundation:1.5.4 +androidx.compose.material3:material3-window-size-class:1.1.2 +androidx.compose.material3:material3:1.1.2 +androidx.compose.material:material-android:1.5.4 +androidx.compose.material:material-icons-core-android:1.5.4 +androidx.compose.material:material-icons-core:1.5.4 +androidx.compose.material:material-icons-extended-android:1.5.4 +androidx.compose.material:material-icons-extended:1.5.4 +androidx.compose.material:material-ripple-android:1.5.4 +androidx.compose.material:material-ripple:1.5.4 +androidx.compose.material:material:1.5.4 +androidx.compose.runtime:runtime-android:1.5.4 +androidx.compose.runtime:runtime-livedata:1.5.4 +androidx.compose.runtime:runtime-saveable-android:1.5.4 +androidx.compose.runtime:runtime-saveable:1.5.4 +androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 +androidx.compose.runtime:runtime:1.5.4 +androidx.compose.ui:ui-android:1.5.4 +androidx.compose.ui:ui-geometry-android:1.5.4 +androidx.compose.ui:ui-geometry:1.5.4 +androidx.compose.ui:ui-graphics-android:1.5.4 +androidx.compose.ui:ui-graphics:1.5.4 +androidx.compose.ui:ui-test-manifest:1.5.4 +androidx.compose.ui:ui-text-android:1.5.4 +androidx.compose.ui:ui-text:1.5.4 +androidx.compose.ui:ui-tooling-android:1.5.4 +androidx.compose.ui:ui-tooling-data-android:1.5.4 +androidx.compose.ui:ui-tooling-data:1.5.4 +androidx.compose.ui:ui-tooling-preview-android:1.5.4 +androidx.compose.ui:ui-tooling-preview:1.5.4 +androidx.compose.ui:ui-tooling:1.5.4 +androidx.compose.ui:ui-unit-android:1.5.4 +androidx.compose.ui:ui-unit:1.5.4 +androidx.compose.ui:ui-util-android:1.5.4 +androidx.compose.ui:ui-util:1.5.4 +androidx.compose.ui:ui:1.5.4 +androidx.compose:compose-bom:2023.10.01 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.12.0 +androidx.core:core-splashscreen:1.0.1 +androidx.core:core:1.12.0 +androidx.cursoradapter:cursoradapter:1.0.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-core:1.0.0 +androidx.datastore:datastore-preferences-core:1.0.0 +androidx.datastore:datastore-preferences:1.0.0 +androidx.datastore:datastore:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.drawerlayout:drawerlayout:1.0.0 +androidx.emoji2:emoji2-views-helper:1.4.0 +androidx.emoji2:emoji2:1.4.0 +androidx.exifinterface:exifinterface:1.3.6 +androidx.fragment:fragment:1.5.1 +androidx.hilt:hilt-common:1.1.0 +androidx.hilt:hilt-navigation-compose:1.0.0 +androidx.hilt:hilt-navigation:1.0.0 +androidx.hilt:hilt-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.6.2 +androidx.lifecycle:lifecycle-common:2.6.2 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata-core:2.6.2 +androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata:2.6.2 +androidx.lifecycle:lifecycle-process:2.6.2 +androidx.lifecycle:lifecycle-runtime-compose:2.6.2 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 +androidx.lifecycle:lifecycle-runtime:2.6.2 +androidx.lifecycle:lifecycle-service:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 +androidx.lifecycle:lifecycle-viewmodel:2.6.2 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-alpha04 +androidx.navigation:navigation-common-ktx:2.7.4 +androidx.navigation:navigation-common:2.7.4 +androidx.navigation:navigation-compose:2.7.4 +androidx.navigation:navigation-runtime-ktx:2.7.4 +androidx.navigation:navigation-runtime:2.7.4 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.resourceinspection:resourceinspection-annotation:1.0.1 +androidx.room:room-common:2.6.0 +androidx.room:room-ktx:2.6.0 +androidx.room:room-runtime:2.6.0 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.2.0-alpha02 +androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 +androidx.tracing:tracing-perfetto:1.0.0-alpha11 +androidx.tracing:tracing:1.2.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window:1.1.0 +androidx.work:work-runtime-ktx:2.9.0-rc01 +androidx.work:work-runtime:2.9.0-rc01 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.accompanist:accompanist-permissions:0.32.0 +com.google.android.datatransport:transport-api:3.0.0 +com.google.android.datatransport:transport-backend-cct:3.1.9 +com.google.android.datatransport:transport-runtime:3.1.9 +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-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 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.48.1 +com.google.dagger:dagger:2.48.1 +com.google.dagger:hilt-android:2.48.1 +com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 +com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 +com.google.firebase:firebase-encoders-json:18.0.1 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +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-perf:20.5.0 +com.google.firebase:firebase-sessions:1.1.0 +com.google.firebase:protolite-well-known-types:18.0.0 +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:3.24.4 +com.google.protobuf:protobuf-kotlin-lite:3.24.4 +com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +com.squareup.retrofit2:retrofit:2.9.0 +io.coil-kt:coil-base:2.4.0 +io.coil-kt:coil-compose-base:2.4.0 +io.coil-kt:coil-compose:2.4.0 +io.coil-kt:coil-svg:2.4.0 +io.coil-kt:coil:2.4.0 +io.github.aakira:napier-android-debug:1.4.1 +io.github.aakira:napier:1.4.1 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib:1.9.10 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt new file mode 100644 index 000000000..8123217b9 --- /dev/null +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -0,0 +1,211 @@ +androidx.activity:activity-compose:1.8.0 +androidx.activity:activity-ktx:1.8.0 +androidx.activity:activity:1.8.0 +androidx.annotation:annotation-experimental:1.3.0 +androidx.annotation:annotation-jvm:1.6.0 +androidx.annotation:annotation:1.6.0 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.appcompat:appcompat:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.6.0 +androidx.collection:collection-ktx:1.1.0 +androidx.collection:collection:1.2.0 +androidx.compose.animation:animation-android:1.5.4 +androidx.compose.animation:animation-core-android:1.5.4 +androidx.compose.animation:animation-core:1.5.4 +androidx.compose.animation:animation:1.5.4 +androidx.compose.foundation:foundation-android:1.5.4 +androidx.compose.foundation:foundation-layout-android:1.5.4 +androidx.compose.foundation:foundation-layout:1.5.4 +androidx.compose.foundation:foundation:1.5.4 +androidx.compose.material3:material3-window-size-class:1.1.2 +androidx.compose.material3:material3:1.1.2 +androidx.compose.material:material-icons-core-android:1.5.4 +androidx.compose.material:material-icons-core:1.5.4 +androidx.compose.material:material-icons-extended-android:1.5.4 +androidx.compose.material:material-icons-extended:1.5.4 +androidx.compose.material:material-ripple-android:1.5.4 +androidx.compose.material:material-ripple:1.5.4 +androidx.compose.runtime:runtime-android:1.5.4 +androidx.compose.runtime:runtime-livedata:1.5.4 +androidx.compose.runtime:runtime-saveable-android:1.5.4 +androidx.compose.runtime:runtime-saveable:1.5.4 +androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 +androidx.compose.runtime:runtime:1.5.4 +androidx.compose.ui:ui-android:1.5.4 +androidx.compose.ui:ui-geometry-android:1.5.4 +androidx.compose.ui:ui-geometry:1.5.4 +androidx.compose.ui:ui-graphics-android:1.5.4 +androidx.compose.ui:ui-graphics:1.5.4 +androidx.compose.ui:ui-text-android:1.5.4 +androidx.compose.ui:ui-text:1.5.4 +androidx.compose.ui:ui-tooling-preview-android:1.5.4 +androidx.compose.ui:ui-tooling-preview:1.5.4 +androidx.compose.ui:ui-unit-android:1.5.4 +androidx.compose.ui:ui-unit:1.5.4 +androidx.compose.ui:ui-util-android:1.5.4 +androidx.compose.ui:ui-util:1.5.4 +androidx.compose.ui:ui:1.5.4 +androidx.compose:compose-bom:2023.10.01 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.12.0 +androidx.core:core-splashscreen:1.0.1 +androidx.core:core:1.12.0 +androidx.cursoradapter:cursoradapter:1.0.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-core:1.0.0 +androidx.datastore:datastore-preferences-core:1.0.0 +androidx.datastore:datastore-preferences:1.0.0 +androidx.datastore:datastore:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.drawerlayout:drawerlayout:1.0.0 +androidx.emoji2:emoji2-views-helper:1.4.0 +androidx.emoji2:emoji2:1.4.0 +androidx.exifinterface:exifinterface:1.3.6 +androidx.fragment:fragment:1.5.1 +androidx.hilt:hilt-common:1.1.0 +androidx.hilt:hilt-navigation-compose:1.0.0 +androidx.hilt:hilt-navigation:1.0.0 +androidx.hilt:hilt-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.6.2 +androidx.lifecycle:lifecycle-common:2.6.2 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata-core:2.6.2 +androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 +androidx.lifecycle:lifecycle-livedata:2.6.2 +androidx.lifecycle:lifecycle-process:2.6.2 +androidx.lifecycle:lifecycle-runtime-compose:2.6.2 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 +androidx.lifecycle:lifecycle-runtime:2.6.2 +androidx.lifecycle:lifecycle-service:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 +androidx.lifecycle:lifecycle-viewmodel:2.6.2 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-alpha04 +androidx.navigation:navigation-common-ktx:2.7.4 +androidx.navigation:navigation-common:2.7.4 +androidx.navigation:navigation-compose:2.7.4 +androidx.navigation:navigation-runtime-ktx:2.7.4 +androidx.navigation:navigation-runtime:2.7.4 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.resourceinspection:resourceinspection-annotation:1.0.1 +androidx.room:room-common:2.6.0 +androidx.room:room-ktx:2.6.0 +androidx.room:room-runtime:2.6.0 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.2.0-alpha02 +androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 +androidx.tracing:tracing-perfetto:1.0.0-alpha11 +androidx.tracing:tracing:1.2.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window:1.1.0 +androidx.work:work-runtime-ktx:2.9.0-rc01 +androidx.work:work-runtime:2.9.0-rc01 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.accompanist:accompanist-permissions:0.32.0 +com.google.android.datatransport:transport-api:3.0.0 +com.google.android.datatransport:transport-backend-cct:3.1.9 +com.google.android.datatransport:transport-runtime:3.1.9 +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-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 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.48.1 +com.google.dagger:dagger:2.48.1 +com.google.dagger:hilt-android:2.48.1 +com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 +com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 +com.google.firebase:firebase-encoders-json:18.0.1 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +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-perf:20.5.0 +com.google.firebase:firebase-sessions:1.1.0 +com.google.firebase:protolite-well-known-types:18.0.0 +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:3.24.4 +com.google.protobuf:protobuf-kotlin-lite:3.24.4 +com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +com.squareup.retrofit2:retrofit:2.9.0 +io.coil-kt:coil-base:2.4.0 +io.coil-kt:coil-compose-base:2.4.0 +io.coil-kt:coil-compose:2.4.0 +io.coil-kt:coil-svg:2.4.0 +io.coil-kt:coil:2.4.0 +io.github.aakira:napier-android:1.4.1 +io.github.aakira:napier:1.4.1 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib:1.9.10 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains:annotations:23.0.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9ee708385..5ae00c3d3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,6 +31,7 @@ androidxUiAutomator = "2.2.0" androidxWindowManager = "1.1.0" androidxWork = "2.9.0-rc01" coil = "2.4.0" +dependencyGuard = "0.4.3" firebaseBom = "32.4.0" firebaseCrashlyticsPlugin = "2.9.9" firebasePerfPlugin = "1.4.2" @@ -165,6 +166,7 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secrets" } +dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" } # Plugins defined by this project nowinandroid-android-application = { id = "nowinandroid.android.application", version = "unspecified" } From 26e8b7d7da6269ebeb787d5b07499feb50251609 Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Tue, 14 Nov 2023 09:56:10 -0800 Subject: [PATCH 07/43] Fix alphabetic ordering Change-Id: Ie0779252d969b80b8c8bcea6d58c13132e20c13c --- 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 5ae00c3d3..529029bb2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -156,6 +156,7 @@ android-application = { id = "com.android.application", version.ref = "androidGr android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "androidxMacroBenchmark"} +dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin" } firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebasePerfPlugin" } gms = { id = "com.google.gms.google-services", version.ref = "gmsPlugin" } @@ -166,7 +167,6 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } protobuf = { id = "com.google.protobuf", version.ref = "protobufPlugin" } roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" } secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secrets" } -dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" } # Plugins defined by this project nowinandroid-android-application = { id = "nowinandroid.android.application", version = "unspecified" } From b84c283d17de45b257d914b9b39b6df8e5cb36d2 Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Thu, 16 Nov 2023 10:58:30 -0800 Subject: [PATCH 08/43] Remove empty file Change-Id: Iaed9b4a68c45c1f52a2311d79b34569d20aaea62 --- app-nia-catalog/dependencies/releaseRuntimeClasspath.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app-nia-catalog/dependencies/releaseRuntimeClasspath.txt diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt deleted file mode 100644 index e69de29bb..000000000 From 014e2a22f16877f5d0c579c87e7c03b706c0098c Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Mon, 20 Nov 2023 10:28:35 -0800 Subject: [PATCH 09/43] Only record prodReleaseRuntimeClasspath configuration Change-Id: I129fc4839ac2b4d5624c91cd25b47efba8847f44 --- app/build.gradle.kts | 7 - .../demoDebugRuntimeClasspath.txt | 218 ------------------ .../demoReleaseRuntimeClasspath.txt | 211 ----------------- .../prodDebugRuntimeClasspath.txt | 218 ------------------ 4 files changed, 654 deletions(-) delete mode 100644 app/dependencies/demoDebugRuntimeClasspath.txt delete mode 100644 app/dependencies/demoReleaseRuntimeClasspath.txt delete mode 100644 app/dependencies/prodDebugRuntimeClasspath.txt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 319b2b4b6..755b4c7fe 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,12 +147,5 @@ baselineProfile { } dependencyGuard { - - configuration("demoDebugRuntimeClasspath") - - configuration("demoReleaseRuntimeClasspath") - - configuration("prodDebugRuntimeClasspath") - configuration("prodReleaseRuntimeClasspath") } diff --git a/app/dependencies/demoDebugRuntimeClasspath.txt b/app/dependencies/demoDebugRuntimeClasspath.txt deleted file mode 100644 index 511aeaa02..000000000 --- a/app/dependencies/demoDebugRuntimeClasspath.txt +++ /dev/null @@ -1,218 +0,0 @@ -androidx.activity:activity-compose:1.8.0 -androidx.activity:activity-ktx:1.8.0 -androidx.activity:activity:1.8.0 -androidx.annotation:annotation-experimental:1.3.0 -androidx.annotation:annotation-jvm:1.6.0 -androidx.annotation:annotation:1.6.0 -androidx.appcompat:appcompat-resources:1.6.1 -androidx.appcompat:appcompat:1.6.1 -androidx.arch.core:core-common:2.2.0 -androidx.arch.core:core-runtime:2.2.0 -androidx.autofill:autofill:1.0.0 -androidx.browser:browser:1.6.0 -androidx.collection:collection-ktx:1.1.0 -androidx.collection:collection:1.2.0 -androidx.compose.animation:animation-android:1.5.4 -androidx.compose.animation:animation-core-android:1.5.4 -androidx.compose.animation:animation-core:1.5.4 -androidx.compose.animation:animation:1.5.4 -androidx.compose.foundation:foundation-android:1.5.4 -androidx.compose.foundation:foundation-layout-android:1.5.4 -androidx.compose.foundation:foundation-layout:1.5.4 -androidx.compose.foundation:foundation:1.5.4 -androidx.compose.material3:material3-window-size-class:1.1.2 -androidx.compose.material3:material3:1.1.2 -androidx.compose.material:material-android:1.5.4 -androidx.compose.material:material-icons-core-android:1.5.4 -androidx.compose.material:material-icons-core:1.5.4 -androidx.compose.material:material-icons-extended-android:1.5.4 -androidx.compose.material:material-icons-extended:1.5.4 -androidx.compose.material:material-ripple-android:1.5.4 -androidx.compose.material:material-ripple:1.5.4 -androidx.compose.material:material:1.5.4 -androidx.compose.runtime:runtime-android:1.5.4 -androidx.compose.runtime:runtime-livedata:1.5.4 -androidx.compose.runtime:runtime-saveable-android:1.5.4 -androidx.compose.runtime:runtime-saveable:1.5.4 -androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 -androidx.compose.runtime:runtime:1.5.4 -androidx.compose.ui:ui-android:1.5.4 -androidx.compose.ui:ui-geometry-android:1.5.4 -androidx.compose.ui:ui-geometry:1.5.4 -androidx.compose.ui:ui-graphics-android:1.5.4 -androidx.compose.ui:ui-graphics:1.5.4 -androidx.compose.ui:ui-test-manifest:1.5.4 -androidx.compose.ui:ui-text-android:1.5.4 -androidx.compose.ui:ui-text:1.5.4 -androidx.compose.ui:ui-tooling-android:1.5.4 -androidx.compose.ui:ui-tooling-data-android:1.5.4 -androidx.compose.ui:ui-tooling-data:1.5.4 -androidx.compose.ui:ui-tooling-preview-android:1.5.4 -androidx.compose.ui:ui-tooling-preview:1.5.4 -androidx.compose.ui:ui-tooling:1.5.4 -androidx.compose.ui:ui-unit-android:1.5.4 -androidx.compose.ui:ui-unit:1.5.4 -androidx.compose.ui:ui-util-android:1.5.4 -androidx.compose.ui:ui-util:1.5.4 -androidx.compose.ui:ui:1.5.4 -androidx.compose:compose-bom:2023.10.01 -androidx.concurrent:concurrent-futures:1.1.0 -androidx.core:core-ktx:1.12.0 -androidx.core:core-splashscreen:1.0.1 -androidx.core:core:1.12.0 -androidx.cursoradapter:cursoradapter:1.0.0 -androidx.customview:customview-poolingcontainer:1.0.0 -androidx.customview:customview:1.0.0 -androidx.datastore:datastore-core:1.0.0 -androidx.datastore:datastore-preferences-core:1.0.0 -androidx.datastore:datastore-preferences:1.0.0 -androidx.datastore:datastore:1.0.0 -androidx.documentfile:documentfile:1.0.0 -androidx.drawerlayout:drawerlayout:1.0.0 -androidx.emoji2:emoji2-views-helper:1.4.0 -androidx.emoji2:emoji2:1.4.0 -androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment:1.5.1 -androidx.hilt:hilt-common:1.1.0 -androidx.hilt:hilt-navigation-compose:1.0.0 -androidx.hilt:hilt-navigation:1.0.0 -androidx.hilt:hilt-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.6.2 -androidx.lifecycle:lifecycle-common:2.6.2 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata-core:2.6.2 -androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata:2.6.2 -androidx.lifecycle:lifecycle-process:2.6.2 -androidx.lifecycle:lifecycle-runtime-compose:2.6.2 -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 -androidx.lifecycle:lifecycle-runtime:2.6.2 -androidx.lifecycle:lifecycle-service:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 -androidx.lifecycle:lifecycle-viewmodel:2.6.2 -androidx.loader:loader:1.0.0 -androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 -androidx.metrics:metrics-performance:1.0.0-alpha04 -androidx.navigation:navigation-common-ktx:2.7.4 -androidx.navigation:navigation-common:2.7.4 -androidx.navigation:navigation-compose:2.7.4 -androidx.navigation:navigation-runtime-ktx:2.7.4 -androidx.navigation:navigation-runtime:2.7.4 -androidx.print:print:1.0.0 -androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 -androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 -androidx.profileinstaller:profileinstaller:1.3.1 -androidx.resourceinspection:resourceinspection-annotation:1.0.1 -androidx.room:room-common:2.6.0 -androidx.room:room-ktx:2.6.0 -androidx.room:room-runtime:2.6.0 -androidx.savedstate:savedstate-ktx:1.2.1 -androidx.savedstate:savedstate:1.2.1 -androidx.sqlite:sqlite-framework:2.4.0 -androidx.sqlite:sqlite:2.4.0 -androidx.startup:startup-runtime:1.1.1 -androidx.tracing:tracing-ktx:1.2.0-alpha02 -androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 -androidx.tracing:tracing-perfetto:1.0.0-alpha11 -androidx.tracing:tracing:1.2.0-alpha02 -androidx.vectordrawable:vectordrawable-animated:1.1.0 -androidx.vectordrawable:vectordrawable:1.1.0 -androidx.versionedparcelable:versionedparcelable:1.1.1 -androidx.viewpager:viewpager:1.0.0 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window:1.1.0 -androidx.work:work-runtime-ktx:2.9.0-rc01 -androidx.work:work-runtime:2.9.0-rc01 -com.caverock:androidsvg-aar:1.4 -com.google.accompanist:accompanist-drawablepainter:0.30.1 -com.google.accompanist:accompanist-permissions:0.32.0 -com.google.android.datatransport:transport-api:3.0.0 -com.google.android.datatransport:transport-backend-cct:3.1.9 -com.google.android.datatransport:transport-runtime:3.1.9 -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-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 -com.google.code.findbugs:jsr305:3.0.2 -com.google.dagger:dagger-lint-aar:2.48.1 -com.google.dagger:dagger:2.48.1 -com.google.dagger:hilt-android:2.48.1 -com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 -com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 -com.google.firebase:firebase-encoders-json:18.0.1 -com.google.firebase:firebase-encoders-proto:16.0.0 -com.google.firebase:firebase-encoders:17.0.0 -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-perf:20.5.0 -com.google.firebase:firebase-sessions:1.1.0 -com.google.firebase:protolite-well-known-types:18.0.0 -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:3.24.4 -com.google.protobuf:protobuf-kotlin-lite:3.24.4 -com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 -com.squareup.okhttp3:logging-interceptor:4.12.0 -com.squareup.okhttp3:okhttp:4.12.0 -com.squareup.okio:okio-jvm:3.6.0 -com.squareup.okio:okio:3.6.0 -com.squareup.retrofit2:retrofit:2.9.0 -io.coil-kt:coil-base:2.4.0 -io.coil-kt:coil-compose-base:2.4.0 -io.coil-kt:coil-compose:2.4.0 -io.coil-kt:coil-svg:2.4.0 -io.coil-kt:coil:2.4.0 -io.github.aakira:napier-android-debug:1.4.1 -io.github.aakira:napier:1.4.1 -javax.inject:javax.inject:1 -org.checkerframework:checker-qual:3.12.0 -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib:1.9.10 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 -org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 -org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 -org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 -org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/demoReleaseRuntimeClasspath.txt b/app/dependencies/demoReleaseRuntimeClasspath.txt deleted file mode 100644 index 8123217b9..000000000 --- a/app/dependencies/demoReleaseRuntimeClasspath.txt +++ /dev/null @@ -1,211 +0,0 @@ -androidx.activity:activity-compose:1.8.0 -androidx.activity:activity-ktx:1.8.0 -androidx.activity:activity:1.8.0 -androidx.annotation:annotation-experimental:1.3.0 -androidx.annotation:annotation-jvm:1.6.0 -androidx.annotation:annotation:1.6.0 -androidx.appcompat:appcompat-resources:1.6.1 -androidx.appcompat:appcompat:1.6.1 -androidx.arch.core:core-common:2.2.0 -androidx.arch.core:core-runtime:2.2.0 -androidx.autofill:autofill:1.0.0 -androidx.browser:browser:1.6.0 -androidx.collection:collection-ktx:1.1.0 -androidx.collection:collection:1.2.0 -androidx.compose.animation:animation-android:1.5.4 -androidx.compose.animation:animation-core-android:1.5.4 -androidx.compose.animation:animation-core:1.5.4 -androidx.compose.animation:animation:1.5.4 -androidx.compose.foundation:foundation-android:1.5.4 -androidx.compose.foundation:foundation-layout-android:1.5.4 -androidx.compose.foundation:foundation-layout:1.5.4 -androidx.compose.foundation:foundation:1.5.4 -androidx.compose.material3:material3-window-size-class:1.1.2 -androidx.compose.material3:material3:1.1.2 -androidx.compose.material:material-icons-core-android:1.5.4 -androidx.compose.material:material-icons-core:1.5.4 -androidx.compose.material:material-icons-extended-android:1.5.4 -androidx.compose.material:material-icons-extended:1.5.4 -androidx.compose.material:material-ripple-android:1.5.4 -androidx.compose.material:material-ripple:1.5.4 -androidx.compose.runtime:runtime-android:1.5.4 -androidx.compose.runtime:runtime-livedata:1.5.4 -androidx.compose.runtime:runtime-saveable-android:1.5.4 -androidx.compose.runtime:runtime-saveable:1.5.4 -androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 -androidx.compose.runtime:runtime:1.5.4 -androidx.compose.ui:ui-android:1.5.4 -androidx.compose.ui:ui-geometry-android:1.5.4 -androidx.compose.ui:ui-geometry:1.5.4 -androidx.compose.ui:ui-graphics-android:1.5.4 -androidx.compose.ui:ui-graphics:1.5.4 -androidx.compose.ui:ui-text-android:1.5.4 -androidx.compose.ui:ui-text:1.5.4 -androidx.compose.ui:ui-tooling-preview-android:1.5.4 -androidx.compose.ui:ui-tooling-preview:1.5.4 -androidx.compose.ui:ui-unit-android:1.5.4 -androidx.compose.ui:ui-unit:1.5.4 -androidx.compose.ui:ui-util-android:1.5.4 -androidx.compose.ui:ui-util:1.5.4 -androidx.compose.ui:ui:1.5.4 -androidx.compose:compose-bom:2023.10.01 -androidx.concurrent:concurrent-futures:1.1.0 -androidx.core:core-ktx:1.12.0 -androidx.core:core-splashscreen:1.0.1 -androidx.core:core:1.12.0 -androidx.cursoradapter:cursoradapter:1.0.0 -androidx.customview:customview-poolingcontainer:1.0.0 -androidx.customview:customview:1.0.0 -androidx.datastore:datastore-core:1.0.0 -androidx.datastore:datastore-preferences-core:1.0.0 -androidx.datastore:datastore-preferences:1.0.0 -androidx.datastore:datastore:1.0.0 -androidx.documentfile:documentfile:1.0.0 -androidx.drawerlayout:drawerlayout:1.0.0 -androidx.emoji2:emoji2-views-helper:1.4.0 -androidx.emoji2:emoji2:1.4.0 -androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment:1.5.1 -androidx.hilt:hilt-common:1.1.0 -androidx.hilt:hilt-navigation-compose:1.0.0 -androidx.hilt:hilt-navigation:1.0.0 -androidx.hilt:hilt-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.6.2 -androidx.lifecycle:lifecycle-common:2.6.2 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata-core:2.6.2 -androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata:2.6.2 -androidx.lifecycle:lifecycle-process:2.6.2 -androidx.lifecycle:lifecycle-runtime-compose:2.6.2 -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 -androidx.lifecycle:lifecycle-runtime:2.6.2 -androidx.lifecycle:lifecycle-service:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 -androidx.lifecycle:lifecycle-viewmodel:2.6.2 -androidx.loader:loader:1.0.0 -androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 -androidx.metrics:metrics-performance:1.0.0-alpha04 -androidx.navigation:navigation-common-ktx:2.7.4 -androidx.navigation:navigation-common:2.7.4 -androidx.navigation:navigation-compose:2.7.4 -androidx.navigation:navigation-runtime-ktx:2.7.4 -androidx.navigation:navigation-runtime:2.7.4 -androidx.print:print:1.0.0 -androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 -androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 -androidx.profileinstaller:profileinstaller:1.3.1 -androidx.resourceinspection:resourceinspection-annotation:1.0.1 -androidx.room:room-common:2.6.0 -androidx.room:room-ktx:2.6.0 -androidx.room:room-runtime:2.6.0 -androidx.savedstate:savedstate-ktx:1.2.1 -androidx.savedstate:savedstate:1.2.1 -androidx.sqlite:sqlite-framework:2.4.0 -androidx.sqlite:sqlite:2.4.0 -androidx.startup:startup-runtime:1.1.1 -androidx.tracing:tracing-ktx:1.2.0-alpha02 -androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 -androidx.tracing:tracing-perfetto:1.0.0-alpha11 -androidx.tracing:tracing:1.2.0-alpha02 -androidx.vectordrawable:vectordrawable-animated:1.1.0 -androidx.vectordrawable:vectordrawable:1.1.0 -androidx.versionedparcelable:versionedparcelable:1.1.1 -androidx.viewpager:viewpager:1.0.0 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window:1.1.0 -androidx.work:work-runtime-ktx:2.9.0-rc01 -androidx.work:work-runtime:2.9.0-rc01 -com.caverock:androidsvg-aar:1.4 -com.google.accompanist:accompanist-drawablepainter:0.30.1 -com.google.accompanist:accompanist-permissions:0.32.0 -com.google.android.datatransport:transport-api:3.0.0 -com.google.android.datatransport:transport-backend-cct:3.1.9 -com.google.android.datatransport:transport-runtime:3.1.9 -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-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 -com.google.code.findbugs:jsr305:3.0.2 -com.google.dagger:dagger-lint-aar:2.48.1 -com.google.dagger:dagger:2.48.1 -com.google.dagger:hilt-android:2.48.1 -com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 -com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 -com.google.firebase:firebase-encoders-json:18.0.1 -com.google.firebase:firebase-encoders-proto:16.0.0 -com.google.firebase:firebase-encoders:17.0.0 -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-perf:20.5.0 -com.google.firebase:firebase-sessions:1.1.0 -com.google.firebase:protolite-well-known-types:18.0.0 -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:3.24.4 -com.google.protobuf:protobuf-kotlin-lite:3.24.4 -com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 -com.squareup.okhttp3:logging-interceptor:4.12.0 -com.squareup.okhttp3:okhttp:4.12.0 -com.squareup.okio:okio-jvm:3.6.0 -com.squareup.okio:okio:3.6.0 -com.squareup.retrofit2:retrofit:2.9.0 -io.coil-kt:coil-base:2.4.0 -io.coil-kt:coil-compose-base:2.4.0 -io.coil-kt:coil-compose:2.4.0 -io.coil-kt:coil-svg:2.4.0 -io.coil-kt:coil:2.4.0 -io.github.aakira:napier-android:1.4.1 -io.github.aakira:napier:1.4.1 -javax.inject:javax.inject:1 -org.checkerframework:checker-qual:3.12.0 -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib:1.9.10 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 -org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 -org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 -org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 -org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/prodDebugRuntimeClasspath.txt b/app/dependencies/prodDebugRuntimeClasspath.txt deleted file mode 100644 index 511aeaa02..000000000 --- a/app/dependencies/prodDebugRuntimeClasspath.txt +++ /dev/null @@ -1,218 +0,0 @@ -androidx.activity:activity-compose:1.8.0 -androidx.activity:activity-ktx:1.8.0 -androidx.activity:activity:1.8.0 -androidx.annotation:annotation-experimental:1.3.0 -androidx.annotation:annotation-jvm:1.6.0 -androidx.annotation:annotation:1.6.0 -androidx.appcompat:appcompat-resources:1.6.1 -androidx.appcompat:appcompat:1.6.1 -androidx.arch.core:core-common:2.2.0 -androidx.arch.core:core-runtime:2.2.0 -androidx.autofill:autofill:1.0.0 -androidx.browser:browser:1.6.0 -androidx.collection:collection-ktx:1.1.0 -androidx.collection:collection:1.2.0 -androidx.compose.animation:animation-android:1.5.4 -androidx.compose.animation:animation-core-android:1.5.4 -androidx.compose.animation:animation-core:1.5.4 -androidx.compose.animation:animation:1.5.4 -androidx.compose.foundation:foundation-android:1.5.4 -androidx.compose.foundation:foundation-layout-android:1.5.4 -androidx.compose.foundation:foundation-layout:1.5.4 -androidx.compose.foundation:foundation:1.5.4 -androidx.compose.material3:material3-window-size-class:1.1.2 -androidx.compose.material3:material3:1.1.2 -androidx.compose.material:material-android:1.5.4 -androidx.compose.material:material-icons-core-android:1.5.4 -androidx.compose.material:material-icons-core:1.5.4 -androidx.compose.material:material-icons-extended-android:1.5.4 -androidx.compose.material:material-icons-extended:1.5.4 -androidx.compose.material:material-ripple-android:1.5.4 -androidx.compose.material:material-ripple:1.5.4 -androidx.compose.material:material:1.5.4 -androidx.compose.runtime:runtime-android:1.5.4 -androidx.compose.runtime:runtime-livedata:1.5.4 -androidx.compose.runtime:runtime-saveable-android:1.5.4 -androidx.compose.runtime:runtime-saveable:1.5.4 -androidx.compose.runtime:runtime-tracing:1.0.0-alpha03 -androidx.compose.runtime:runtime:1.5.4 -androidx.compose.ui:ui-android:1.5.4 -androidx.compose.ui:ui-geometry-android:1.5.4 -androidx.compose.ui:ui-geometry:1.5.4 -androidx.compose.ui:ui-graphics-android:1.5.4 -androidx.compose.ui:ui-graphics:1.5.4 -androidx.compose.ui:ui-test-manifest:1.5.4 -androidx.compose.ui:ui-text-android:1.5.4 -androidx.compose.ui:ui-text:1.5.4 -androidx.compose.ui:ui-tooling-android:1.5.4 -androidx.compose.ui:ui-tooling-data-android:1.5.4 -androidx.compose.ui:ui-tooling-data:1.5.4 -androidx.compose.ui:ui-tooling-preview-android:1.5.4 -androidx.compose.ui:ui-tooling-preview:1.5.4 -androidx.compose.ui:ui-tooling:1.5.4 -androidx.compose.ui:ui-unit-android:1.5.4 -androidx.compose.ui:ui-unit:1.5.4 -androidx.compose.ui:ui-util-android:1.5.4 -androidx.compose.ui:ui-util:1.5.4 -androidx.compose.ui:ui:1.5.4 -androidx.compose:compose-bom:2023.10.01 -androidx.concurrent:concurrent-futures:1.1.0 -androidx.core:core-ktx:1.12.0 -androidx.core:core-splashscreen:1.0.1 -androidx.core:core:1.12.0 -androidx.cursoradapter:cursoradapter:1.0.0 -androidx.customview:customview-poolingcontainer:1.0.0 -androidx.customview:customview:1.0.0 -androidx.datastore:datastore-core:1.0.0 -androidx.datastore:datastore-preferences-core:1.0.0 -androidx.datastore:datastore-preferences:1.0.0 -androidx.datastore:datastore:1.0.0 -androidx.documentfile:documentfile:1.0.0 -androidx.drawerlayout:drawerlayout:1.0.0 -androidx.emoji2:emoji2-views-helper:1.4.0 -androidx.emoji2:emoji2:1.4.0 -androidx.exifinterface:exifinterface:1.3.6 -androidx.fragment:fragment:1.5.1 -androidx.hilt:hilt-common:1.1.0 -androidx.hilt:hilt-navigation-compose:1.0.0 -androidx.hilt:hilt-navigation:1.0.0 -androidx.hilt:hilt-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.6.2 -androidx.lifecycle:lifecycle-common:2.6.2 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata-core:2.6.2 -androidx.lifecycle:lifecycle-livedata-ktx:2.6.2 -androidx.lifecycle:lifecycle-livedata:2.6.2 -androidx.lifecycle:lifecycle-process:2.6.2 -androidx.lifecycle:lifecycle-runtime-compose:2.6.2 -androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 -androidx.lifecycle:lifecycle-runtime:2.6.2 -androidx.lifecycle:lifecycle-service:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 -androidx.lifecycle:lifecycle-viewmodel:2.6.2 -androidx.loader:loader:1.0.0 -androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 -androidx.metrics:metrics-performance:1.0.0-alpha04 -androidx.navigation:navigation-common-ktx:2.7.4 -androidx.navigation:navigation-common:2.7.4 -androidx.navigation:navigation-compose:2.7.4 -androidx.navigation:navigation-runtime-ktx:2.7.4 -androidx.navigation:navigation-runtime:2.7.4 -androidx.print:print:1.0.0 -androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 -androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 -androidx.profileinstaller:profileinstaller:1.3.1 -androidx.resourceinspection:resourceinspection-annotation:1.0.1 -androidx.room:room-common:2.6.0 -androidx.room:room-ktx:2.6.0 -androidx.room:room-runtime:2.6.0 -androidx.savedstate:savedstate-ktx:1.2.1 -androidx.savedstate:savedstate:1.2.1 -androidx.sqlite:sqlite-framework:2.4.0 -androidx.sqlite:sqlite:2.4.0 -androidx.startup:startup-runtime:1.1.1 -androidx.tracing:tracing-ktx:1.2.0-alpha02 -androidx.tracing:tracing-perfetto-common:1.0.0-alpha11 -androidx.tracing:tracing-perfetto:1.0.0-alpha11 -androidx.tracing:tracing:1.2.0-alpha02 -androidx.vectordrawable:vectordrawable-animated:1.1.0 -androidx.vectordrawable:vectordrawable:1.1.0 -androidx.versionedparcelable:versionedparcelable:1.1.1 -androidx.viewpager:viewpager:1.0.0 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window:1.1.0 -androidx.work:work-runtime-ktx:2.9.0-rc01 -androidx.work:work-runtime:2.9.0-rc01 -com.caverock:androidsvg-aar:1.4 -com.google.accompanist:accompanist-drawablepainter:0.30.1 -com.google.accompanist:accompanist-permissions:0.32.0 -com.google.android.datatransport:transport-api:3.0.0 -com.google.android.datatransport:transport-backend-cct:3.1.9 -com.google.android.datatransport:transport-runtime:3.1.9 -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-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 -com.google.code.findbugs:jsr305:3.0.2 -com.google.dagger:dagger-lint-aar:2.48.1 -com.google.dagger:dagger:2.48.1 -com.google.dagger:hilt-android:2.48.1 -com.google.dagger:hilt-core:2.48.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-annotations:16.2.0 -com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.8 -com.google.firebase:firebase-encoders-json:18.0.1 -com.google.firebase:firebase-encoders-proto:16.0.0 -com.google.firebase:firebase-encoders:17.0.0 -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-perf:20.5.0 -com.google.firebase:firebase-sessions:1.1.0 -com.google.firebase:protolite-well-known-types:18.0.0 -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:3.24.4 -com.google.protobuf:protobuf-kotlin-lite:3.24.4 -com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 -com.squareup.okhttp3:logging-interceptor:4.12.0 -com.squareup.okhttp3:okhttp:4.12.0 -com.squareup.okio:okio-jvm:3.6.0 -com.squareup.okio:okio:3.6.0 -com.squareup.retrofit2:retrofit:2.9.0 -io.coil-kt:coil-base:2.4.0 -io.coil-kt:coil-compose-base:2.4.0 -io.coil-kt:coil-compose:2.4.0 -io.coil-kt:coil-svg:2.4.0 -io.coil-kt:coil:2.4.0 -io.github.aakira:napier-android-debug:1.4.1 -io.github.aakira:napier:1.4.1 -javax.inject:javax.inject:1 -org.checkerframework:checker-qual:3.12.0 -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 -org.jetbrains.kotlin:kotlin-stdlib:1.9.10 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 -org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 -org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 -org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 -org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 -org.jetbrains:annotations:23.0.0 From b95c52c26420c509ebf4029ff8c453118ade9e0a Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Mon, 20 Nov 2023 10:29:14 -0800 Subject: [PATCH 10/43] Add dependencyGuard to AndroidApplicationConventionPlugin Change-Id: Ib695ca18512d0ccde4c67e101f09ebbff8897912 --- app/build.gradle.kts | 1 - .../src/main/kotlin/AndroidApplicationConventionPlugin.kt | 5 +++-- build.gradle.kts | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 755b4c7fe..b003c4a54 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,7 +25,6 @@ plugins { alias(libs.plugins.nowinandroid.android.application.firebase) id("com.google.android.gms.oss-licenses-plugin") alias(libs.plugins.baselineprofile) - alias(libs.plugins.dependencyGuard) } android { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index f73ed1478..cd8bcfeb0 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -15,10 +15,10 @@ */ import com.android.build.api.dsl.ApplicationExtension -import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.gradle.BaseExtension import com.google.samples.apps.nowinandroid.configureBadgingTasks +import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configurePrintApksTask import org.gradle.api.Plugin @@ -33,6 +33,7 @@ class AndroidApplicationConventionPlugin : Plugin { apply("com.android.application") apply("org.jetbrains.kotlin.android") apply("nowinandroid.android.lint") + apply("com.dropbox.dependency-guard") } extensions.configure { @@ -47,4 +48,4 @@ class AndroidApplicationConventionPlugin : Plugin { } } -} \ No newline at end of file +} diff --git a/build.gradle.kts b/build.gradle.kts index 7b54f9058..a2c39f493 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,7 @@ plugins { alias(libs.plugins.baselineprofile) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.dependencyGuard) apply false alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.firebase.perf) apply false alias(libs.plugins.gms) apply false From c165d91fd76fa3b79c4a55f3a6b4796358826919 Mon Sep 17 00:00:00 2001 From: Jonathan Koren Date: Mon, 20 Nov 2023 10:55:55 -0800 Subject: [PATCH 11/43] Record dependencies for catalog releaseRuntimeClasspath Change-Id: Id74cc7f372498c4cea3fe221230d6042bfc10478 --- app-nia-catalog/build.gradle.kts | 4 + .../dependencies/releaseRuntimeClasspath.txt | 167 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 app-nia-catalog/dependencies/releaseRuntimeClasspath.txt diff --git a/app-nia-catalog/build.gradle.kts b/app-nia-catalog/build.gradle.kts index a90da1604..e02f6bc0b 100644 --- a/app-nia-catalog/build.gradle.kts +++ b/app-nia-catalog/build.gradle.kts @@ -69,3 +69,7 @@ dependencies { implementation(projects.core.ui) implementation(libs.androidx.activity.compose) } + +dependencyGuard { + configuration("releaseRuntimeClasspath") +} diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt new file mode 100644 index 000000000..786b15d57 --- /dev/null +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -0,0 +1,167 @@ +androidx.activity:activity-compose:1.8.0 +androidx.activity:activity-ktx:1.8.0 +androidx.activity:activity:1.8.0 +androidx.annotation:annotation-experimental:1.3.0 +androidx.annotation:annotation-jvm:1.6.0 +androidx.annotation:annotation:1.6.0 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.6.0 +androidx.collection:collection:1.2.0 +androidx.compose.animation:animation-android:1.5.4 +androidx.compose.animation:animation-core-android:1.5.4 +androidx.compose.animation:animation-core:1.5.4 +androidx.compose.animation:animation:1.5.4 +androidx.compose.foundation:foundation-android:1.5.4 +androidx.compose.foundation:foundation-layout-android:1.5.4 +androidx.compose.foundation:foundation-layout:1.5.4 +androidx.compose.foundation:foundation:1.5.4 +androidx.compose.material3:material3:1.1.2 +androidx.compose.material:material-icons-core-android:1.5.4 +androidx.compose.material:material-icons-core:1.5.4 +androidx.compose.material:material-icons-extended-android:1.5.4 +androidx.compose.material:material-icons-extended:1.5.4 +androidx.compose.material:material-ripple-android:1.5.4 +androidx.compose.material:material-ripple:1.5.4 +androidx.compose.runtime:runtime-android:1.5.4 +androidx.compose.runtime:runtime-livedata:1.5.4 +androidx.compose.runtime:runtime-saveable-android:1.5.4 +androidx.compose.runtime:runtime-saveable:1.5.4 +androidx.compose.runtime:runtime:1.5.4 +androidx.compose.ui:ui-android:1.5.4 +androidx.compose.ui:ui-geometry-android:1.5.4 +androidx.compose.ui:ui-geometry:1.5.4 +androidx.compose.ui:ui-graphics-android:1.5.4 +androidx.compose.ui:ui-graphics:1.5.4 +androidx.compose.ui:ui-text-android:1.5.4 +androidx.compose.ui:ui-text:1.5.4 +androidx.compose.ui:ui-tooling-preview-android:1.5.4 +androidx.compose.ui:ui-tooling-preview:1.5.4 +androidx.compose.ui:ui-unit-android:1.5.4 +androidx.compose.ui:ui-unit:1.5.4 +androidx.compose.ui:ui-util-android:1.5.4 +androidx.compose.ui:ui-util:1.5.4 +androidx.compose.ui:ui:1.5.4 +androidx.compose:compose-bom:2023.10.01 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.12.0 +androidx.core:core:1.12.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-core:1.0.0 +androidx.datastore:datastore:1.0.0 +androidx.documentfile:documentfile:1.0.0 +androidx.emoji2:emoji2:1.4.0 +androidx.exifinterface:exifinterface:1.3.6 +androidx.fragment:fragment:1.5.1 +androidx.interpolator:interpolator:1.0.0 +androidx.legacy:legacy-support-core-utils:1.0.0 +androidx.lifecycle:lifecycle-common-java8:2.6.1 +androidx.lifecycle:lifecycle-common:2.6.1 +androidx.lifecycle:lifecycle-livedata-core:2.6.1 +androidx.lifecycle:lifecycle-livedata:2.6.1 +androidx.lifecycle:lifecycle-process:2.6.1 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.1 +androidx.lifecycle:lifecycle-runtime:2.6.1 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 +androidx.lifecycle:lifecycle-viewmodel:2.6.1 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-alpha04 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.room:room-common:2.6.0 +androidx.room:room-ktx:2.6.0 +androidx.room:room-runtime:2.6.0 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.1.0 +androidx.tracing:tracing:1.1.0 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.android.datatransport:transport-api:3.0.0 +com.google.android.datatransport:transport-backend-cct:3.1.8 +com.google.android.datatransport:transport-runtime:3.1.8 +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-stats:17.0.2 +com.google.android.gms:play-services-tasks:18.0.2 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.48.1 +com.google.dagger:dagger:2.48.1 +com.google.dagger:hilt-android:2.48.1 +com.google.dagger:hilt-core:2.48.1 +com.google.errorprone:error_prone_annotations:2.11.0 +com.google.firebase:firebase-analytics-ktx:21.4.0 +com.google.firebase:firebase-analytics:21.4.0 +com.google.firebase:firebase-annotations:16.2.0 +com.google.firebase:firebase-bom:32.4.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-datatransport:18.1.7 +com.google.firebase:firebase-encoders-json:18.0.0 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +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.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:3.24.4 +com.google.protobuf:protobuf-kotlin-lite:3.24.4 +com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +com.squareup.retrofit2:retrofit:2.9.0 +io.coil-kt:coil-base:2.4.0 +io.coil-kt:coil-compose-base:2.4.0 +io.coil-kt:coil-compose:2.4.0 +io.coil-kt:coil-svg:2.4.0 +io.coil-kt:coil:2.4.0 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib:1.9.10 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.0 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0 +org.jetbrains:annotations:23.0.0 From a1426600489672040d1afabc508a5f9b5cb374e3 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Thu, 30 Nov 2023 17:09:06 +1100 Subject: [PATCH 12/43] Move scrollbar changes out of composition --- .../component/scrollbar/AppScrollbars.kt | 5 +- .../component/scrollbar/Scrollbar.kt | 185 ++++++++++-------- .../component/scrollbar/ScrollbarExt.kt | 13 +- 3 files changed, 114 insertions(+), 89 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index fa913cb27..beece9071 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -38,6 +38,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -66,7 +67,7 @@ private const val SCROLLBAR_INACTIVE_TO_DORMANT_TIME_IN_MS = 2_000L @Composable fun ScrollableState.DraggableScrollbar( modifier: Modifier = Modifier, - state: ScrollbarState, + state: State, orientation: Orientation, onThumbMoved: (Float) -> Unit, ) { @@ -96,7 +97,7 @@ fun ScrollableState.DraggableScrollbar( @Composable fun ScrollableState.DecorativeScrollbar( modifier: Modifier = Modifier, - state: ScrollbarState, + state: State, orientation: Orientation, ) { val interactionSource = remember { MutableInteractionSource() } diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index c1281a4c0..b147ac2d2 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -16,8 +16,9 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar -import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.Orientation.Horizontal +import androidx.compose.foundation.gestures.Orientation.Vertical import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.gestures.detectVerticalDragGestures @@ -28,31 +29,30 @@ import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.max import androidx.compose.ui.util.packFloats import androidx.compose.ui.util.unpackFloat1 import androidx.compose.ui.util.unpackFloat2 @@ -61,6 +61,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.withTimeout import kotlin.math.max import kotlin.math.min +import kotlin.math.roundToInt /** * The delay between scrolls when a user long presses on the scrollbar track to initiate a scroll @@ -191,7 +192,7 @@ internal fun Orientation.valueOf(intOffset: IntOffset) = when (this) { fun Scrollbar( modifier: Modifier = Modifier, orientation: Orientation, - state: ScrollbarState, + state: State, minThumbSize: Dp = 40.dp, interactionSource: MutableInteractionSource? = null, thumb: @Composable () -> Unit, @@ -210,23 +211,6 @@ fun Scrollbar( var track by remember { mutableStateOf(ScrollbarTrack(packedValue = 0)) } - val thumbTravelPercent = when { - interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent - else -> interactionThumbTravelPercent - } - val thumbSizePx = max( - a = state.thumbSizePercent * track.size, - b = with(localDensity) { minThumbSize.toPx() }, - ) - val thumbSizeDp by animateDpAsState( - targetValue = with(localDensity) { thumbSizePx.toDp() }, - label = "scrollbar thumb size", - ) - val thumbMovedPx = min( - a = track.size * thumbTravelPercent, - b = track.size - thumbSizePx, - ) - // scrollbar track container Box( modifier = modifier @@ -320,30 +304,67 @@ fun Scrollbar( } }, ) { - val scrollbarThumbMovedDp = max( - a = with(localDensity) { thumbMovedPx.toDp() }, - b = 0.dp, - ) // scrollbar thumb container Box( modifier = Modifier .align(Alignment.TopStart) - .run { - when (orientation) { - Orientation.Horizontal -> width(thumbSizeDp) - Orientation.Vertical -> height(thumbSizeDp) + .layout { measurable, constraints -> + val state = state.value + val thumbSizePx = max( + a = state.thumbSizePercent * track.size, + b = minThumbSize.toPx(), + ) + + val thumbTravelPercent = when { + interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent + else -> interactionThumbTravelPercent + } + + val thumbMovedPx = min( + a = track.size * thumbTravelPercent, + b = track.size - thumbSizePx, + ) + + val scrollbarThumbMovedDp = max( + a = thumbMovedPx, + b = 0f, + ) + + val y = when (orientation) { + Horizontal -> 0 + Vertical -> scrollbarThumbMovedDp + } + val x = when (orientation) { + Horizontal -> scrollbarThumbMovedDp + Vertical -> 0 + } + + val offset = IntOffset(x.toInt(), y.toInt()) + + val constrained = when (orientation) { + Horizontal -> { + Constraints( + minWidth = thumbSizePx.roundToInt(), + maxWidth = thumbSizePx.roundToInt(), + minHeight = constraints.minHeight, + maxHeight = constraints.maxHeight + ) + } + Vertical -> { + Constraints( + minWidth = constraints.minWidth, + maxWidth = constraints.maxWidth, + minHeight = thumbSizePx.roundToInt(), + maxHeight = thumbSizePx.roundToInt() + ) + } + } + + val placeable = measurable.measure(constrained) + layout(placeable.width, placeable.height) { + placeable.place(offset) } } - .offset( - y = when (orientation) { - Orientation.Horizontal -> 0.dp - Orientation.Vertical -> scrollbarThumbMovedDp - }, - x = when (orientation) { - Orientation.Horizontal -> scrollbarThumbMovedDp - Orientation.Vertical -> 0.dp - }, - ), ) { thumb() } @@ -351,53 +372,55 @@ fun Scrollbar( if (onThumbMoved == null) return - // State that will be read inside the effects that follow - // but will not cause re-triggering of them - val updatedState by rememberUpdatedState(state) - // Process presses - LaunchedEffect(pressedOffset) { - // Press ended, reset interactionThumbTravelPercent - if (pressedOffset == Offset.Unspecified) { - interactionThumbTravelPercent = Float.NaN - return@LaunchedEffect - } + LaunchedEffect(Unit) { + snapshotFlow { pressedOffset }.collect { pressedOffset -> + // Press ended, reset interactionThumbTravelPercent + if (pressedOffset == Offset.Unspecified) { + interactionThumbTravelPercent = Float.NaN + return@collect + } - var currentThumbMovedPercent = updatedState.thumbMovedPercent - val destinationThumbMovedPercent = track.thumbPosition( - dimension = orientation.valueOf(pressedOffset), - ) - val isPositive = currentThumbMovedPercent < destinationThumbMovedPercent - val delta = SCROLLBAR_PRESS_DELTA_PCT * if (isPositive) 1f else -1f - - while (currentThumbMovedPercent != destinationThumbMovedPercent) { - currentThumbMovedPercent = when { - isPositive -> min( - a = currentThumbMovedPercent + delta, - b = destinationThumbMovedPercent, - ) + var currentThumbMovedPercent = state.value.thumbMovedPercent + val destinationThumbMovedPercent = track.thumbPosition( + dimension = orientation.valueOf(pressedOffset), + ) + val isPositive = currentThumbMovedPercent < destinationThumbMovedPercent + val delta = SCROLLBAR_PRESS_DELTA_PCT * if (isPositive) 1f else -1f + + while (currentThumbMovedPercent != destinationThumbMovedPercent) { + currentThumbMovedPercent = when { + isPositive -> min( + a = currentThumbMovedPercent + delta, + b = destinationThumbMovedPercent, + ) - else -> max( - a = currentThumbMovedPercent + delta, - b = destinationThumbMovedPercent, - ) + else -> max( + a = currentThumbMovedPercent + delta, + b = destinationThumbMovedPercent, + ) + } + onThumbMoved(currentThumbMovedPercent) + interactionThumbTravelPercent = currentThumbMovedPercent + delay(SCROLLBAR_PRESS_DELAY_MS) } - onThumbMoved(currentThumbMovedPercent) - interactionThumbTravelPercent = currentThumbMovedPercent - delay(SCROLLBAR_PRESS_DELAY_MS) + + } } // Process drags - LaunchedEffect(draggedOffset) { - if (draggedOffset == Offset.Unspecified) { - interactionThumbTravelPercent = Float.NaN - return@LaunchedEffect + LaunchedEffect(Unit) { + snapshotFlow { draggedOffset }.collect { draggedOffset -> + if (draggedOffset == Offset.Unspecified) { + interactionThumbTravelPercent = Float.NaN + return@collect + } + val currentTravel = track.thumbPosition( + dimension = orientation.valueOf(draggedOffset), + ) + onThumbMoved(currentTravel) + interactionThumbTravelPercent = currentTravel } - val currentTravel = track.thumbPosition( - dimension = orientation.valueOf(draggedOffset), - ) - onThumbMoved(currentTravel) - interactionThumbTravelPercent = currentTravel } } diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt index 7a0282bf7..67abce1b7 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt @@ -24,6 +24,7 @@ import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemInfo import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState import androidx.compose.runtime.Composable +import androidx.compose.runtime.State import androidx.compose.runtime.produceState import androidx.compose.runtime.snapshotFlow import kotlinx.coroutines.flow.distinctUntilChanged @@ -40,7 +41,7 @@ import kotlin.math.min fun LazyListState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyListItemInfo) -> Int = LazyListItemInfo::index, -): ScrollbarState = produceState( +): State = produceState( initialValue = ScrollbarState.FULL, key1 = this, key2 = itemsAvailable, @@ -91,7 +92,7 @@ fun LazyListState.scrollbarState( .filterNotNull() .distinctUntilChanged() .collect { value = it } -}.value +} /** * Calculates a [ScrollbarState] driven by the changes in a [LazyGridState] @@ -103,7 +104,7 @@ fun LazyListState.scrollbarState( fun LazyGridState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyGridItemInfo) -> Int = LazyGridItemInfo::index, -): ScrollbarState = produceState( +): State = produceState( initialValue = ScrollbarState.FULL, key1 = this, key2 = itemsAvailable, @@ -164,7 +165,7 @@ fun LazyGridState.scrollbarState( .filterNotNull() .distinctUntilChanged() .collect { value = it } -}.value +} /** * Remembers a [ScrollbarState] driven by the changes in a [LazyStaggeredGridState] @@ -177,7 +178,7 @@ fun LazyGridState.scrollbarState( fun LazyStaggeredGridState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyStaggeredGridItemInfo) -> Int = LazyStaggeredGridItemInfo::index, -): ScrollbarState = produceState( +): State = produceState( initialValue = ScrollbarState.FULL, key1 = this, key2 = itemsAvailable, @@ -227,7 +228,7 @@ fun LazyStaggeredGridState.scrollbarState( .filterNotNull() .distinctUntilChanged() .collect { value = it } -}.value +} private inline fun List.floatSumOf(selector: (T) -> Float): Float { var sum = 0f From 6a955799546827a4e62225c8d3c3bef2119e81d7 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 1 Dec 2023 09:38:51 +1100 Subject: [PATCH 13/43] Move state into a state holder and remove redundant Box --- .../component/scrollbar/AppScrollbars.kt | 5 +- .../component/scrollbar/Scrollbar.kt | 196 ++++++----- .../component/scrollbar/ScrollbarExt.kt | 306 +++++++++--------- 3 files changed, 247 insertions(+), 260 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index beece9071..fa913cb27 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -38,7 +38,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -67,7 +66,7 @@ private const val SCROLLBAR_INACTIVE_TO_DORMANT_TIME_IN_MS = 2_000L @Composable fun ScrollableState.DraggableScrollbar( modifier: Modifier = Modifier, - state: State, + state: ScrollbarState, orientation: Orientation, onThumbMoved: (Float) -> Unit, ) { @@ -97,7 +96,7 @@ fun ScrollableState.DraggableScrollbar( @Composable fun ScrollableState.DecorativeScrollbar( modifier: Modifier = Modifier, - state: State, + state: ScrollbarState, orientation: Orientation, ) { val interactionSource = remember { MutableInteractionSource() } diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index b147ac2d2..bb3b08c3a 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -32,9 +32,9 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -44,10 +44,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset @@ -75,21 +75,53 @@ private const val SCROLLBAR_PRESS_DELAY_MS = 10L */ private const val SCROLLBAR_PRESS_DELTA_PCT = 0.02f +class ScrollbarState { + private var packedValue by mutableLongStateOf(0L) + + internal fun onScroll(stateValue: ScrollbarStateValue) { + packedValue = stateValue.packedValue + } + + /** + * Returns the thumb size of the scrollbar as a percentage of the total track size + */ + val thumbSizePercent + get() = unpackFloat1(packedValue) + + /** + * Returns the distance the thumb has traveled as a percentage of total track size + */ + val thumbMovedPercent + get() = unpackFloat2(packedValue) +} + +/** + * Returns the size of the scrollbar track in pixels + */ +private val ScrollbarTrack.size + get() = unpackFloat2(packedValue) - unpackFloat1(packedValue) + +/** + * Returns the position of the scrollbar thumb on the track as a percentage + */ +private fun ScrollbarTrack.thumbPosition( + dimension: Float, +): Float = max( + a = min( + a = dimension / size, + b = 1f, + ), + b = 0f, +) + /** * Class definition for the core properties of a scroll bar */ @Immutable @JvmInline -value class ScrollbarState internal constructor( +value class ScrollbarStateValue internal constructor( internal val packedValue: Long, -) { - companion object { - val FULL = ScrollbarState( - thumbSizePercent = 1f, - thumbMovedPercent = 0f, - ) - } -} +) /** * Class definition for the core properties of a scroll bar track @@ -106,54 +138,23 @@ private value class ScrollbarTrack( } /** - * Creates a [ScrollbarState] with the listed properties + * Creates a [ScrollbarStateValue] with the listed properties * @param thumbSizePercent the thumb size of the scrollbar as a percentage of the total track size. * Refers to either the thumb width (for horizontal scrollbars) * or height (for vertical scrollbars). * @param thumbMovedPercent the distance the thumb has traveled as a percentage of total * track size. */ -fun ScrollbarState( +fun scrollbarStateValue( thumbSizePercent: Float, thumbMovedPercent: Float, -) = ScrollbarState( +) = ScrollbarStateValue( packFloats( val1 = thumbSizePercent, val2 = thumbMovedPercent, ), ) -/** - * Returns the thumb size of the scrollbar as a percentage of the total track size - */ -val ScrollbarState.thumbSizePercent - get() = unpackFloat1(packedValue) - -/** - * Returns the distance the thumb has traveled as a percentage of total track size - */ -val ScrollbarState.thumbMovedPercent - get() = unpackFloat2(packedValue) - -/** - * Returns the size of the scrollbar track in pixels - */ -private val ScrollbarTrack.size - get() = unpackFloat2(packedValue) - unpackFloat1(packedValue) - -/** - * Returns the position of the scrollbar thumb on the track as a percentage - */ -private fun ScrollbarTrack.thumbPosition( - dimension: Float, -): Float = max( - a = min( - a = dimension / size, - b = 1f, - ), - b = 0f, -) - /** * Returns the value of [offset] along the axis specified by [this] */ @@ -192,14 +193,12 @@ internal fun Orientation.valueOf(intOffset: IntOffset) = when (this) { fun Scrollbar( modifier: Modifier = Modifier, orientation: Orientation, - state: State, + state: ScrollbarState, minThumbSize: Dp = 40.dp, interactionSource: MutableInteractionSource? = null, thumb: @Composable () -> Unit, onThumbMoved: ((Float) -> Unit)? = null, ) { - val localDensity = LocalDensity.current - // Using Offset.Unspecified and Float.NaN instead of null // to prevent unnecessary boxing of primitives var pressedOffset by remember { mutableStateOf(Offset.Unspecified) } @@ -305,68 +304,57 @@ fun Scrollbar( }, ) { // scrollbar thumb container - Box( - modifier = Modifier - .align(Alignment.TopStart) - .layout { measurable, constraints -> - val state = state.value - val thumbSizePx = max( - a = state.thumbSizePercent * track.size, - b = minThumbSize.toPx(), - ) + Layout(content = { thumb() }) { measurables, constraints -> + val measurable = measurables.first() - val thumbTravelPercent = when { - interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent - else -> interactionThumbTravelPercent - } - - val thumbMovedPx = min( - a = track.size * thumbTravelPercent, - b = track.size - thumbSizePx, - ) + val thumbSizePx = max( + a = state.thumbSizePercent * track.size, + b = minThumbSize.toPx(), + ) - val scrollbarThumbMovedDp = max( - a = thumbMovedPx, - b = 0f, - ) + val thumbTravelPercent = when { + interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent + else -> interactionThumbTravelPercent + } - val y = when (orientation) { - Horizontal -> 0 - Vertical -> scrollbarThumbMovedDp - } - val x = when (orientation) { - Horizontal -> scrollbarThumbMovedDp - Vertical -> 0 - } + val thumbMovedPx = min( + a = track.size * thumbTravelPercent, + b = track.size - thumbSizePx, + ) - val offset = IntOffset(x.toInt(), y.toInt()) + val scrollbarThumbMovedPx = max( + a = thumbMovedPx.roundToInt(), + b = 0, + ) - val constrained = when (orientation) { - Horizontal -> { - Constraints( - minWidth = thumbSizePx.roundToInt(), - maxWidth = thumbSizePx.roundToInt(), - minHeight = constraints.minHeight, - maxHeight = constraints.maxHeight - ) - } - Vertical -> { - Constraints( - minWidth = constraints.minWidth, - maxWidth = constraints.maxWidth, - minHeight = thumbSizePx.roundToInt(), - maxHeight = thumbSizePx.roundToInt() - ) - } - } + val y = when (orientation) { + Horizontal -> 0 + Vertical -> scrollbarThumbMovedPx + } + val x = when (orientation) { + Horizontal -> scrollbarThumbMovedPx + Vertical -> 0 + } - val placeable = measurable.measure(constrained) - layout(placeable.width, placeable.height) { - placeable.place(offset) - } + val updatedConstraints = when (orientation) { + Horizontal -> { + constraints.copy( + minWidth = thumbSizePx.roundToInt(), + maxWidth = thumbSizePx.roundToInt() + ) } - ) { - thumb() + Vertical -> { + constraints.copy( + minHeight = thumbSizePx.roundToInt(), + maxHeight = thumbSizePx.roundToInt() + ) + } + } + + val placeable = measurable.measure(updatedConstraints) + layout(placeable.width, placeable.height) { + placeable.place(x, y) + } } } @@ -381,7 +369,7 @@ fun Scrollbar( return@collect } - var currentThumbMovedPercent = state.value.thumbMovedPercent + var currentThumbMovedPercent = state.thumbMovedPercent val destinationThumbMovedPercent = track.thumbPosition( dimension = orientation.valueOf(pressedOffset), ) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt index 67abce1b7..a55f62f5f 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt @@ -24,8 +24,8 @@ import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemInfo import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState import androidx.compose.runtime.Composable -import androidx.compose.runtime.State -import androidx.compose.runtime.produceState +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull @@ -41,57 +41,57 @@ import kotlin.math.min fun LazyListState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyListItemInfo) -> Int = LazyListItemInfo::index, -): State = produceState( - initialValue = ScrollbarState.FULL, - key1 = this, - key2 = itemsAvailable, -) { - snapshotFlow { - if (itemsAvailable == 0) return@snapshotFlow null - - val visibleItemsInfo = layoutInfo.visibleItemsInfo - if (visibleItemsInfo.isEmpty()) return@snapshotFlow null - - val firstIndex = min( - a = interpolateFirstItemIndex( - visibleItems = visibleItemsInfo, - itemSize = { it.size }, - offset = { it.offset }, - nextItemOnMainAxis = { first -> visibleItemsInfo.find { it != first } }, - itemIndex = itemIndex, - ), - b = itemsAvailable.toFloat(), - ) - if (firstIndex.isNaN()) return@snapshotFlow null - - val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> - itemVisibilityPercentage( - itemSize = itemInfo.size, - itemStartOffset = itemInfo.offset, - viewportStartOffset = layoutInfo.viewportStartOffset, - viewportEndOffset = layoutInfo.viewportEndOffset, +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { it.size }, + offset = { it.offset }, + nextItemOnMainAxis = { first -> visibleItemsInfo.find { it != first } }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = itemInfo.size, + itemStartOffset = itemInfo.offset, + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = when { + layoutInfo.reverseLayout -> 1f - thumbTravelPercent + else -> thumbTravelPercent + }, ) } - - val thumbTravelPercent = min( - a = firstIndex / itemsAvailable, - b = 1f, - ) - val thumbSizePercent = min( - a = itemsVisible / itemsAvailable, - b = 1f, - ) - ScrollbarState( - thumbSizePercent = thumbSizePercent, - thumbMovedPercent = when { - layoutInfo.reverseLayout -> 1f - thumbTravelPercent - else -> thumbTravelPercent - }, - ) + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } } - .filterNotNull() - .distinctUntilChanged() - .collect { value = it } + return state } /** @@ -104,67 +104,67 @@ fun LazyListState.scrollbarState( fun LazyGridState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyGridItemInfo) -> Int = LazyGridItemInfo::index, -): State = produceState( - initialValue = ScrollbarState.FULL, - key1 = this, - key2 = itemsAvailable, -) { - snapshotFlow { - if (itemsAvailable == 0) return@snapshotFlow null - - val visibleItemsInfo = layoutInfo.visibleItemsInfo - if (visibleItemsInfo.isEmpty()) return@snapshotFlow null - - val firstIndex = min( - a = interpolateFirstItemIndex( - visibleItems = visibleItemsInfo, - itemSize = { layoutInfo.orientation.valueOf(it.size) }, - offset = { layoutInfo.orientation.valueOf(it.offset) }, - nextItemOnMainAxis = { first -> - when (layoutInfo.orientation) { - Orientation.Vertical -> visibleItemsInfo.find { - it != first && it.row != first.row - } - - Orientation.Horizontal -> visibleItemsInfo.find { - it != first && it.column != first.column +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { layoutInfo.orientation.valueOf(it.size) }, + offset = { layoutInfo.orientation.valueOf(it.offset) }, + nextItemOnMainAxis = { first -> + when (layoutInfo.orientation) { + Orientation.Vertical -> visibleItemsInfo.find { + it != first && it.row != first.row + } + + Orientation.Horizontal -> visibleItemsInfo.find { + it != first && it.column != first.column + } } - } + }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = layoutInfo.orientation.valueOf(itemInfo.size), + itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = when { + layoutInfo.reverseLayout -> 1f - thumbTravelPercent + else -> thumbTravelPercent }, - itemIndex = itemIndex, - ), - b = itemsAvailable.toFloat(), - ) - if (firstIndex.isNaN()) return@snapshotFlow null - - val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> - itemVisibilityPercentage( - itemSize = layoutInfo.orientation.valueOf(itemInfo.size), - itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), - viewportStartOffset = layoutInfo.viewportStartOffset, - viewportEndOffset = layoutInfo.viewportEndOffset, ) } - - val thumbTravelPercent = min( - a = firstIndex / itemsAvailable, - b = 1f, - ) - val thumbSizePercent = min( - a = itemsVisible / itemsAvailable, - b = 1f, - ) - ScrollbarState( - thumbSizePercent = thumbSizePercent, - thumbMovedPercent = when { - layoutInfo.reverseLayout -> 1f - thumbTravelPercent - else -> thumbTravelPercent - }, - ) + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } } - .filterNotNull() - .distinctUntilChanged() - .collect { value = it } + return state } /** @@ -178,56 +178,56 @@ fun LazyGridState.scrollbarState( fun LazyStaggeredGridState.scrollbarState( itemsAvailable: Int, itemIndex: (LazyStaggeredGridItemInfo) -> Int = LazyStaggeredGridItemInfo::index, -): State = produceState( - initialValue = ScrollbarState.FULL, - key1 = this, - key2 = itemsAvailable, -) { - snapshotFlow { - if (itemsAvailable == 0) return@snapshotFlow null - - val visibleItemsInfo = layoutInfo.visibleItemsInfo - if (visibleItemsInfo.isEmpty()) return@snapshotFlow null - - val firstIndex = min( - a = interpolateFirstItemIndex( - visibleItems = visibleItemsInfo, - itemSize = { layoutInfo.orientation.valueOf(it.size) }, - offset = { layoutInfo.orientation.valueOf(it.offset) }, - nextItemOnMainAxis = { first -> - visibleItemsInfo.find { it != first && it.lane == first.lane } - }, - itemIndex = itemIndex, - ), - b = itemsAvailable.toFloat(), - ) - if (firstIndex.isNaN()) return@snapshotFlow null - - val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> - itemVisibilityPercentage( - itemSize = layoutInfo.orientation.valueOf(itemInfo.size), - itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), - viewportStartOffset = layoutInfo.viewportStartOffset, - viewportEndOffset = layoutInfo.viewportEndOffset, +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { layoutInfo.orientation.valueOf(it.size) }, + offset = { layoutInfo.orientation.valueOf(it.offset) }, + nextItemOnMainAxis = { first -> + visibleItemsInfo.find { it != first && it.lane == first.lane } + }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = layoutInfo.orientation.valueOf(itemInfo.size), + itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = thumbTravelPercent, ) } - - val thumbTravelPercent = min( - a = firstIndex / itemsAvailable, - b = 1f, - ) - val thumbSizePercent = min( - a = itemsVisible / itemsAvailable, - b = 1f, - ) - ScrollbarState( - thumbSizePercent = thumbSizePercent, - thumbMovedPercent = thumbTravelPercent, - ) + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } } - .filterNotNull() - .distinctUntilChanged() - .collect { value = it } + return state } private inline fun List.floatSumOf(selector: (T) -> Float): Float { From a7c7b520a45df6c255bb9374c26d720cb2afdd04 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 1 Dec 2023 10:08:59 +1100 Subject: [PATCH 14/43] Use custom Modifier.Node instead of background --- .../component/scrollbar/AppScrollbars.kt | 87 +++++++++++++++---- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index fa913cb27..71b673a71 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar +import android.annotation.SuppressLint import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.Spring import androidx.compose.animation.core.SpringSpec @@ -38,17 +39,31 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorProducer +import androidx.compose.ui.graphics.Outline +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.drawOutline +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.node.DrawModifierNode +import androidx.compose.ui.node.ModifierNodeElement +import androidx.compose.ui.node.invalidateDraw +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Active import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Dormant import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Inactive +import kotlinx.coroutines.Job import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.launch /** * The time period for showing the scrollbar thumb after interacting with it, before it fades away @@ -130,12 +145,7 @@ private fun ScrollableState.DraggableScrollbarThumb( Horizontal -> height(12.dp).fillMaxWidth() } } - .background( - color = scrollbarThumbColor( - interactionSource = interactionSource, - ), - shape = RoundedCornerShape(16.dp), - ), + .scrollThumb(this, interactionSource), ) } @@ -155,31 +165,72 @@ private fun ScrollableState.DecorativeScrollbarThumb( Horizontal -> height(2.dp).fillMaxWidth() } } - .background( - color = scrollbarThumbColor( - interactionSource = interactionSource, - ), - shape = RoundedCornerShape(16.dp), - ), + .scrollThumb(this, interactionSource), ) } +// TODO: This lint is removed in 1.6 as the recommendation has changed +// remove when project is upgraded +@SuppressLint("ComposableModifierFactory") +@Composable +private fun Modifier.scrollThumb( + scrollableState: ScrollableState, + interactionSource: InteractionSource +): Modifier { + val colorState = scrollbarThumbColor(scrollableState, interactionSource) + return this then ScrollThumbElement { colorState.value } +} + +private data class ScrollThumbElement(val colorProducer: ColorProducer) + : ModifierNodeElement() { + override fun create(): ScrollThumbNode = ScrollThumbNode(colorProducer) + override fun update(node: ScrollThumbNode) { + node.colorProducer = colorProducer + node.invalidateDraw() + } +} + +private class ScrollThumbNode(var colorProducer: ColorProducer): DrawModifierNode, Modifier.Node() { + private val shape = RoundedCornerShape(16.dp) + + // naive cache outline calculation if size is the same + private var lastSize: Size? = null + private var lastLayoutDirection: LayoutDirection? = null + private var lastOutline: Outline? = null + + override fun ContentDrawScope.draw() { + val color = colorProducer() + val outline = + if (size == lastSize && layoutDirection == lastLayoutDirection) { + lastOutline!! + } else { + shape.createOutline(size, layoutDirection, this) + } + if (color != Color.Unspecified) drawOutline(outline, color = color) + + lastOutline = outline + lastSize = size + lastLayoutDirection = layoutDirection + } +} + /** * The color of the scrollbar thumb as a function of its interaction state. * @param interactionSource source of interactions in the scrolling container */ @Composable -private fun ScrollableState.scrollbarThumbColor( - interactionSource: InteractionSource, -): Color { +private fun scrollbarThumbColor( + scrollableState: ScrollableState, + interactionSource: InteractionSource +): State { var state by remember { mutableStateOf(Dormant) } val pressed by interactionSource.collectIsPressedAsState() val hovered by interactionSource.collectIsHoveredAsState() val dragged by interactionSource.collectIsDraggedAsState() - val active = (canScrollForward || canScrollForward) && - (pressed || hovered || dragged || isScrollInProgress) + val active = (scrollableState.canScrollForward || scrollableState.canScrollForward) && + (pressed || hovered || dragged || scrollableState.isScrollInProgress) - val color by animateColorAsState( + val color = animateColorAsState( targetValue = when (state) { Active -> MaterialTheme.colorScheme.onSurface.copy(0.5f) Inactive -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.2f) From 41a7a697dab45cadc3b0db7b31028f68a0920770 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Fri, 1 Dec 2023 10:51:45 +1100 Subject: [PATCH 15/43] Apply spotless --- .../component/scrollbar/AppScrollbars.kt | 15 +++++---------- .../designsystem/component/scrollbar/Scrollbar.kt | 8 ++------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index 71b673a71..5b6776352 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -20,7 +20,6 @@ import android.annotation.SuppressLint import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.Spring import androidx.compose.animation.core.SpringSpec -import androidx.compose.foundation.background import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.Orientation.Horizontal import androidx.compose.foundation.gestures.Orientation.Vertical @@ -49,7 +48,6 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorProducer import androidx.compose.ui.graphics.Outline -import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.drawOutline import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.node.DrawModifierNode @@ -60,10 +58,7 @@ import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Active import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Dormant import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Inactive -import kotlinx.coroutines.Job import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.mapLatest -import kotlinx.coroutines.launch /** * The time period for showing the scrollbar thumb after interacting with it, before it fades away @@ -175,14 +170,14 @@ private fun ScrollableState.DecorativeScrollbarThumb( @Composable private fun Modifier.scrollThumb( scrollableState: ScrollableState, - interactionSource: InteractionSource + interactionSource: InteractionSource, ): Modifier { val colorState = scrollbarThumbColor(scrollableState, interactionSource) return this then ScrollThumbElement { colorState.value } } -private data class ScrollThumbElement(val colorProducer: ColorProducer) - : ModifierNodeElement() { +private data class ScrollThumbElement(val colorProducer: ColorProducer) : + ModifierNodeElement() { override fun create(): ScrollThumbNode = ScrollThumbNode(colorProducer) override fun update(node: ScrollThumbNode) { node.colorProducer = colorProducer @@ -190,7 +185,7 @@ private data class ScrollThumbElement(val colorProducer: ColorProducer) } } -private class ScrollThumbNode(var colorProducer: ColorProducer): DrawModifierNode, Modifier.Node() { +private class ScrollThumbNode(var colorProducer: ColorProducer) : DrawModifierNode, Modifier.Node() { private val shape = RoundedCornerShape(16.dp) // naive cache outline calculation if size is the same @@ -221,7 +216,7 @@ private class ScrollThumbNode(var colorProducer: ColorProducer): DrawModifierNod @Composable private fun scrollbarThumbColor( scrollableState: ScrollableState, - interactionSource: InteractionSource + interactionSource: InteractionSource, ): State { var state by remember { mutableStateOf(Dormant) } val pressed by interactionSource.collectIsPressedAsState() diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index bb3b08c3a..5041eff7b 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -39,7 +39,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange @@ -48,7 +47,6 @@ import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot -import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize @@ -340,13 +338,13 @@ fun Scrollbar( Horizontal -> { constraints.copy( minWidth = thumbSizePx.roundToInt(), - maxWidth = thumbSizePx.roundToInt() + maxWidth = thumbSizePx.roundToInt(), ) } Vertical -> { constraints.copy( minHeight = thumbSizePx.roundToInt(), - maxHeight = thumbSizePx.roundToInt() + maxHeight = thumbSizePx.roundToInt(), ) } } @@ -392,8 +390,6 @@ fun Scrollbar( interactionThumbTravelPercent = currentThumbMovedPercent delay(SCROLLBAR_PRESS_DELAY_MS) } - - } } From 1d65b7b7026b38bd9ff5c513e1b559f560c323a7 Mon Sep 17 00:00:00 2001 From: Ben Trengrove Date: Tue, 5 Dec 2023 11:03:55 +1100 Subject: [PATCH 16/43] Remove redundant mutable state --- .../google/samples/apps/nowinandroid/core/ui/NewsFeed.kt | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt index e2904afc3..afdb584a2 100644 --- a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt @@ -30,9 +30,6 @@ import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells import androidx.compose.foundation.lazy.staggeredgrid.items import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext @@ -64,9 +61,6 @@ fun LazyStaggeredGridScope.newsFeed( key = { it.id }, contentType = { "newsFeedItem" }, ) { userNewsResource -> - val resourceUrl by remember { - mutableStateOf(Uri.parse(userNewsResource.url)) - } val context = LocalContext.current val analyticsHelper = LocalAnalyticsHelper.current val backgroundColor = MaterialTheme.colorScheme.background.toArgb() @@ -79,7 +73,8 @@ fun LazyStaggeredGridScope.newsFeed( analyticsHelper.logNewsResourceOpened( newsResourceId = userNewsResource.id, ) - launchCustomChromeTab(context, resourceUrl, backgroundColor) + launchCustomChromeTab(context, Uri.parse(userNewsResource.url), backgroundColor) + onNewsResourceViewed(userNewsResource.id) }, hasBeenViewed = userNewsResource.hasBeenViewed, From 58567379dc05a6d7e98d254c95666fcf8b7a1071 Mon Sep 17 00:00:00 2001 From: dahunsi Date: Mon, 4 Dec 2023 16:13:11 -0800 Subject: [PATCH 17/43] Fix typo in app scrollbars Change-Id: Ie72f1410fa8e5a68a520321c34d4fad251016486 --- .../core/designsystem/component/scrollbar/AppScrollbars.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index 5b6776352..fe14bce14 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -222,7 +222,7 @@ private fun scrollbarThumbColor( val pressed by interactionSource.collectIsPressedAsState() val hovered by interactionSource.collectIsHoveredAsState() val dragged by interactionSource.collectIsDraggedAsState() - val active = (scrollableState.canScrollForward || scrollableState.canScrollForward) && + val active = (scrollableState.canScrollForward || scrollableState.canScrollBackward) && (pressed || hovered || dragged || scrollableState.isScrollInProgress) val color = animateColorAsState( From 85a9cc1629a5c88e9897d149693d1c366c533443 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:06:44 +0000 Subject: [PATCH 18/43] Bump actions/setup-java from 3 to 4 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .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 ca161b0a4..9c103ca46 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -31,7 +31,7 @@ jobs: run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 @@ -128,7 +128,7 @@ jobs: run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index f85215b74..f4901b9e2 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -21,7 +21,7 @@ jobs: run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 From a7365f075d08e703aeec41b9a11aeb943f04b8c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:10:32 +0000 Subject: [PATCH 19/43] Bump hilt from 2.48.1 to 2.49 Bumps `hilt` from 2.48.1 to 2.49. Updates `com.google.dagger:hilt-android` from 2.48.1 to 2.49 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49) Updates `com.google.dagger:hilt-android-testing` from 2.48.1 to 2.49 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49) Updates `com.google.dagger:hilt-android-compiler` from 2.48.1 to 2.49 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49) Updates `com.google.dagger.hilt.android` from 2.48.1 to 2.49 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49) --- updated-dependencies: - dependency-name: com.google.dagger:hilt-android dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:hilt-android-testing dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:hilt-android-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger.hilt.android 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 aa2a32e90..c1f426bd3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ firebasePerfPlugin = "1.4.2" gmsPlugin = "4.4.0" googleOss = "17.0.1" googleOssPlugin = "0.10.6" -hilt = "2.48.1" +hilt = "2.49" hiltExt = "1.1.0" jacoco = "0.8.7" junit4 = "4.13.2" From 10c3e78e0bb0a244ee5c1ed4a428a1fda2929186 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:10:36 +0000 Subject: [PATCH 20/43] Bump org.jetbrains.kotlinx:kotlinx-datetime from 0.4.1 to 0.5.0 Bumps [org.jetbrains.kotlinx:kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) from 0.4.1 to 0.5.0. - [Release notes](https://github.com/Kotlin/kotlinx-datetime/releases) - [Changelog](https://github.com/Kotlin/kotlinx-datetime/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kotlin/kotlinx-datetime/compare/v0.4.1...v0.5.0) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-datetime 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 aa2a32e90..41c92c2f2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ jacoco = "0.8.7" junit4 = "4.13.2" kotlin = "1.9.10" kotlinxCoroutines = "1.7.3" -kotlinxDatetime = "0.4.1" +kotlinxDatetime = "0.5.0" kotlinxSerializationJson = "1.6.0" ksp = "1.9.10-1.0.13" lint = "31.1.3" From 63ef65b9e95a229c7f8725ff323ec1fa71d005ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:10:38 +0000 Subject: [PATCH 21/43] Bump androidx.compose.runtime:runtime-tracing Bumps androidx.compose.runtime:runtime-tracing from 1.0.0-alpha03 to 1.0.0-beta01. --- updated-dependencies: - dependency-name: androidx.compose.runtime:runtime-tracing 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 aa2a32e90..d265e2a73 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ androidxAppCompat = "1.6.1" androidxBrowser = "1.6.0" androidxComposeBom = "2023.10.01" androidxComposeCompiler = "1.5.3" -androidxComposeRuntimeTracing = "1.0.0-alpha03" +androidxComposeRuntimeTracing = "1.0.0-beta01" androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.0.0" From fa1a6d5f21c63065bfca16ff0ee1d14260b3ed27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 23:10:43 +0000 Subject: [PATCH 22/43] Bump androidxMacroBenchmark from 1.2.0 to 1.2.2 Bumps `androidxMacroBenchmark` from 1.2.0 to 1.2.2. Updates `androidx.benchmark:benchmark-macro-junit4` from 1.2.0 to 1.2.2 Updates `androidx.baselineprofile` from 1.2.0 to 1.2.2 --- updated-dependencies: - dependency-name: androidx.benchmark:benchmark-macro-junit4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.baselineprofile 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 aa2a32e90..a82684d1a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,7 +17,7 @@ androidxEspresso = "3.5.1" androidxHiltNavigationCompose = "1.0.0" androidxJunit = "1.1.5" androidxLifecycle = "2.6.2" -androidxMacroBenchmark = "1.2.0" +androidxMacroBenchmark = "1.2.2" androidxMetrics = "1.0.0-alpha04" androidxNavigation = "2.7.4" androidxProfileinstaller = "1.3.1" From cc6677872d97b1de01a2edfb67ebe4a8dacb8ace Mon Sep 17 00:00:00 2001 From: Yuya <140081005+oikvpqya@users.noreply.github.com> Date: Wed, 6 Dec 2023 09:59:00 +0900 Subject: [PATCH 23/43] Update thumb movement range by thumb size, in app scrollbars Change-Id: I4438debd5037965a837758e0c78b110ab8197da5 --- .../component/scrollbar/Scrollbar.kt | 33 ++++++++++++------- .../component/scrollbar/ThumbExt.kt | 3 +- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index 5041eff7b..1e5850f30 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -91,6 +91,12 @@ class ScrollbarState { */ val thumbMovedPercent get() = unpackFloat2(packedValue) + + /** + * Returns the max distance the thumb can travel as a percentage of total track size + */ + val thumbTrackSizePercent + get() = 1f - unpackFloat1(packedValue) } /** @@ -310,27 +316,30 @@ fun Scrollbar( b = minThumbSize.toPx(), ) - val thumbTravelPercent = when { - interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent - else -> interactionThumbTravelPercent + val trackSizePx = when (state.thumbTrackSizePercent) { + 0f -> track.size + else -> (track.size - thumbSizePx) / state.thumbTrackSizePercent } - val thumbMovedPx = min( - a = track.size * thumbTravelPercent, - b = track.size - thumbSizePx, + val thumbTravelPercent = max( + a = min( + a = when { + interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent + else -> interactionThumbTravelPercent + }, + b = state.thumbTrackSizePercent, + ), + b = 0f, ) - val scrollbarThumbMovedPx = max( - a = thumbMovedPx.roundToInt(), - b = 0, - ) + val thumbMovedPx = trackSizePx * thumbTravelPercent val y = when (orientation) { Horizontal -> 0 - Vertical -> scrollbarThumbMovedPx + Vertical -> thumbMovedPx.roundToInt() } val x = when (orientation) { - Horizontal -> scrollbarThumbMovedPx + Horizontal -> thumbMovedPx.roundToInt() Vertical -> 0 } diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt index 847580361..a267ec2ec 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt @@ -26,6 +26,7 @@ import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue +import kotlin.math.roundToInt /** * Remembers a function to react to [Scrollbar] thumb position displacements for a [LazyListState] @@ -79,7 +80,7 @@ private inline fun rememberDraggableScroller( LaunchedEffect(percentage) { if (percentage.isNaN()) return@LaunchedEffect - val indexToFind = (itemCount * percentage).toInt() + val indexToFind = (itemCount * percentage).roundToInt() scroll(indexToFind) } return remember { From 8a70178f2b1b9b47e66c88fe710284c7342a0e48 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Wed, 6 Dec 2023 14:56:38 -0800 Subject: [PATCH 24/43] Enable stricter validation for build-logic convention plugins Change-Id: I1955393c76e91bebfe4b7e349734c81a10263c8c --- .github/workflows/Build.yaml | 3 +++ build-logic/convention/build.gradle.kts | 7 +++++++ .../com/google/samples/apps/nowinandroid/Badging.kt | 9 +++++++++ .../google/samples/apps/nowinandroid/PrintTestApks.kt | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index ca161b0a4..d47342c6a 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -39,6 +39,9 @@ jobs: - name: Setup Gradle uses: gradle/gradle-build-action@v2 + - name: Check build-logic + run: ./gradlew check -p build-logic + - name: Check spotless run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index b6650aa75..e75ed468f 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -43,6 +43,13 @@ dependencies { compileOnly(libs.ksp.gradlePlugin) } +tasks { + validatePlugins { + enableStricterValidation.set(true) + failOnWarning.set(true) + } +} + gradlePlugin { plugins { register("androidApplicationCompose") { diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt index bcaa00f9f..2a776e429 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt @@ -26,11 +26,14 @@ import org.gradle.api.Project import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.Property +import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFile import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction import org.gradle.configurationcache.extensions.capitalized import org.gradle.kotlin.dsl.register @@ -40,14 +43,17 @@ import java.io.File import java.nio.file.Files import javax.inject.Inject +@CacheableTask abstract class GenerateBadgingTask : DefaultTask() { @get:OutputFile abstract val badging: RegularFileProperty + @get:PathSensitive(PathSensitivity.NONE) @get:InputFile abstract val apk: RegularFileProperty + @get:PathSensitive(PathSensitivity.NONE) @get:InputFile abstract val aapt2Executable: RegularFileProperty @@ -68,6 +74,7 @@ abstract class GenerateBadgingTask : DefaultTask() { } } +@CacheableTask abstract class CheckBadgingTask : DefaultTask() { // In order for the task to be up-to-date when the inputs have not changed, @@ -76,9 +83,11 @@ abstract class CheckBadgingTask : DefaultTask() { @get:OutputDirectory abstract val output: DirectoryProperty + @get:PathSensitive(PathSensitivity.NONE) @get:InputFile abstract val goldenBadging: RegularFileProperty + @get:PathSensitive(PathSensitivity.NONE) @get:InputFile abstract val generatedBadging: RegularFileProperty diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt index 6c08216cc..94bf6e127 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt @@ -30,7 +30,10 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction +import org.gradle.work.DisableCachingByDefault import java.io.File internal fun Project.configurePrintApksTask(extension: AndroidComponentsExtension<*, *, *>) { @@ -62,10 +65,14 @@ internal fun Project.configurePrintApksTask(extension: AndroidComponentsExtensio } } +@DisableCachingByDefault(because = "Prints output") internal abstract class PrintApkLocationTask : DefaultTask() { + + @get:PathSensitive(PathSensitivity.RELATIVE) @get:InputDirectory abstract val apkFolder: DirectoryProperty + @get:PathSensitive(PathSensitivity.RELATIVE) @get:InputFiles abstract val sources: ListProperty From 41a68a099253bedcec436e7af346240a26631ae9 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Thu, 7 Dec 2023 12:19:06 -0800 Subject: [PATCH 25/43] Use normal propery setting Change-Id: I31aef2007b63c067ad80a9f65f2b9594d114f13a --- build-logic/convention/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index e75ed468f..ea57a7c8c 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -45,8 +45,8 @@ dependencies { tasks { validatePlugins { - enableStricterValidation.set(true) - failOnWarning.set(true) + enableStricterValidation = true + failOnWarning = true } } From 907be7d667f4c91147b0f84b7ad1dea6640a46fb Mon Sep 17 00:00:00 2001 From: Yuya <140081005+oikvpqya@users.noreply.github.com> Date: Fri, 8 Dec 2023 09:11:28 +0900 Subject: [PATCH 26/43] Update thumbTrackSizePercent calculation for readability Change-Id: I7ef067a950b4b5911b8c2e6a8c1f72c3e95d938d --- .../core/designsystem/component/scrollbar/Scrollbar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index 1e5850f30..8c85e5be5 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -96,7 +96,7 @@ class ScrollbarState { * Returns the max distance the thumb can travel as a percentage of total track size */ val thumbTrackSizePercent - get() = 1f - unpackFloat1(packedValue) + get() = 1f - thumbSizePercent } /** From 95b1a07a3c060038ba3b2becc01c51b87b928402 Mon Sep 17 00:00:00 2001 From: Alex Vanyo Date: Fri, 8 Dec 2023 11:32:01 -0800 Subject: [PATCH 27/43] Add truth for better badging diff output Change-Id: Id3fab0107bc08adf44ddf07a30e0327e06897d47 --- build-logic/convention/build.gradle.kts | 1 + .../samples/apps/nowinandroid/Badging.kt | 20 +++++++------------ gradle/libs.versions.toml | 2 ++ 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index ea57a7c8c..e11a1b42a 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { compileOnly(libs.firebase.performance.gradlePlugin) compileOnly(libs.kotlin.gradlePlugin) compileOnly(libs.ksp.gradlePlugin) + implementation(libs.truth) } tasks { diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt index 2a776e429..c59d3ffb8 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt @@ -20,8 +20,8 @@ import com.android.build.api.artifact.SingleArtifact import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.gradle.BaseExtension import com.android.SdkConstants +import com.google.common.truth.Truth.assertWithMessage import org.gradle.api.DefaultTask -import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty @@ -40,7 +40,6 @@ import org.gradle.kotlin.dsl.register import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.process.ExecOperations import java.io.File -import java.nio.file.Files import javax.inject.Inject @CacheableTask @@ -98,17 +97,12 @@ abstract class CheckBadgingTask : DefaultTask() { @TaskAction fun taskAction() { - if ( - Files.mismatch( - goldenBadging.get().asFile.toPath(), - generatedBadging.get().asFile.toPath(), - ) != -1L - ) { - throw GradleException( - "Generated badging is different from golden badging! " + - "If this change is intended, run ./gradlew ${updateBadgingTaskName.get()}", - ) - } + assertWithMessage( + "Generated badging is different from golden badging! " + + "If this change is intended, run ./gradlew ${updateBadgingTaskName.get()}", + ) + .that(generatedBadging.get().asFile.readText()) + .isEqualTo(goldenBadging.get().asFile.readText()) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa2a32e90..4f55e6290 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -57,6 +57,7 @@ robolectric = "4.11.1" roborazzi = "1.6.0" room = "2.6.0" secrets = "2.0.1" +truth = "1.1.5" turbine = "1.0.0" [libraries] @@ -140,6 +141,7 @@ roborazzi = { group = "io.github.takahirom.roborazzi", name = "roborazzi", versi room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +truth = { group = "com.google.truth", name = "truth", version.ref = "truth" } turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" } # Dependencies of the included build-logic From 93ba813ac0473ea47be63a9e22052ee390f8ec2e Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 10:25:22 +0100 Subject: [PATCH 28/43] Update max concurrent PRs for dependabot We currently have many pending updates that are not listed and the default 5 concurrent PRs is very limiting. See documentation on https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#open-pull-requests-limit --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 00ada2a1c..d77a706b3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,6 +18,7 @@ updates: - "org.jetbrains.kotlin.jvm" - "com.google.devtools.ksp" - "androidx.compose.compiler:compiler" + open-pull-requests-limit: 10 registries: maven-google: type: "maven-repository" From 5441af920773639f6ec29260eaeb9d277ea6535c Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 09:29:17 +0000 Subject: [PATCH 29/43] Remove unnecessary FlowPreview opt-in --- .../kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 04ee4e56e..d7cadf8d7 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -86,7 +86,6 @@ private fun Project.configureKotlin() { "-opt-in=kotlin.RequiresOptIn", // Enable experimental coroutines APIs, including Flow "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", - "-opt-in=kotlinx.coroutines.FlowPreview", ) } } From dc2643f84e0798b9aa7eb3a276e4f196c13a6d20 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 09:32:00 +0000 Subject: [PATCH 30/43] Remove unnecessary RequiresOptIn opt-in --- .../kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 04ee4e56e..b453cf722 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -83,7 +83,6 @@ private fun Project.configureKotlin() { val warningsAsErrors: String? by project allWarningsAsErrors = warningsAsErrors.toBoolean() freeCompilerArgs = freeCompilerArgs + listOf( - "-opt-in=kotlin.RequiresOptIn", // Enable experimental coroutines APIs, including Flow "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.coroutines.FlowPreview", From 14c90400bede85036a035daa6961ac8a1d93951d Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 16 Dec 2023 10:50:38 +0000 Subject: [PATCH 31/43] Move app screenshot tests to match dependencies declaration Fixes #990 --- .../ui/NiaAppScreenSizesScreenshotTests.kt | 2 +- ...ompactWidth_compactHeight_showsNavigationBar.png | Bin ...mpactWidth_expandedHeight_showsNavigationBar.png | Bin ...compactWidth_mediumHeight_showsNavigationBar.png | Bin ...andedWidth_compactHeight_showsNavigationRail.png | Bin ...ndedWidth_expandedHeight_showsNavigationRail.png | Bin ...pandedWidth_mediumHeight_showsNavigationRail.png | Bin ...ediumWidth_compactHeight_showsNavigationRail.png | Bin ...diumWidth_expandedHeight_showsNavigationRail.png | Bin ...mediumWidth_mediumHeight_showsNavigationRail.png | Bin 10 files changed, 1 insertion(+), 1 deletion(-) rename app/src/{testDemo => testDemoDebug}/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt (99%) rename app/src/{testDemo => testDemoDebug}/screenshots/compactWidth_compactHeight_showsNavigationBar.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/compactWidth_expandedHeight_showsNavigationBar.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/compactWidth_mediumHeight_showsNavigationBar.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/expandedWidth_compactHeight_showsNavigationRail.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/mediumWidth_compactHeight_showsNavigationRail.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png (100%) rename app/src/{testDemo => testDemoDebug}/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png (100%) diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt similarity index 99% rename from app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt rename to app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index dcbc1e5c0..63a7c7f91 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -154,7 +154,7 @@ class NiaAppScreenSizesScreenshotTests { composeTestRule.onRoot() .captureRoboImage( - "src/testDemo/screenshots/$screenshotName.png", + "src/testDemoDebug/screenshots/$screenshotName.png", roborazziOptions = DefaultRoborazziOptions, ) } diff --git a/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png b/app/src/testDemoDebug/screenshots/compactWidth_compactHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png rename to app/src/testDemoDebug/screenshots/compactWidth_compactHeight_showsNavigationBar.png diff --git a/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png b/app/src/testDemoDebug/screenshots/compactWidth_expandedHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png rename to app/src/testDemoDebug/screenshots/compactWidth_expandedHeight_showsNavigationBar.png diff --git a/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png b/app/src/testDemoDebug/screenshots/compactWidth_mediumHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png rename to app/src/testDemoDebug/screenshots/compactWidth_mediumHeight_showsNavigationBar.png diff --git a/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/expandedWidth_compactHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/expandedWidth_compactHeight_showsNavigationRail.png diff --git a/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png diff --git a/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png diff --git a/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/mediumWidth_compactHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/mediumWidth_compactHeight_showsNavigationRail.png diff --git a/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png diff --git a/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemoDebug/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png rename to app/src/testDemoDebug/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png From 7a113982a93ee94fb7120c19ad11df705a58d6c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 08:44:06 +0000 Subject: [PATCH 32/43] Bump actions/upload-artifact from 3 to 4 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/Build.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index d47342c6a..791cf6127 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -91,14 +91,14 @@ jobs: -x collectProdNonMinifiedBenchmarkBaselineProfile - name: Upload build outputs (APKs) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: APKs path: '**/build/outputs/apk/**/*.apk' - name: Upload test results (XML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-results path: '**/build/test-results/test*UnitTest/**.xml' @@ -108,7 +108,7 @@ jobs: - name: Upload lint reports (HTML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: lint-reports path: '**/build/reports/lint-results-*.html' @@ -154,7 +154,7 @@ jobs: - name: Upload test reports if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-reports-${{ matrix.api-level }} path: '**/build/reports/androidTests' From 76e3c1d97cb20f14881a3e127c07c7ef5d3db304 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Tue, 19 Dec 2023 14:59:53 +0000 Subject: [PATCH 33/43] Revert "Move app screenshot tests to match dependencies declaration" --- .../ui/NiaAppScreenSizesScreenshotTests.kt | 2 +- ...ompactWidth_compactHeight_showsNavigationBar.png | Bin ...mpactWidth_expandedHeight_showsNavigationBar.png | Bin ...compactWidth_mediumHeight_showsNavigationBar.png | Bin ...andedWidth_compactHeight_showsNavigationRail.png | Bin ...ndedWidth_expandedHeight_showsNavigationRail.png | Bin ...pandedWidth_mediumHeight_showsNavigationRail.png | Bin ...ediumWidth_compactHeight_showsNavigationRail.png | Bin ...diumWidth_expandedHeight_showsNavigationRail.png | Bin ...mediumWidth_mediumHeight_showsNavigationRail.png | Bin 10 files changed, 1 insertion(+), 1 deletion(-) rename app/src/{testDemoDebug => testDemo}/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt (99%) rename app/src/{testDemoDebug => testDemo}/screenshots/compactWidth_compactHeight_showsNavigationBar.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/compactWidth_expandedHeight_showsNavigationBar.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/compactWidth_mediumHeight_showsNavigationBar.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/expandedWidth_compactHeight_showsNavigationRail.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/mediumWidth_compactHeight_showsNavigationRail.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png (100%) rename app/src/{testDemoDebug => testDemo}/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png (100%) diff --git a/app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt similarity index 99% rename from app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt rename to app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index 63a7c7f91..dcbc1e5c0 100644 --- a/app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -154,7 +154,7 @@ class NiaAppScreenSizesScreenshotTests { composeTestRule.onRoot() .captureRoboImage( - "src/testDemoDebug/screenshots/$screenshotName.png", + "src/testDemo/screenshots/$screenshotName.png", roborazziOptions = DefaultRoborazziOptions, ) } diff --git a/app/src/testDemoDebug/screenshots/compactWidth_compactHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemoDebug/screenshots/compactWidth_compactHeight_showsNavigationBar.png rename to app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png diff --git a/app/src/testDemoDebug/screenshots/compactWidth_expandedHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemoDebug/screenshots/compactWidth_expandedHeight_showsNavigationBar.png rename to app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png diff --git a/app/src/testDemoDebug/screenshots/compactWidth_mediumHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png similarity index 100% rename from app/src/testDemoDebug/screenshots/compactWidth_mediumHeight_showsNavigationBar.png rename to app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png diff --git a/app/src/testDemoDebug/screenshots/expandedWidth_compactHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/expandedWidth_compactHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png diff --git a/app/src/testDemoDebug/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png diff --git a/app/src/testDemoDebug/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png diff --git a/app/src/testDemoDebug/screenshots/mediumWidth_compactHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/mediumWidth_compactHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png diff --git a/app/src/testDemoDebug/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png diff --git a/app/src/testDemoDebug/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png similarity index 100% rename from app/src/testDemoDebug/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png rename to app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png From eb2cccda9cf8885567cc652189961ea708538d77 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Tue, 19 Dec 2023 15:50:56 +0000 Subject: [PATCH 34/43] Update README.md --- README.md | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b71427dfe..6f13f5de2 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The app is currently in development. The `prodRelease` variant is [available on **Now in Android** displays content from the [Now in Android](https://developer.android.com/series/now-in-android) series. Users can browse for links to recent videos, articles and other content. Users can also follow topics they are interested -in. +in, and be notified when new content is published which matches interests they are following. ## Screenshots @@ -109,12 +109,42 @@ Examples: manipulate the state of the `Test` repository and verify the resulting behavior, instead of checking that specific repository methods were called. -## Screenshot tests +To run the tests execute the following gradle tasks: + +- `testDemoDebug` run all local tests against the `demoDebug` variant. +- `connectedDemoDebugAndroidTest` run all instrumented tests against the `demoDebug` variant. -**Now In Android** uses [Roborazzi](https://github.com/takahirom/roborazzi) to do screenshot tests -of certain screens and components. To run these tests, run the `verifyRoborazziDemoDebug` or -`recordRoborazziDemoDebug` tasks. Note that screenshots are recorded on CI, using Linux, and other -platforms might generate slightly different images, making the tests fail. +**Note:** You should not run `./gradlew test` or `./gradlew connectedAndroidTest` as this will execute +tests against _all_ build variants which is both unecessary and will result in failures as only the +`demoDebug` variant is supported. No other variants have any tests (although this might change in future). + +## Screenshot tests +A screenshot test takes a screenshot of a screen or a UI component within the app, and compares it +with a previously recorded screenshot which is known to be rendered correctly. + +For example, Now in Android has [screenshot tests](https://github.com/android/nowinandroid/blob/main/app/src/testDemoDebug/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt) +to verify that the navigation is displayed correctly on different screen sizes +([known correct screenshots](https://github.com/android/nowinandroid/tree/main/app/src/testDemoDebug/screenshots)). + +Now In Android uses [Roborazzi](https://github.com/takahirom/roborazzi) to run screenshot tests +of certain screens and UI components. When working with screenshot tests the following gradle tasks are useful: + +- `verifyRoborazziDemoDebug` run all screenshot tests, verifying the screenshots against the known +correct screenshots. +- `recordRoborazziDemoDebug` record new "known correct" screenshots. Use this command when you have +made changes to the UI and manually verified that they are rendered correctly. Screenshots will be +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 +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 +legitimate changes. + +For more information about screenshot testing +[check out this talk](https://www.droidcon.com/2023/11/15/easy-screenshot-testing-with-compose/). # UI The app was designed using [Material 3 guidelines](https://m3.material.io/). Learn more about the design process and From 769a65a585afa57fe67cd6caa9113c8ec88d9b58 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Tue, 19 Dec 2023 16:02:35 +0000 Subject: [PATCH 35/43] Don't run unit tests on prodDebug variant Change-Id: I0adf6c70b9634de876aed64400a7d3b4033983b3 --- .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 d47342c6a..d1d631117 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -75,7 +75,7 @@ jobs: # Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. - name: Run local tests if: always() - run: ./gradlew testDemoDebug testProdDebug :lint:test + run: ./gradlew testDemoDebug :lint:test # Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when # https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a # release build From 017c289b513ce2bfbf049f92dbf1214fd583ff96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:18:00 +0000 Subject: [PATCH 36/43] Bump lint from 31.1.3 to 31.2.0 Bumps `lint` from 31.1.3 to 31.2.0. Updates `com.android.tools.lint:lint-api` from 31.1.3 to 31.2.0 Updates `com.android.tools.lint:lint-checks` from 31.1.3 to 31.2.0 Updates `com.android.tools.lint:lint-tests` from 31.1.3 to 31.2.0 --- updated-dependencies: - dependency-name: com.android.tools.lint:lint-api dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.android.tools.lint:lint-checks dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.android.tools.lint:lint-tests 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 95fb23428..7333db3dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,7 +47,7 @@ kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.5.0" kotlinxSerializationJson = "1.6.0" ksp = "1.9.10-1.0.13" -lint = "31.1.3" +lint = "31.2.0" okhttp = "4.12.0" protobuf = "3.24.4" protobufPlugin = "0.9.4" From 6fab474b3f81722b960d234bd08c76d75cf61a6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:18:46 +0000 Subject: [PATCH 37/43] Bump hilt from 2.49 to 2.50 Bumps `hilt` from 2.49 to 2.50. Updates `com.google.dagger:hilt-android` from 2.49 to 2.50 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50) Updates `com.google.dagger:hilt-android-testing` from 2.49 to 2.50 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50) Updates `com.google.dagger:hilt-android-compiler` from 2.49 to 2.50 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50) Updates `com.google.dagger.hilt.android` from 2.49 to 2.50 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50) --- updated-dependencies: - dependency-name: com.google.dagger:hilt-android dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:hilt-android-testing dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:hilt-android-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger.hilt.android 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 95fb23428..df5db8cd0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ firebasePerfPlugin = "1.4.2" gmsPlugin = "4.4.0" googleOss = "17.0.1" googleOssPlugin = "0.10.6" -hilt = "2.49" +hilt = "2.50" hiltExt = "1.1.0" jacoco = "0.8.7" junit4 = "4.13.2" From a99dcdd03276eab2ea3a68f5db61c40d89c9592f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:19:42 +0000 Subject: [PATCH 38/43] Bump coil from 2.4.0 to 2.5.0 Bumps `coil` from 2.4.0 to 2.5.0. Updates `io.coil-kt:coil` from 2.4.0 to 2.5.0 - [Release notes](https://github.com/coil-kt/coil/releases) - [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md) - [Commits](https://github.com/coil-kt/coil/compare/2.4.0...2.5.0) Updates `io.coil-kt:coil-compose` from 2.4.0 to 2.5.0 - [Release notes](https://github.com/coil-kt/coil/releases) - [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md) - [Commits](https://github.com/coil-kt/coil/compare/2.4.0...2.5.0) Updates `io.coil-kt:coil-svg` from 2.4.0 to 2.5.0 - [Release notes](https://github.com/coil-kt/coil/releases) - [Changelog](https://github.com/coil-kt/coil/blob/main/CHANGELOG.md) - [Commits](https://github.com/coil-kt/coil/compare/2.4.0...2.5.0) --- updated-dependencies: - dependency-name: io.coil-kt:coil dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.coil-kt:coil-compose dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.coil-kt:coil-svg 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 95fb23428..6268707b8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ androidxTracing = "1.1.0" androidxUiAutomator = "2.2.0" androidxWindowManager = "1.1.0" androidxWork = "2.9.0-rc01" -coil = "2.4.0" +coil = "2.5.0" dependencyGuard = "0.4.3" firebaseBom = "32.4.0" firebaseCrashlyticsPlugin = "2.9.9" From 9620136fb3464355968511627d1114ffa0a47981 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:19:58 +0000 Subject: [PATCH 39/43] Bump room from 2.6.0 to 2.6.1 Bumps `room` from 2.6.0 to 2.6.1. Updates `androidx.room:room-compiler` from 2.6.0 to 2.6.1 Updates `androidx.room:room-ktx` from 2.6.0 to 2.6.1 Updates `androidx.room:room-runtime` from 2.6.0 to 2.6.1 --- updated-dependencies: - dependency-name: androidx.room:room-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.room:room-ktx dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: androidx.room:room-runtime 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 95fb23428..90e8bd2bd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -55,7 +55,7 @@ retrofit = "2.9.0" retrofitKotlinxSerializationJson = "1.0.0" robolectric = "4.11.1" roborazzi = "1.6.0" -room = "2.6.0" +room = "2.6.1" secrets = "2.0.1" truth = "1.1.5" turbine = "1.0.0" From 5fb48567a2a0ad37517fd19c5db52fe53348e96e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:20:43 +0000 Subject: [PATCH 40/43] Bump androidGradlePlugin from 8.1.3 to 8.2.0 Bumps `androidGradlePlugin` from 8.1.3 to 8.2.0. Updates `com.android.tools.build:gradle` from 8.1.3 to 8.2.0 Updates `com.android.application` from 8.1.3 to 8.2.0 Updates `com.android.library` from 8.1.3 to 8.2.0 Updates `com.android.test` from 8.1.3 to 8.2.0 --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.android.application dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.android.library dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.android.test dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 95fb23428..15ea9b0c8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanist = "0.32.0" androidDesugarJdkLibs = "2.0.3" # AGP and tools should be updated together -androidGradlePlugin = "8.1.3" +androidGradlePlugin = "8.2.0" androidTools = "31.1.3" androidxActivity = "1.8.0" androidxAppCompat = "1.6.1" From 74dac015264e6ff9198c90c8791042cb37d60648 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:20:59 +0000 Subject: [PATCH 41/43] Bump androidx.window:window from 1.1.0 to 1.2.0 Bumps androidx.window:window from 1.1.0 to 1.2.0. --- updated-dependencies: - dependency-name: androidx.window:window 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 95fb23428..2f529984d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ androidxTestRules = "1.5.0" androidxTestRunner = "1.5.2" androidxTracing = "1.1.0" androidxUiAutomator = "2.2.0" -androidxWindowManager = "1.1.0" +androidxWindowManager = "1.2.0" androidxWork = "2.9.0-rc01" coil = "2.4.0" dependencyGuard = "0.4.3" From 72c4c74fb53ff39e0b193d1a267e92a93c6608b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:21:06 +0000 Subject: [PATCH 42/43] Bump com.android.tools:desugar_jdk_libs from 2.0.3 to 2.0.4 Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.0.3 to 2.0.4. - [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/desugar_jdk_libs/commits) --- updated-dependencies: - dependency-name: com.android.tools:desugar_jdk_libs 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 95fb23428..94823336d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] accompanist = "0.32.0" -androidDesugarJdkLibs = "2.0.3" +androidDesugarJdkLibs = "2.0.4" # AGP and tools should be updated together androidGradlePlugin = "8.1.3" androidTools = "31.1.3" From b0f950e334d4ca63065f418d0a4d03bb215b07b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:22:19 +0000 Subject: [PATCH 43/43] Bump the kotlin-ksp-compose group with 7 updates Bumps the kotlin-ksp-compose group with 7 updates: | Package | From | To | | --- | --- | --- | | androidx.compose.compiler:compiler | `1.5.3` | `1.5.7` | | [org.jetbrains.kotlin:kotlin-stdlib-jdk8](https://github.com/JetBrains/kotlin) | `1.9.10` | `1.9.21` | | [org.jetbrains.kotlin:kotlin-gradle-plugin](https://github.com/JetBrains/kotlin) | `1.9.10` | `1.9.21` | | [org.jetbrains.kotlin.jvm](https://github.com/JetBrains/kotlin) | `1.9.10` | `1.9.21` | | [org.jetbrains.kotlin.plugin.serialization](https://github.com/JetBrains/kotlin) | `1.9.10` | `1.9.21` | | [com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin](https://github.com/google/ksp) | `1.9.10-1.0.13` | `1.9.21-1.0.16` | | [com.google.devtools.ksp](https://github.com/google/ksp) | `1.9.10-1.0.13` | `1.9.21-1.0.16` | Updates `androidx.compose.compiler:compiler` from 1.5.3 to 1.5.7 Updates `org.jetbrains.kotlin:kotlin-stdlib-jdk8` from 1.9.10 to 1.9.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.9.10...v1.9.21) Updates `org.jetbrains.kotlin:kotlin-gradle-plugin` from 1.9.10 to 1.9.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.9.10...v1.9.21) Updates `org.jetbrains.kotlin.jvm` from 1.9.10 to 1.9.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.9.10...v1.9.21) Updates `org.jetbrains.kotlin.plugin.serialization` from 1.9.10 to 1.9.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.9.10...v1.9.21) Updates `com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin` from 1.9.10-1.0.13 to 1.9.21-1.0.16 - [Release notes](https://github.com/google/ksp/releases) - [Commits](https://github.com/google/ksp/compare/1.9.10-1.0.13...1.9.21-1.0.16) Updates `com.google.devtools.ksp` from 1.9.10-1.0.13 to 1.9.21-1.0.16 - [Release notes](https://github.com/google/ksp/releases) - [Commits](https://github.com/google/ksp/compare/1.9.10-1.0.13...1.9.21-1.0.16) --- updated-dependencies: - dependency-name: androidx.compose.compiler:compiler dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: org.jetbrains.kotlin.jvm dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: org.jetbrains.kotlin.plugin.serialization dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose - dependency-name: com.google.devtools.ksp dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kotlin-ksp-compose ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65ddba6bc..95f3c7827 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ androidxActivity = "1.8.0" androidxAppCompat = "1.6.1" androidxBrowser = "1.6.0" androidxComposeBom = "2023.10.01" -androidxComposeCompiler = "1.5.3" +androidxComposeCompiler = "1.5.7" androidxComposeRuntimeTracing = "1.0.0-beta01" androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" @@ -42,11 +42,11 @@ hilt = "2.49" hiltExt = "1.1.0" jacoco = "0.8.7" junit4 = "4.13.2" -kotlin = "1.9.10" +kotlin = "1.9.21" kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.5.0" kotlinxSerializationJson = "1.6.0" -ksp = "1.9.10-1.0.13" +ksp = "1.9.21-1.0.16" lint = "31.2.0" okhttp = "4.12.0" protobuf = "3.24.4"