Merge remote-tracking branch 'origin/main' into jvm-alt

pull/923/head
Simon Marquis 4 months ago
commit e71ce1fc00

@ -25,9 +25,6 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v3
- name: Copy CI gradle.properties - name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
@ -38,7 +35,10 @@ jobs:
java-version: 17 java-version: 17
- name: Setup Gradle - name: Setup Gradle
uses: gradle/gradle-build-action@v3 uses: gradle/actions/setup-gradle@v3
with:
validate-wrappers: true
gradle-home-cache-cleanup: true
- name: Check build-logic - name: Check build-logic
run: ./gradlew check -p build-logic run: ./gradlew check -p build-logic
@ -187,7 +187,10 @@ jobs:
java-version: 17 java-version: 17
- name: Setup Gradle - name: Setup Gradle
uses: gradle/gradle-build-action@v3 uses: gradle/actions/setup-gradle@v3
with:
validate-wrappers: true
gradle-home-cache-cleanup: true
- name: Build projects and run instrumentation tests - name: Build projects and run instrumentation tests
uses: reactivecircus/android-emulator-runner@v2 uses: reactivecircus/android-emulator-runner@v2

@ -19,10 +19,8 @@ jobs:
ls /dev/kvm ls /dev/kvm
- name: Checkout - name: Checkout
uses: actions/checkout@v4
- name: Validate Gradle Wrapper uses: actions/checkout@v4
uses: gradle/wrapper-validation-action@v3
- name: Copy CI gradle.properties - name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
@ -33,6 +31,12 @@ jobs:
distribution: 'zulu' distribution: 'zulu'
java-version: 17 java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
validate-wrappers: true
gradle-home-cache-cleanup: true
- name: Install GMD image for baseline profile generation - name: Install GMD image for baseline profile generation
run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager "system-images;android-33;aosp_atd;x86_64" run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager "system-images;android-33;aosp_atd;x86_64"

@ -112,16 +112,14 @@ dependencies {
kspTest(libs.hilt.compiler) kspTest(libs.hilt.compiler)
testImplementation(projects.core.dataTest) testImplementation(projects.core.dataTest)
testImplementation(projects.core.testing)
testImplementation(projects.sync.syncTest)
testImplementation(libs.androidx.compose.ui.test)
testImplementation(libs.androidx.work.testing)
testImplementation(libs.hilt.android.testing) testImplementation(libs.hilt.android.testing)
testImplementation(projects.sync.syncTest)
testDemoImplementation(libs.robolectric) testDemoImplementation(libs.robolectric)
testDemoImplementation(libs.roborazzi) testDemoImplementation(libs.roborazzi)
testDemoImplementation(projects.core.screenshotTesting) testDemoImplementation(projects.core.screenshotTesting)
androidTestImplementation(kotlin("test"))
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
androidTestImplementation(projects.core.dataTest) androidTestImplementation(projects.core.dataTest)
androidTestImplementation(projects.core.datastoreTest) androidTestImplementation(projects.core.datastoreTest)

@ -83,26 +83,26 @@ androidx.hilt:hilt-navigation:1.2.0
androidx.hilt:hilt-work:1.1.0 androidx.hilt:hilt-work:1.1.0
androidx.interpolator:interpolator:1.0.0 androidx.interpolator:interpolator:1.0.0
androidx.legacy:legacy-support-core-utils:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0
androidx.lifecycle:lifecycle-common-java8:2.8.1 androidx.lifecycle:lifecycle-common-java8:2.8.3
androidx.lifecycle:lifecycle-common-jvm:2.8.1 androidx.lifecycle:lifecycle-common-jvm:2.8.3
androidx.lifecycle:lifecycle-common:2.8.1 androidx.lifecycle:lifecycle-common:2.8.3
androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.1 androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.3
androidx.lifecycle:lifecycle-livedata-core:2.8.1 androidx.lifecycle:lifecycle-livedata-core:2.8.3
androidx.lifecycle:lifecycle-livedata:2.8.1 androidx.lifecycle:lifecycle-livedata:2.8.3
androidx.lifecycle:lifecycle-process:2.8.1 androidx.lifecycle:lifecycle-process:2.8.3
androidx.lifecycle:lifecycle-runtime-android:2.8.1 androidx.lifecycle:lifecycle-runtime-android:2.8.3
androidx.lifecycle:lifecycle-runtime-compose-android:2.8.1 androidx.lifecycle:lifecycle-runtime-compose-android:2.8.3
androidx.lifecycle:lifecycle-runtime-compose:2.8.1 androidx.lifecycle:lifecycle-runtime-compose:2.8.3
androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.1 androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.3
androidx.lifecycle:lifecycle-runtime-ktx:2.8.1 androidx.lifecycle:lifecycle-runtime-ktx:2.8.3
androidx.lifecycle:lifecycle-runtime:2.8.1 androidx.lifecycle:lifecycle-runtime:2.8.3
androidx.lifecycle:lifecycle-service:2.8.1 androidx.lifecycle:lifecycle-service:2.8.3
androidx.lifecycle:lifecycle-viewmodel-android:2.8.1 androidx.lifecycle:lifecycle-viewmodel-android:2.8.3
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.1 androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.3
androidx.lifecycle:lifecycle-viewmodel-compose:2.8.1 androidx.lifecycle:lifecycle-viewmodel-compose:2.8.3
androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.1 androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.1 androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.3
androidx.lifecycle:lifecycle-viewmodel:2.8.1 androidx.lifecycle:lifecycle-viewmodel:2.8.3
androidx.loader:loader:1.0.0 androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
androidx.metrics:metrics-performance:1.0.0-alpha04 androidx.metrics:metrics-performance:1.0.0-alpha04
@ -147,12 +147,12 @@ com.google.android.gms:play-services-ads-identifier:18.0.0
com.google.android.gms:play-services-base:18.0.1 com.google.android.gms:play-services-base:18.0.1
com.google.android.gms:play-services-basement:18.1.0 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-cloud-messaging:17.0.1
com.google.android.gms:play-services-measurement-api:21.4.0 com.google.android.gms:play-services-measurement-api:21.5.0
com.google.android.gms:play-services-measurement-base:21.4.0 com.google.android.gms:play-services-measurement-base:21.5.0
com.google.android.gms:play-services-measurement-impl:21.4.0 com.google.android.gms:play-services-measurement-impl:21.5.0
com.google.android.gms:play-services-measurement-sdk-api:21.4.0 com.google.android.gms:play-services-measurement-sdk-api:21.5.0
com.google.android.gms:play-services-measurement-sdk:21.4.0 com.google.android.gms:play-services-measurement-sdk:21.5.0
com.google.android.gms:play-services-measurement:21.4.0 com.google.android.gms:play-services-measurement:21.5.0
com.google.android.gms:play-services-oss-licenses:17.0.1 com.google.android.gms:play-services-oss-licenses:17.0.1
com.google.android.gms:play-services-stats:17.0.2 com.google.android.gms:play-services-stats:17.0.2
com.google.android.gms:play-services-tasks:18.0.2 com.google.android.gms:play-services-tasks:18.0.2
@ -163,16 +163,15 @@ com.google.dagger:hilt-android:2.51.1
com.google.dagger:hilt-core:2.51.1 com.google.dagger:hilt-core:2.51.1
com.google.errorprone:error_prone_annotations:2.11.0 com.google.errorprone:error_prone_annotations:2.11.0
com.google.firebase:firebase-abt:21.1.1 com.google.firebase:firebase-abt:21.1.1
com.google.firebase:firebase-analytics-ktx:21.4.0 com.google.firebase:firebase-analytics-ktx:21.5.0
com.google.firebase:firebase-analytics:21.4.0 com.google.firebase:firebase-analytics:21.5.0
com.google.firebase:firebase-annotations:16.2.0 com.google.firebase:firebase-annotations:16.2.0
com.google.firebase:firebase-bom:32.4.0 com.google.firebase:firebase-bom:32.5.0
com.google.firebase:firebase-common-ktx:20.4.2 com.google.firebase:firebase-common-ktx:20.4.2
com.google.firebase:firebase-common:20.4.2 com.google.firebase:firebase-common:20.4.2
com.google.firebase:firebase-components:17.1.5 com.google.firebase:firebase-components:17.1.5
com.google.firebase:firebase-config:21.5.0 com.google.firebase:firebase-config:21.5.0
com.google.firebase:firebase-crashlytics-ktx:18.5.0 com.google.firebase:firebase-crashlytics:18.5.1
com.google.firebase:firebase-crashlytics:18.5.0
com.google.firebase:firebase-datatransport:18.1.8 com.google.firebase:firebase-datatransport:18.1.8
com.google.firebase:firebase-encoders-json:18.0.1 com.google.firebase:firebase-encoders-json:18.0.1
com.google.firebase:firebase-encoders-proto:16.0.0 com.google.firebase:firebase-encoders-proto:16.0.0
@ -181,9 +180,7 @@ com.google.firebase:firebase-iid-interop:17.1.0
com.google.firebase:firebase-installations-interop:17.1.1 com.google.firebase:firebase-installations-interop:17.1.1
com.google.firebase:firebase-installations:17.2.0 com.google.firebase:firebase-installations:17.2.0
com.google.firebase:firebase-measurement-connector:19.0.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.1
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-perf:20.5.0
com.google.firebase:firebase-sessions:1.1.0 com.google.firebase:firebase-sessions:1.1.0
com.google.firebase:protolite-well-known-types:18.0.0 com.google.firebase:protolite-well-known-types:18.0.0

@ -105,6 +105,7 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml'
application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml'
launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon=''
property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml'
uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.extensions'
uses-library-not-required:'androidx.window.sidecar' uses-library-not-required:'androidx.window.sidecar'
uses-library-not-required:'android.ext.adservices' uses-library-not-required:'android.ext.adservices'

@ -20,11 +20,13 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<!-- <!--
Firebase automatically adds the AD_ID permission, even though we don't use it. If you use this Firebase automatically adds these AD_ID and ADSERVICES permissions, even though we don't use them.
permission you must declare how you're using it to Google Play, otherwise the app will be If you use these permissions you must declare how you're using them to Google Play, otherwise the
rejected when publishing it. To avoid this we remove the permission entirely. app will be rejected when publishing it. To avoid this we remove the permissions entirely.
--> -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/> <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" tools:node="remove"/>
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID" tools:node="remove"/>
<application <application
android:name=".NiaApplication" android:name=".NiaApplication"

@ -30,10 +30,6 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
apply("nowinandroid.android.hilt") apply("nowinandroid.android.hilt")
} }
extensions.configure<LibraryExtension> { extensions.configure<LibraryExtension> {
defaultConfig {
testInstrumentationRunner =
"com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner"
}
testOptions.animationsDisabled = true testOptions.animationsDisabled = true
configureGradleManagedDevices(this) configureGradleManagedDevices(this)
} }

@ -40,6 +40,7 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
extensions.configure<LibraryExtension> { extensions.configure<LibraryExtension> {
configureKotlinAndroid(this) configureKotlinAndroid(this)
defaultConfig.targetSdk = 34 defaultConfig.targetSdk = 34
defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
testOptions.animationsDisabled = true testOptions.animationsDisabled = true
configureFlavors(this) configureFlavors(this)
configureGradleManagedDevices(this) configureGradleManagedDevices(this)
@ -52,6 +53,7 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
disableUnnecessaryAndroidTests(target) disableUnnecessaryAndroidTests(target)
} }
dependencies { dependencies {
add("androidTestImplementation", kotlin("test"))
add("testImplementation", kotlin("test")) add("testImplementation", kotlin("test"))
add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) add("implementation", libs.findLibrary("androidx.tracing.ktx").get())

@ -16,9 +16,9 @@
package com.google.samples.apps.nowinandroid.core.analytics package com.google.samples.apps.nowinandroid.core.analytics
import com.google.firebase.Firebase
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics import com.google.firebase.analytics.analytics
import com.google.firebase.ktx.Firebase
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides

@ -17,7 +17,7 @@
package com.google.samples.apps.nowinandroid.core.analytics package com.google.samples.apps.nowinandroid.core.analytics
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.logEvent import com.google.firebase.analytics.logEvent
import javax.inject.Inject import javax.inject.Inject
/** /**

@ -22,10 +22,6 @@ plugins {
} }
android { android {
defaultConfig {
testInstrumentationRunner =
"com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner"
}
namespace = "com.google.samples.apps.nowinandroid.core.database" namespace = "com.google.samples.apps.nowinandroid.core.database"
} }
@ -34,5 +30,7 @@ dependencies {
implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.datetime)
androidTestImplementation(projects.core.testing) androidTestImplementation(libs.androidx.test.core)
androidTestImplementation(libs.androidx.test.runner)
androidTestImplementation(libs.kotlinx.coroutines.test)
} }

@ -46,10 +46,7 @@ dependencies {
testImplementation(libs.hilt.android.testing) testImplementation(libs.hilt.android.testing)
testImplementation(libs.robolectric) testImplementation(libs.robolectric)
testImplementation(libs.roborazzi)
testImplementation(projects.core.screenshotTesting) testImplementation(projects.core.screenshotTesting)
testImplementation(projects.core.testing)
androidTestImplementation(libs.androidx.compose.ui.test) androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing)
} }

@ -24,11 +24,10 @@ android {
} }
dependencies { dependencies {
api(libs.bundles.androidx.compose.ui.test)
api(libs.roborazzi) api(libs.roborazzi)
implementation(libs.androidx.compose.ui.test) implementation(libs.androidx.compose.ui.test)
implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.ui.test)
implementation(libs.robolectric) implementation(libs.robolectric)
implementation(projects.core.common)
implementation(projects.core.designsystem) implementation(projects.core.designsystem)
} }

@ -15,7 +15,6 @@
*/ */
plugins { plugins {
alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library)
alias(libs.plugins.nowinandroid.android.library.compose)
alias(libs.plugins.nowinandroid.android.hilt) alias(libs.plugins.nowinandroid.android.hilt)
} }
@ -24,19 +23,15 @@ android {
} }
dependencies { dependencies {
api(kotlin("test")) api(libs.kotlinx.coroutines.test)
api(libs.androidx.compose.ui.test)
api(projects.core.analytics) api(projects.core.analytics)
api(projects.core.common)
api(projects.core.data) api(projects.core.data)
api(projects.core.model) api(projects.core.model)
api(projects.core.notifications) api(projects.core.notifications)
debugApi(libs.androidx.compose.ui.testManifest)
implementation(libs.androidx.test.rules) implementation(libs.androidx.test.rules)
implementation(libs.hilt.android.testing) implementation(libs.hilt.android.testing)
implementation(libs.kotlinx.coroutines.test)
implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.datetime)
implementation(projects.core.common)
implementation(projects.core.designsystem)
} }

@ -20,9 +20,6 @@ plugins {
} }
android { android {
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
namespace = "com.google.samples.apps.nowinandroid.core.ui" namespace = "com.google.samples.apps.nowinandroid.core.ui"
} }
@ -36,5 +33,6 @@ dependencies {
implementation(libs.coil.kt) implementation(libs.coil.kt)
implementation(libs.coil.kt.compose) implementation(libs.coil.kt.compose)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -1,25 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="440" height="116pt" viewBox="0 0 329.87 116"> <svg xmlns="http://www.w3.org/2000/svg" width="284" height="116pt" viewBox="0 0 213.49 116">
<g class="graph"> <g class="graph">
<path fill="#fff" d="M0 116V0h329.87v116z"/> <path fill="#fff" d="M0 116V0h213.49v116z"/>
<g class="node" transform="translate(4 112)"> <g class="node" transform="translate(4 112)">
<ellipse cx="151.81" cy="-90" fill="none" stroke="#000" rx="102.74" ry="18"/> <ellipse cx="102.74" cy="-90" fill="none" stroke="#000" rx="102.74" ry="18"/>
<text x="151.81" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:screenshot-testing</text> <text x="102.74" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:screenshot-testing</text>
</g> </g>
<g class="node" transform="translate(4 112)"> <g class="node" transform="translate(4 112)">
<ellipse cx="66.81" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/> <ellipse cx="102.74" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="66.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text> <text x="102.74" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g> </g>
<g stroke="red" stroke-width="2" class="edge"> <g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M135.24 39.95c-10.73 8.83-24.02 19.78-35.75 29.43"/> <path fill="none" d="M106.74 40.3v24.16"/>
<path fill="red" d="m103.19 70.87-9.95 3.66 5.5-9.06z"/> <path fill="red" d="m110.24 62.87-3.5 10-3.5-10z"/>
</g>
<g class="node" transform="translate(4 112)">
<ellipse cx="236.81" cy="-18" fill="none" stroke="#000" rx="85.06" ry="18"/>
<text x="236.81" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text>
</g>
<g stroke="#000" class="edge">
<path fill="none" d="M176.39 39.95c10.65 8.77 23.83 19.62 35.49 29.22"/>
<path d="m213.76 66.19 5.5 9.06-9.95-3.66z"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 944 B

@ -1,129 +1,121 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1408" height="260pt" viewBox="0 0 1055.83 260"> <svg xmlns="http://www.w3.org/2000/svg" width="860pt" height="260pt" viewBox="0 0 859.61 260">
<g class="graph"> <g class="graph">
<path fill="#fff" d="M0 260V0h1055.83v260z"/> <path fill="#fff" d="M0 260V0h859.61v260z"/>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="639.77" cy="-234" fill="none" stroke="#000" rx="58.77" ry="18"/> <ellipse cx="359.72" cy="-234" fill="none" stroke="#000" rx="58.77" ry="18"/>
<text x="639.77" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:testing</text> <text x="359.72" y="-229.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:testing</text>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="83.77" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/> <ellipse cx="93.72" cy="-90" fill="none" stroke="#000" rx="67.34" ry="18"/>
<text x="83.77" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text> <text x="93.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:analytics</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M599.68 34.26c-99.45 25.4-341.25 87.16-453.22 115.75"/> <path fill="none" d="M335.26 38.2c-47.85 25.54-144.45 77.11-198.56 105.99"/>
<path d="m147.41 153.38-10.55-.92 8.82-5.86z"/> <path d="m138.6 147.15-10.47 1.62 7.17-7.8z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="538.77" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/> <ellipse cx="359.72" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/>
<text x="538.77" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text> <text x="359.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text>
</g>
<g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M620.85 38.88c-13.75 9.53-31.43 21.79-46.5 32.23"/>
<path fill="red" d="m577.6 73.12-10.21 2.82 6.23-8.58z"/>
</g>
<g class="node" transform="translate(4 256)">
<ellipse cx="438.77" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="438.77" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M585.6 25.19C442.88 31.95 81.96 57.8 11.77 148c-9.83 12.63-10.74 24.14 0 36 54.57 60.24 283.94 21.97 364 36 4.59.8 9.32 1.76 14.06 2.79"/> <path fill="none" d="M308.51 28.66C191.4 42.71-64.42 85.41 21.72 184c39.25 44.92 207.29 25.48 266 36 5.22.93 10.62 1.98 16.02 3.08"/>
<path d="m390.38 219.32 8.95 5.67-10.53 1.15z"/> <path d="m304.24 219.61 9.07 5.49-10.51 1.36z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="740.77" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/> <ellipse cx="359.72" cy="-162" fill="none" stroke="#000" rx="49.1" ry="18"/>
<text x="740.77" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text> <text x="359.72" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:data</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M655.75 39.85c17.37 24.42 49.71 69.89 70.26 98.77"/> <path fill="none" d="M363.72 40.3v24.16"/>
<path d="m728.67 136.32 2.94 10.18-8.65-6.12z"/> <path fill="red" d="m367.22 62.87-3.5 10-3.5-10z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="631.77" cy="-18" fill="none" stroke="#000" rx="66.81" ry="18"/> <ellipse cx="584.72" cy="-18" fill="none" stroke="#000" rx="57.16" ry="18"/>
<text x="631.77" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:common</text> <text x="584.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:model</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M683.13 35.78C752.7 60.43 885.51 117.98 834.77 184c-15.85 20.62-77.96 34.92-128.63 43.43"/> <path fill="none" d="M418.59 28.91C533.39 42.54 792.65 80.29 844.72 148c51.56 67.05-95.5 83.82-187.67 87.86"/>
<path d="m706.79 230.87-10.43-1.86 9.31-5.05z"/> <path d="m657.46 239.35-10.13-3.11 9.85-3.89z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="962.77" cy="-162" fill="none" stroke="#000" rx="85.06" ry="18"/> <ellipse cx="750.72" cy="-90" fill="none" stroke="#000" rx="81.29" ry="18"/>
<text x="962.77" y="-157.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:designsystem</text> <text x="750.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:notifications</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M690.74 33.18c54.47 11.8 144.75 31.37 207.15 44.89"/> <path fill="none" d="M400.51 36.36c70.04 25.44 222.72 80.88 302.82 109.97"/>
<path d="m898.31 74.58 9.03 5.54-10.52 1.3z"/> <path d="m704.04 142.87 8.2 6.7-10.59-.12z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M496.32 100.33c-71.49 8.47-212.69 26.25-331.55 47.67-5.28.95-10.75 2.01-16.22 3.12"/> <path fill="none" d="M324.76 105.25c-44.63 11.75-118.2 31.11-169.45 44.6"/>
<path d="m149.35 154.53-10.51-1.38 9.08-5.47z"/> <path d="m156.44 153.17-10.56-.84 8.78-5.93z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M577.5 107.03c31.38 10.88 78.05 27.05 114.12 39.55"/> <path fill="none" d="M315.28 97.72c-35.07 4.8-80.25 17.47-103.56 50.28-9.26 13.04-9.26 22.96 0 36 11.01 15.5 53.26 29.5 90.43 39.21"/>
<path d="m692.72 143.26 8.3 6.58-10.59.03z"/> <path d="m302.68 219.73 8.83 5.85-10.56.94z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M571.46 108.81c15.73 9.02 34.23 22.27 45.31 39.19 11.72 17.89 16.35 41.74 18.12 60.25"/> <path fill="none" d="M407.47 102.59c58.44 10.17 165.19 28.86 256.25 45.41 6.39 1.16 13.02 2.38 19.66 3.6"/>
<path d="m638.37 207.79-2.79 10.22-4.19-9.72z"/> <path d="m683.85 148.13 9.19 5.26-10.47 1.62z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="235.77" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/> <ellipse cx="584.72" cy="-90" fill="none" stroke="#000" rx="66.26" ry="18"/>
<text x="235.77" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text> <text x="584.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:database</text>
</g> </g>
<g stroke="red" stroke-width="2" class="edge"> <g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M501.91 104.44c-51.9 11.99-141.89 32.78-201.73 46.6"/> <path fill="none" d="M400.37 106.4c36.7 11.42 93.54 29.1 135.19 42.06"/>
<path fill="red" d="m302.49 154.1-10.54-1.16 8.96-5.66z"/> <path fill="red" d="m534.93 144.6 8.51 6.31-10.58.37z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="387.77" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/> <ellipse cx="284.72" cy="-90" fill="none" stroke="#000" rx="67.87" ry="18"/>
<text x="387.77" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text> <text x="284.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M513.3 108.66c-22.31 10.34-53.28 24.7-78.37 36.33"/> <path fill="none" d="M346.33 111.24c-9.33 8.7-21.02 19.61-31.43 29.33"/>
<path d="m436.49 148.12-10.54 1.04 7.6-7.39z"/> <path d="m317.35 143.07-9.7 4.26 4.92-9.38z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="538.77" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/> <ellipse cx="435.72" cy="-90" fill="none" stroke="#000" rx="64.66" ry="18"/>
<text x="538.77" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text> <text x="435.72" y="-85.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:network</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M542.77 112.3v24.16"/> <path fill="none" d="M381.35 111.24c9.55 8.79 21.54 19.83 32.16 29.62"/>
<path d="m546.27 136.38-3.5 10-3.5-10z"/> <path d="m415.57 137.99 4.98 9.35-9.73-4.2z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M690.08 179.68c-54.11 12.54-136.55 31.65-191.16 44.31"/> <path fill="none" d="M694.53 178.33c-10.27 1.91-20.84 3.86-30.81 5.67-80.46 14.62-173.17 30.92-233.98 41.53"/>
<path d="m499.71 227.39-10.53-1.15 8.95-5.67z"/> <path d="m430.71 228.91-10.45-1.73 9.25-5.16z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M719.21 183.41c-14.59 9.37-33.08 21.25-48.94 31.43"/> <path fill="none" d="M718.29 182.36c-25.24 10.65-58.99 24.88-85.72 36.15"/>
<path d="m672.37 217.66-10.31 2.45 6.53-8.34z"/> <path d="m633.94 221.73-10.58.66 7.86-7.11z"/>
</g> </g>
<g stroke="red" stroke-width="2" class="edge"> <g stroke="red" stroke-width="2" class="edge">
<path fill="none" d="M279.39 180.66c33.05 11.4 80.24 27.67 115.41 39.8"/> <path fill="none" d="M588.72 184.3v24.16"/>
<path fill="red" d="m394.13 216.53 8.31 6.56-10.59.05z"/> <path fill="red" d="m592.22 206.87-3.5 10-3.5-10z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M404.12 183.95c5.95 8.16 13.21 18.14 19.84 27.23"/> <path fill="none" d="M306.5 183.59c9.27 8.65 20.79 19.41 31.06 28.99"/>
<path d="m426.59 208.84 3.06 10.15-8.72-6.02z"/> <path d="m339.79 209.87 4.92 9.38-9.7-4.26z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M436.52 179.84c40.5 11.62 100.3 28.77 143.81 41.26"/> <path fill="none" d="M338.6 178.64c53.46 12.47 138.16 32.24 193.94 45.25"/>
<path d="m581.2 217.7 8.65 6.12-10.58.61z"/> <path d="m533.22 220.46 8.95 5.68-10.54 1.13z"/>
</g> </g>
<g class="node" transform="translate(4 256)"> <g class="node" transform="translate(4 256)">
<ellipse cx="271.77" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/> <ellipse cx="183.72" cy="-18" fill="none" stroke="#000" rx="91.47" ry="18"/>
<text x="271.77" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text> <text x="183.72" y="-13.8" font-family="Times,serif" font-size="14" text-anchor="middle">:core:datastore-proto</text>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M365.45 182.88c-15.54 9.38-35.44 21.39-52.55 31.72"/> <path fill="none" d="M265.3 183.24c-13.2 9.14-29.89 20.71-44.41 30.77"/>
<path d="m314.86 217.5-10.37 2.17 6.76-8.17z"/> <path d="m223.18 216.68-10.21 2.82 6.22-8.57z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M519.58 183.24c-13.35 9.34-30.32 21.21-44.9 31.43"/> <path fill="none" d="M421.71 183.59c-9.39 8.65-21.07 19.41-31.48 28.99"/>
<path d="m476.93 217.36-10.2 2.87 6.19-8.61z"/> <path d="m392.71 215.06-9.73 4.2 4.99-9.35z"/>
</g> </g>
<g stroke="#000" class="edge"> <g stroke="#000" class="edge">
<path fill="none" d="M564.34 183.24c12.12 9.12 27.45 20.66 40.8 30.7"/> <path fill="none" d="M471.69 182.02c22.2 10.42 51.97 24.41 75.93 35.67"/>
<path d="m606.9 210.89 5.89 8.81-10.1-3.22z"/> <path d="m548.9 214.42 7.56 7.42-10.54-1.08z"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

@ -29,5 +29,6 @@ dependencies {
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -33,8 +33,8 @@ dependencies {
testImplementation(libs.hilt.android.testing) testImplementation(libs.hilt.android.testing)
testImplementation(libs.robolectric) testImplementation(libs.robolectric)
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
testImplementation(projects.core.screenshotTesting) testDemoImplementation(projects.core.screenshotTesting)
testDemoImplementation(libs.roborazzi)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -29,5 +29,6 @@ dependencies {
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -31,6 +31,7 @@ dependencies {
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -31,5 +31,5 @@ dependencies {
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
androidTestImplementation(projects.core.testing) androidTestImplementation(libs.bundles.androidx.compose.ui.test)
} }

@ -29,5 +29,6 @@ dependencies {
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
androidTestImplementation(libs.bundles.androidx.compose.ui.test)
androidTestImplementation(projects.core.testing) androidTestImplementation(projects.core.testing)
} }

@ -17,7 +17,7 @@ androidxCoreSplashscreen = "1.0.1"
androidxDataStore = "1.0.0" androidxDataStore = "1.0.0"
androidxEspresso = "3.5.1" androidxEspresso = "3.5.1"
androidxHiltNavigationCompose = "1.2.0" androidxHiltNavigationCompose = "1.2.0"
androidxLifecycle = "2.8.1" androidxLifecycle = "2.8.3"
androidxMacroBenchmark = "1.2.4" androidxMacroBenchmark = "1.2.4"
androidxMetrics = "1.0.0-alpha04" androidxMetrics = "1.0.0-alpha04"
androidxNavigation = "2.8.0-alpha06" androidxNavigation = "2.8.0-alpha06"
@ -32,7 +32,7 @@ androidxWindowManager = "1.3.0-alpha03"
androidxWork = "2.9.0" androidxWork = "2.9.0"
coil = "2.6.0" coil = "2.6.0"
dependencyGuard = "0.5.0" dependencyGuard = "0.5.0"
firebaseBom = "32.4.0" firebaseBom = "32.5.0"
firebaseCrashlyticsPlugin = "2.9.9" firebaseCrashlyticsPlugin = "2.9.9"
firebasePerfPlugin = "1.4.2" firebasePerfPlugin = "1.4.2"
gmsPlugin = "4.4.1" gmsPlugin = "4.4.1"
@ -60,6 +60,9 @@ secrets = "2.0.1"
truth = "1.4.2" truth = "1.4.2"
turbine = "1.1.0" turbine = "1.1.0"
[bundles]
androidx-compose-ui-test = ["androidx-compose-ui-test", "androidx-compose-ui-testManifest"]
[libraries] [libraries]
accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" }
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" } android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" }
@ -111,9 +114,10 @@ coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "
coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" } firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" }
firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" }
firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging-ktx" } firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging" }
firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" } firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" }
firebase-performance = { group = "com.google.firebase", name = "firebase-perf-ktx" } firebase-performance = { group = "com.google.firebase", name = "firebase-perf" }
firebase-performance-gradle = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" }
google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" } google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" }
google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }

@ -16,9 +16,9 @@
package com.google.samples.apps.nowinandroid.sync.di package com.google.samples.apps.nowinandroid.sync.di
import com.google.firebase.ktx.Firebase import com.google.firebase.Firebase
import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.ktx.messaging import com.google.firebase.messaging.messaging
import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.core.data.util.SyncManager
import com.google.samples.apps.nowinandroid.sync.status.FirebaseSyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.FirebaseSyncSubscriber
import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber

Loading…
Cancel
Save