From 171e2e83f5536763bc19a6fdaf740031ee242d59 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 17:42:45 +0100 Subject: [PATCH 1/5] Reduce overall build complexity - Reduce the visibility of multiple Hilt `Module`s and implementations of public interfaces - Correctly configure the visibility of dependencies: - `api` when it's part of it's public `api` - `implementation` when it's part of it's internal `implementation` - Remove unnecessary dependencies in build.gradle.kts files - Remove unnecessary dependencies provided by plugins - Remove unnecessary applied plugins (i.e. roborazzi) - Sort dependencies in `build.gradle.kts` - Delete unused entries in `libs.versions.toml` --- app-nia-catalog/build.gradle.kts | 3 +- app/build.gradle.kts | 43 ++++++++----------- ...droidApplicationComposeConventionPlugin.kt | 2 - .../kotlin/AndroidFeatureConventionPlugin.kt | 16 ------- .../kotlin/AndroidHiltConventionPlugin.kt | 2 - .../AndroidLibraryComposeConventionPlugin.kt | 2 - .../kotlin/AndroidLibraryConventionPlugin.kt | 3 -- .../apps/nowinandroid/AndroidCompose.kt | 5 --- build.gradle.kts | 1 + core/analytics/build.gradle.kts | 7 ++- .../core/analytics/AnalyticsModule.kt | 2 +- .../core/analytics/StubAnalyticsHelper.kt | 2 +- .../core/analytics/AnalyticsModule.kt | 2 +- .../core/analytics/FirebaseAnalyticsHelper.kt | 2 +- core/common/build.gradle.kts | 4 +- .../core/network/di/CoroutineScopesModule.kt | 2 +- core/data-test/build.gradle.kts | 4 +- core/data/build.gradle.kts | 16 +++---- .../nowinandroid/core/data/di/DataModule.kt | 14 +++--- .../di/UserNewsResourceRepositoryModule.kt | 2 +- .../data/repository/AnalyticsExtensions.kt | 12 +++--- .../DefaultRecentSearchRepository.kt | 2 +- .../DefaultSearchContentsRepository.kt | 2 +- .../repository/OfflineFirstNewsRepository.kt | 2 +- .../OfflineFirstTopicsRepository.kt | 2 +- .../OfflineFirstUserDataRepository.kt | 2 +- .../util/ConnectivityManagerNetworkMonitor.kt | 2 +- core/database/build.gradle.kts | 3 +- .../nowinandroid/core/database/DaosModule.kt | 2 +- .../core/database/DatabaseMigrations.kt | 2 +- .../core/database/DatabaseModule.kt | 2 +- .../nowinandroid/core/database/NiaDatabase.kt | 2 +- .../core/database/util/InstantConverter.kt | 2 +- core/datastore-proto/build.gradle.kts | 2 +- core/datastore-test/build.gradle.kts | 7 +-- .../datastore/test/TestDataStoreModule.kt | 2 +- core/datastore/build.gradle.kts | 9 ++-- .../core/datastore/IntToStringIdsMigration.kt | 2 +- .../core/datastore/ListToMapMigration.kt | 2 +- .../core/datastore/di/DataStoreModule.kt | 2 +- core/designsystem/build.gradle.kts | 10 ++++- core/domain/build.gradle.kts | 9 ++-- core/model/build.gradle.kts | 2 +- core/network/build.gradle.kts | 10 ++--- .../core/network/di/FlavoredNetworkModule.kt | 2 +- .../core/network/di/NetworkModule.kt | 2 +- .../network/retrofit/RetrofitNiaNetwork.kt | 2 +- .../core/network/di/FlavoredNetworkModule.kt | 2 +- core/notifications/build.gradle.kts | 13 ++---- .../core/notifications/NotificationsModule.kt | 2 +- .../core/notifications/NoOpNotifier.kt | 2 +- .../core/notifications/SystemTrayNotifier.kt | 2 +- .../core/notifications/NotificationsModule.kt | 2 +- core/testing/build.gradle.kts | 29 ++++++------- .../core/testing/di/TestDispatcherModule.kt | 2 +- .../core/testing/di/TestDispatchersModule.kt | 2 +- core/ui/build.gradle.kts | 21 ++------- feature/bookmarks/build.gradle.kts | 6 ++- feature/foryou/build.gradle.kts | 10 ++++- feature/interests/build.gradle.kts | 9 ++++ feature/search/build.gradle.kts | 7 ++- feature/settings/build.gradle.kts | 9 ++-- feature/topic/build.gradle.kts | 6 ++- gradle/libs.versions.toml | 15 +------ sync/sync-test/build.gradle.kts | 4 +- .../core/sync/test/NeverSyncingSyncManager.kt | 2 +- .../core/sync/test/TestSyncModule.kt | 2 +- sync/work/build.gradle.kts | 20 ++++----- .../apps/nowinandroid/sync/di/SyncModule.kt | 6 +-- .../sync/status/StubSyncSubscriber.kt | 2 +- .../sync/status/WorkManagerSyncManager.kt | 2 +- .../sync/workers/AnalyticsExtensions.kt | 4 +- .../nowinandroid/sync/workers/SyncWorker.kt | 2 +- .../apps/nowinandroid/sync/di/SyncModule.kt | 8 ++-- .../sync/services/SyncNotificationsService.kt | 2 +- .../sync/status/FirebaseSyncSubscriber.kt | 2 +- 76 files changed, 191 insertions(+), 238 deletions(-) diff --git a/app-nia-catalog/build.gradle.kts b/app-nia-catalog/build.gradle.kts index e02f6bc0b..0991ea0c5 100644 --- a/app-nia-catalog/build.gradle.kts +++ b/app-nia-catalog/build.gradle.kts @@ -65,9 +65,10 @@ android { } dependencies { + implementation(libs.androidx.activity.compose) + implementation(projects.core.designsystem) implementation(projects.core.ui) - implementation(libs.androidx.activity.compose) } dependencyGuard { diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b003c4a54..38166f7ff 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.roborazzi) } android { @@ -96,47 +97,41 @@ dependencies { implementation(projects.core.data) implementation(projects.core.model) implementation(projects.core.analytics) - implementation(projects.sync.work) - androidTestImplementation(projects.core.testing) - androidTestImplementation(projects.core.datastoreTest) - androidTestImplementation(projects.core.dataTest) - androidTestImplementation(projects.core.network) - androidTestImplementation(libs.androidx.navigation.testing) - androidTestImplementation(libs.accompanist.testharness) - androidTestImplementation(kotlin("test")) - debugImplementation(libs.androidx.compose.ui.testManifest) - debugImplementation(projects.uiTestHiltManifest) - implementation(libs.androidx.activity.compose) - implementation(libs.androidx.appcompat) implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.splashscreen) - implementation(libs.androidx.compose.runtime) + implementation(libs.androidx.tracing.ktx) implementation(libs.androidx.lifecycle.runtimeCompose) - implementation(libs.androidx.compose.runtime.tracing) implementation(libs.androidx.compose.material3.windowSizeClass) - implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.navigation.compose) - implementation(libs.androidx.window.manager) implementation(libs.androidx.profileinstaller) implementation(libs.kotlinx.coroutines.guava) implementation(libs.coil.kt) - baselineProfile(project(":benchmarks")) + debugImplementation(libs.androidx.compose.ui.testManifest) + debugImplementation(projects.uiTestHiltManifest) + + kspTest(libs.hilt.compiler) - // Core functions - testImplementation(projects.core.testing) - testImplementation(projects.core.datastoreTest) testImplementation(projects.core.dataTest) - testImplementation(projects.core.network) - testImplementation(libs.androidx.navigation.testing) + testImplementation(projects.core.testing) testImplementation(libs.accompanist.testharness) + testImplementation(libs.hilt.android.testing) testImplementation(libs.work.testing) - testImplementation(kotlin("test")) - kspTest(libs.hilt.compiler) + testDemoImplementation(libs.robolectric) + testDemoImplementation(libs.roborazzi) + + androidTestImplementation(projects.core.testing) + androidTestImplementation(projects.core.dataTest) + androidTestImplementation(projects.core.datastoreTest) + androidTestImplementation(libs.androidx.navigation.testing) + androidTestImplementation(libs.accompanist.testharness) + androidTestImplementation(libs.hilt.android.testing) + + baselineProfile(projects.benchmarks) } baselineProfile { diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index bb79715e4..3eeed97cf 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -24,8 +24,6 @@ class AndroidApplicationComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { pluginManager.apply("com.android.application") - // Screenshot Tests - pluginManager.apply("io.github.takahirom.roborazzi") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index cc42d60fd..7a334beb3 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -21,7 +21,6 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.kotlin class AndroidFeatureConventionPlugin : Plugin { override fun apply(target: Project) { @@ -39,27 +38,12 @@ class AndroidFeatureConventionPlugin : Plugin { } dependencies { - add("implementation", project(":core:model")) add("implementation", project(":core:ui")) add("implementation", project(":core:designsystem")) - add("implementation", project(":core:data")) - add("implementation", project(":core:common")) - add("implementation", project(":core:domain")) - add("implementation", project(":core:analytics")) - - add("testImplementation", kotlin("test")) - add("testImplementation", project(":core:testing")) - add("androidTestImplementation", kotlin("test")) - add("androidTestImplementation", project(":core:testing")) - - add("implementation", libs.findLibrary("coil.kt").get()) - add("implementation", libs.findLibrary("coil.kt.compose").get()) add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get()) add("implementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) add("implementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) - - add("implementation", libs.findLibrary("kotlinx.coroutines.android").get()) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index b24594570..fcb4f823e 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -30,8 +30,6 @@ class AndroidHiltConventionPlugin : Plugin { dependencies { "implementation"(libs.findLibrary("hilt.android").get()) "ksp"(libs.findLibrary("hilt.compiler").get()) - "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) - "kspTest"(libs.findLibrary("hilt.compiler").get()) } } diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 05f442354..dd9eead63 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -26,8 +26,6 @@ class AndroidLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { pluginManager.apply("com.android.library") - // Screenshot Tests - pluginManager.apply("io.github.takahirom.roborazzi") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index ef84cfbb4..c4d4a8fc4 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -48,9 +48,6 @@ class AndroidLibraryConventionPlugin : Plugin { } dependencies { add("testImplementation", kotlin("test")) - add("testImplementation", project(":core:testing")) - add("androidTestImplementation", kotlin("test")) - add("androidTestImplementation", project(":core:testing")) } } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 614d4f2d0..039987cac 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -41,11 +41,6 @@ internal fun Project.configureAndroidCompose( val bom = libs.findLibrary("androidx-compose-bom").get() add("implementation", platform(bom)) add("androidTestImplementation", platform(bom)) - // Add ComponentActivity to debug manifest - add("debugImplementation", libs.findLibrary("androidx.compose.ui.testManifest").get()) - // Screenshot Tests on JVM - add("testImplementation", libs.findLibrary("robolectric").get()) - add("testImplementation", libs.findLibrary("roborazzi").get()) } testOptions { diff --git a/build.gradle.kts b/build.gradle.kts index a2c39f493..647c8f5d4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,6 +32,7 @@ buildscript { // Lists all plugins used throughout the project without applying them. plugins { alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false alias(libs.plugins.android.test) apply false alias(libs.plugins.baselineprofile) apply false alias(libs.plugins.kotlin.jvm) apply false diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index 0f712085c..023574e6f 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -24,9 +24,8 @@ android { } dependencies { - implementation(platform(libs.firebase.bom)) implementation(libs.androidx.compose.runtime) - implementation(libs.androidx.core.ktx) - implementation(libs.firebase.analytics) - implementation(libs.kotlinx.coroutines.android) + + prodImplementation(platform(libs.firebase.bom)) + prodImplementation(libs.firebase.analytics) } diff --git a/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 78ebec9e5..4ad6b6dc2 100644 --- a/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class AnalyticsModule { +internal abstract class AnalyticsModule { @Binds abstract fun bindsAnalyticsHelper(analyticsHelperImpl: StubAnalyticsHelper): AnalyticsHelper } diff --git a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt index 2ff022287..f570be4a9 100644 --- a/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt +++ b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt @@ -27,7 +27,7 @@ private const val TAG = "StubAnalyticsHelper" * analytics events should be sent to a backend. */ @Singleton -class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper { +internal class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper { override fun logEvent(event: AnalyticsEvent) { Log.d(TAG, "Received analytics event: $event") } diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 9f875ae6d..957b987d9 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -28,7 +28,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -abstract class AnalyticsModule { +internal abstract class AnalyticsModule { @Binds abstract fun bindsAnalyticsHelper(analyticsHelperImpl: FirebaseAnalyticsHelper): AnalyticsHelper diff --git a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt index 75dfbc468..5a4b7f362 100644 --- a/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt @@ -23,7 +23,7 @@ import javax.inject.Inject /** * Implementation of `AnalyticsHelper` which logs events to a Firebase backend. */ -class FirebaseAnalyticsHelper @Inject constructor( +internal class FirebaseAnalyticsHelper @Inject constructor( private val firebaseAnalytics: FirebaseAnalytics, ) : AnalyticsHelper { diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index d539d1892..51ae627dc 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -24,6 +24,6 @@ android { } dependencies { - implementation(libs.kotlinx.coroutines.android) - testImplementation(projects.core.testing) + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.turbine) } \ No newline at end of file diff --git a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt index c265394a8..6e7ca6bb3 100644 --- a/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt +++ b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt @@ -34,7 +34,7 @@ annotation class ApplicationScope @Module @InstallIn(SingletonComponent::class) -object CoroutineScopesModule { +internal object CoroutineScopesModule { @Provides @Singleton @ApplicationScope diff --git a/core/data-test/build.gradle.kts b/core/data-test/build.gradle.kts index 7ca3ecd0d..b166df288 100644 --- a/core/data-test/build.gradle.kts +++ b/core/data-test/build.gradle.kts @@ -24,6 +24,6 @@ android { dependencies { api(projects.core.data) - implementation(projects.core.testing) - implementation(projects.core.common) + + implementation(libs.hilt.android.testing) } diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index e730a9eb3..142637ff9 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -31,18 +31,16 @@ android { } dependencies { + api(projects.core.common) + api(projects.core.database) + api(projects.core.datastore) + api(projects.core.network) + implementation(projects.core.analytics) - implementation(projects.core.common) - implementation(projects.core.database) - implementation(projects.core.datastore) - implementation(projects.core.model) - implementation(projects.core.network) implementation(projects.core.notifications) - implementation(libs.androidx.core.ktx) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) - implementation(libs.kotlinx.serialization.json) + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.kotlinx.serialization.json) testImplementation(projects.core.datastoreTest) testImplementation(projects.core.testing) } diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt index 26f0bbc51..e135d7f58 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt @@ -35,35 +35,35 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface DataModule { +abstract class DataModule { @Binds - fun bindsTopicRepository( + internal abstract fun bindsTopicRepository( topicsRepository: OfflineFirstTopicsRepository, ): TopicsRepository @Binds - fun bindsNewsResourceRepository( + internal abstract fun bindsNewsResourceRepository( newsRepository: OfflineFirstNewsRepository, ): NewsRepository @Binds - fun bindsUserDataRepository( + internal abstract fun bindsUserDataRepository( userDataRepository: OfflineFirstUserDataRepository, ): UserDataRepository @Binds - fun bindsRecentSearchRepository( + internal abstract fun bindsRecentSearchRepository( recentSearchRepository: DefaultRecentSearchRepository, ): RecentSearchRepository @Binds - fun bindsSearchContentsRepository( + internal abstract fun bindsSearchContentsRepository( searchContentsRepository: DefaultSearchContentsRepository, ): SearchContentsRepository @Binds - fun bindsNetworkMonitor( + internal abstract fun bindsNetworkMonitor( networkMonitor: ConnectivityManagerNetworkMonitor, ): NetworkMonitor } diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt index 1a7a80fff..7f4e27b41 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt @@ -25,7 +25,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface UserNewsResourceRepositoryModule { +internal interface UserNewsResourceRepositoryModule { @Binds fun bindsUserNewsResourceRepository( userDataRepository: CompositeUserNewsResourceRepository, diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt index d36f509d9..3d2f657dd 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt @@ -20,7 +20,7 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper -fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBookmarked: Boolean) { +internal fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBookmarked: Boolean) { val eventType = if (isBookmarked) "news_resource_saved" else "news_resource_unsaved" val paramKey = if (isBookmarked) "saved_news_resource_id" else "unsaved_news_resource_id" logEvent( @@ -33,7 +33,7 @@ fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBoo ) } -fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: Boolean) { +internal fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: Boolean) { val eventType = if (isFollowed) "topic_followed" else "topic_unfollowed" val paramKey = if (isFollowed) "followed_topic_id" else "unfollowed_topic_id" logEvent( @@ -46,7 +46,7 @@ fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: B ) } -fun AnalyticsHelper.logThemeChanged(themeName: String) = +internal fun AnalyticsHelper.logThemeChanged(themeName: String) = logEvent( AnalyticsEvent( type = "theme_changed", @@ -56,7 +56,7 @@ fun AnalyticsHelper.logThemeChanged(themeName: String) = ), ) -fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = +internal fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = logEvent( AnalyticsEvent( type = "dark_theme_config_changed", @@ -66,7 +66,7 @@ fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = ), ) -fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = +internal fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = logEvent( AnalyticsEvent( type = "dynamic_color_preference_changed", @@ -76,7 +76,7 @@ fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = ), ) -fun AnalyticsHelper.logOnboardingStateChanged(shouldHideOnboarding: Boolean) { +internal fun AnalyticsHelper.logOnboardingStateChanged(shouldHideOnboarding: Boolean) { val eventType = if (shouldHideOnboarding) "onboarding_complete" else "onboarding_reset" logEvent( AnalyticsEvent(type = eventType), diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt index 702c2dcd2..2e5c4463b 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.flow.map import kotlinx.datetime.Clock import javax.inject.Inject -class DefaultRecentSearchRepository @Inject constructor( +internal class DefaultRecentSearchRepository @Inject constructor( private val recentSearchQueryDao: RecentSearchQueryDao, ) : RecentSearchRepository { override suspend fun insertOrReplaceRecentSearch(searchQuery: String) { diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt index dc3caa143..3bacb8a14 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt @@ -36,7 +36,7 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext import javax.inject.Inject -class DefaultSearchContentsRepository @Inject constructor( +internal class DefaultSearchContentsRepository @Inject constructor( private val newsResourceDao: NewsResourceDao, private val newsResourceFtsDao: NewsResourceFtsDao, private val topicDao: TopicDao, diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt index ce395ad1c..d33c904e5 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt @@ -45,7 +45,7 @@ private const val SYNC_BATCH_SIZE = 40 * Disk storage backed implementation of the [NewsRepository]. * Reads are exclusively from local storage to support offline access. */ -class OfflineFirstNewsRepository @Inject constructor( +internal class OfflineFirstNewsRepository @Inject constructor( private val niaPreferencesDataSource: NiaPreferencesDataSource, private val newsResourceDao: NewsResourceDao, private val topicDao: TopicDao, diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt index 13dd19e49..5c8cecce8 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt @@ -34,7 +34,7 @@ import javax.inject.Inject * Disk storage backed implementation of the [TopicsRepository]. * Reads are exclusively from local storage to support offline access. */ -class OfflineFirstTopicsRepository @Inject constructor( +internal class OfflineFirstTopicsRepository @Inject constructor( private val topicDao: TopicDao, private val network: NiaNetworkDataSource, ) : TopicsRepository { diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt index a6e41c9da..c0b1bcc33 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt @@ -25,7 +25,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserData import kotlinx.coroutines.flow.Flow import javax.inject.Inject -class OfflineFirstUserDataRepository @Inject constructor( +internal class OfflineFirstUserDataRepository @Inject constructor( private val niaPreferencesDataSource: NiaPreferencesDataSource, private val analyticsHelper: AnalyticsHelper, ) : UserDataRepository { diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt index c88125be8..e9599c555 100644 --- a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt @@ -33,7 +33,7 @@ import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.conflate import javax.inject.Inject -class ConnectivityManagerNetworkMonitor @Inject constructor( +internal class ConnectivityManagerNetworkMonitor @Inject constructor( @ApplicationContext private val context: Context, ) : NetworkMonitor { override val isOnline: Flow = callbackFlow { diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index a1075286d..4a6bcb66a 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -30,9 +30,8 @@ android { } dependencies { - implementation(projects.core.model) + api(projects.core.model) - implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.datetime) androidTestImplementation(projects.core.testing) diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt index 34840a733..afbbf42e6 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt @@ -28,7 +28,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -object DaosModule { +internal object DaosModule { @Provides fun providesTopicsDao( database: NiaDatabase, diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt index 09e0849fe..4e396c9e2 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt @@ -28,7 +28,7 @@ import androidx.room.migration.AutoMigrationSpec * from and Y is the schema version you're migrating to. The class should implement * `AutoMigrationSpec`. */ -object DatabaseMigrations { +internal object DatabaseMigrations { @RenameColumn( tableName = "topics", diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt index 7d89cd1ac..c6e33f284 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt @@ -27,7 +27,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object DatabaseModule { +internal object DatabaseModule { @Provides @Singleton fun providesNiaDatabase( diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt index fd6b75e49..87fd82af1 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt @@ -63,7 +63,7 @@ import com.google.samples.apps.nowinandroid.core.database.util.InstantConverter @TypeConverters( InstantConverter::class, ) -abstract class NiaDatabase : RoomDatabase() { +internal abstract class NiaDatabase : RoomDatabase() { abstract fun topicDao(): TopicDao abstract fun newsResourceDao(): NewsResourceDao abstract fun topicFtsDao(): TopicFtsDao diff --git a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt index 4e880886c..0b79c2099 100644 --- a/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.core.database.util import androidx.room.TypeConverter import kotlinx.datetime.Instant -class InstantConverter { +internal class InstantConverter { @TypeConverter fun longToInstant(value: Long?): Instant? = value?.let(Instant::fromEpochMilliseconds) diff --git a/core/datastore-proto/build.gradle.kts b/core/datastore-proto/build.gradle.kts index 157b5336e..511518dde 100644 --- a/core/datastore-proto/build.gradle.kts +++ b/core/datastore-proto/build.gradle.kts @@ -51,5 +51,5 @@ androidComponents.beforeVariants { } dependencies { - implementation(libs.protobuf.kotlin.lite) + api(libs.protobuf.kotlin.lite) } diff --git a/core/datastore-test/build.gradle.kts b/core/datastore-test/build.gradle.kts index 04b15f044..53e5e2c0c 100644 --- a/core/datastore-test/build.gradle.kts +++ b/core/datastore-test/build.gradle.kts @@ -23,10 +23,7 @@ android { } dependencies { - api(projects.core.datastore) - api(libs.androidx.dataStore.core) - - implementation(libs.protobuf.kotlin.lite) + implementation(libs.hilt.android.testing) implementation(projects.core.common) - implementation(projects.core.testing) + implementation(projects.core.datastore) } diff --git a/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt index b86003e83..295b2978a 100644 --- a/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt +++ b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt @@ -35,7 +35,7 @@ import javax.inject.Singleton components = [SingletonComponent::class], replaces = [DataStoreModule::class], ) -object TestDataStoreModule { +internal object TestDataStoreModule { @Provides @Singleton diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index afe036640..34ea5ee78 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -33,13 +33,12 @@ android { } dependencies { + api(libs.androidx.dataStore.core) api(projects.core.datastoreProto) + api(projects.core.model) + implementation(projects.core.common) - implementation(projects.core.model) - implementation(libs.androidx.dataStore.core) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.protobuf.kotlin.lite) testImplementation(projects.core.datastoreTest) - testImplementation(projects.core.testing) + testImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt index 98632c652..ef9c1dd03 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt @@ -21,7 +21,7 @@ import androidx.datastore.core.DataMigration /** * Migrates saved ids from [Int] to [String] types */ -object IntToStringIdsMigration : DataMigration { +internal object IntToStringIdsMigration : DataMigration { override suspend fun cleanUp() = Unit diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt index 5bff23340..faa491e74 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt @@ -21,7 +21,7 @@ import androidx.datastore.core.DataMigration /** * Migrates from using lists to maps for user data. */ -object ListToMapMigration : DataMigration { +internal object ListToMapMigration : DataMigration { override suspend fun cleanUp() = Unit diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt index ac9eaf767..8e0d7d4d8 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt @@ -41,7 +41,7 @@ object DataStoreModule { @Provides @Singleton - fun providesUserPreferencesDataStore( + internal fun providesUserPreferencesDataStore( @ApplicationContext context: Context, @Dispatcher(IO) ioDispatcher: CoroutineDispatcher, @ApplicationScope scope: CoroutineScope, diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index 7bd1d12d8..d68117d06 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -17,6 +17,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.compose) alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.roborazzi) } android { @@ -39,8 +40,15 @@ dependencies { debugApi(libs.androidx.compose.ui.tooling) - implementation(libs.androidx.core.ktx) implementation(libs.coil.kt.compose) + testImplementation(libs.androidx.compose.ui.test) + testImplementation(libs.accompanist.testharness) + testImplementation(libs.hilt.android.testing) + testImplementation(libs.robolectric) + testImplementation(libs.roborazzi) + testImplementation(projects.core.testing) + + androidTestImplementation(libs.androidx.compose.ui.test) androidTestImplementation(projects.core.testing) } diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts index b81d62102..191877459 100644 --- a/core/domain/build.gradle.kts +++ b/core/domain/build.gradle.kts @@ -24,13 +24,10 @@ android { } dependencies { - implementation(projects.core.data) - implementation(projects.core.model) - implementation(libs.hilt.android) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) + api(projects.core.data) + api(projects.core.model) - ksp(libs.hilt.compiler) + implementation(libs.javax.inject) testImplementation(projects.core.testing) } \ No newline at end of file diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts index 393e3aa7d..5d6cabfdf 100644 --- a/core/model/build.gradle.kts +++ b/core/model/build.gradle.kts @@ -19,5 +19,5 @@ plugins { } dependencies { - implementation(libs.kotlinx.datetime) + api(libs.kotlinx.datetime) } diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index dce97031f..689a99e73 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -39,16 +39,16 @@ secrets { } dependencies { - implementation(projects.core.common) - implementation(projects.core.model) + api(libs.kotlinx.datetime) + api(projects.core.common) + api(projects.core.model) + implementation(libs.coil.kt) implementation(libs.coil.kt.svg) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.serialization.json) implementation(libs.okhttp.logging) implementation(libs.retrofit.core) implementation(libs.retrofit.kotlin.serialization) - testImplementation(projects.core.testing) + testImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index a6162a9cc..850b00201 100644 --- a/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -25,7 +25,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface FlavoredNetworkModule { +internal interface FlavoredNetworkModule { @Binds fun binds(impl: FakeNiaNetworkDataSource): NiaNetworkDataSource diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index 98534ba93..21d93c0e4 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -35,7 +35,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object NetworkModule { +internal object NetworkModule { @Provides @Singleton diff --git a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt index b86036ff0..321e856fe 100644 --- a/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt @@ -71,7 +71,7 @@ private data class NetworkResponse( * [Retrofit] backed [NiaNetworkDataSource] */ @Singleton -class RetrofitNiaNetwork @Inject constructor( +internal class RetrofitNiaNetwork @Inject constructor( networkJson: Json, okhttpCallFactory: Call.Factory, ) : NiaNetworkDataSource { diff --git a/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index 51a8a6f19..bff1ca5be 100644 --- a/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -25,7 +25,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface FlavoredNetworkModule { +internal interface FlavoredNetworkModule { @Binds fun binds(impl: RetrofitNiaNetwork): NiaNetworkDataSource diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts index 31b15a805..92871b72b 100644 --- a/core/notifications/build.gradle.kts +++ b/core/notifications/build.gradle.kts @@ -15,7 +15,6 @@ */ plugins { alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.android.library.compose) alias(libs.plugins.nowinandroid.android.hilt) } @@ -24,14 +23,10 @@ android { } dependencies { - implementation(projects.core.common) - implementation(projects.core.model) + api(projects.core.model) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.androidx.browser) - implementation(libs.androidx.compose.runtime) - implementation(libs.androidx.core.ktx) + implementation(projects.core.common) - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.cloud.messaging) + compileOnly(platform(libs.androidx.compose.bom)) + compileOnly(libs.androidx.compose.runtime) } diff --git a/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index 9bb2b3fb9..99ba10fa7 100644 --- a/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class NotificationsModule { +internal abstract class NotificationsModule { @Binds abstract fun bindNotifier( notifier: NoOpNotifier, diff --git a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt index d17005bca..863c1a662 100644 --- a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt @@ -22,6 +22,6 @@ import javax.inject.Inject /** * Implementation of [Notifier] which does nothing. Useful for tests and previews. */ -class NoOpNotifier @Inject constructor() : Notifier { +internal class NoOpNotifier @Inject constructor() : Notifier { override fun postNewsNotifications(newsResources: List) = Unit } diff --git a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt index 7e74f819c..73c47879f 100644 --- a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt @@ -50,7 +50,7 @@ private const val FOR_YOU_PATH = "foryou" * Implementation of [Notifier] that displays notifications in the system tray. */ @Singleton -class SystemTrayNotifier @Inject constructor( +internal class SystemTrayNotifier @Inject constructor( @ApplicationContext private val context: Context, ) : Notifier { diff --git a/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index 3c05e9c6e..c2e1f76ca 100644 --- a/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class NotificationsModule { +internal abstract class NotificationsModule { @Binds abstract fun bindNotifier( notifier: SystemTrayNotifier, diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 8ad91a0d5..275555d80 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -24,28 +24,23 @@ android { } dependencies { - api(libs.accompanist.testharness) - api(libs.androidx.activity.compose) + api(kotlin("test")) api(libs.androidx.compose.ui.test) - api(libs.androidx.test.core) - api(libs.androidx.test.espresso.core) - api(libs.androidx.test.rules) - api(libs.androidx.test.runner) - api(libs.hilt.android.testing) - api(libs.junit4) - api(libs.kotlinx.coroutines.test) api(libs.roborazzi) - api(libs.robolectric.shadows) - api(libs.turbine) + api(projects.core.analytics) + api(projects.core.data) + api(projects.core.model) + api(projects.core.notifications) debugApi(libs.androidx.compose.ui.testManifest) + implementation(libs.accompanist.testharness) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.test.rules) + implementation(libs.hilt.android.testing) + implementation(libs.kotlinx.coroutines.test) + implementation(libs.kotlinx.datetime) + implementation(libs.robolectric.shadows) implementation(projects.core.common) - implementation(projects.core.data) implementation(projects.core.designsystem) - implementation(projects.core.domain) - implementation(projects.core.model) - implementation(projects.core.notifications) - implementation(projects.core.analytics) - implementation(libs.kotlinx.datetime) } diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt index 66d52dabe..09c739243 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt @@ -26,7 +26,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object TestDispatcherModule { +internal object TestDispatcherModule { @Provides @Singleton fun providesTestDispatcher(): TestDispatcher = UnconfinedTestDispatcher() diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt index f2134105a..4f5d15be1 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt @@ -32,7 +32,7 @@ import kotlinx.coroutines.test.TestDispatcher components = [SingletonComponent::class], replaces = [DispatchersModule::class], ) -object TestDispatchersModule { +internal object TestDispatchersModule { @Provides @Dispatcher(IO) fun providesIODispatcher(testDispatcher: TestDispatcher): CoroutineDispatcher = testDispatcher diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index c9527d09e..5d8a65d44 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -27,29 +27,14 @@ android { } dependencies { - api(libs.androidx.compose.foundation) - api(libs.androidx.compose.foundation.layout) - api(libs.androidx.compose.material.iconsExtended) - api(libs.androidx.compose.material3) - api(libs.androidx.compose.runtime) - api(libs.androidx.compose.runtime.livedata) - api(libs.androidx.compose.ui.tooling.preview) - api(libs.androidx.compose.ui.util) api(libs.androidx.metrics) - api(libs.androidx.tracing.ktx) + api(projects.core.analytics) + api(projects.core.designsystem) + api(projects.core.model) - debugApi(libs.androidx.compose.ui.tooling) - - implementation(projects.core.analytics) - implementation(projects.core.designsystem) - implementation(projects.core.domain) - implementation(projects.core.model) - implementation(libs.androidx.activity.compose) implementation(libs.androidx.browser) - implementation(libs.androidx.core.ktx) implementation(libs.coil.kt) implementation(libs.coil.kt.compose) - implementation(libs.kotlinx.datetime) androidTestImplementation(projects.core.testing) } diff --git a/feature/bookmarks/build.gradle.kts b/feature/bookmarks/build.gradle.kts index 32394f911..4e97176a2 100644 --- a/feature/bookmarks/build.gradle.kts +++ b/feature/bookmarks/build.gradle.kts @@ -25,5 +25,9 @@ android { } dependencies { - implementation(libs.androidx.compose.material3.windowSizeClass) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) } diff --git a/feature/foryou/build.gradle.kts b/feature/foryou/build.gradle.kts index afe769ab8..3f990b902 100644 --- a/feature/foryou/build.gradle.kts +++ b/feature/foryou/build.gradle.kts @@ -25,7 +25,13 @@ android { } dependencies { - implementation(libs.kotlinx.datetime) - implementation(libs.androidx.activity.compose) implementation(libs.accompanist.permissions) + implementation(projects.core.data) + implementation(projects.core.domain) + + testImplementation(libs.hilt.android.testing) + testImplementation(libs.robolectric) + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) } diff --git a/feature/interests/build.gradle.kts b/feature/interests/build.gradle.kts index 20b1ef1aa..f0bca9729 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/build.gradle.kts @@ -22,3 +22,12 @@ plugins { android { namespace = "com.google.samples.apps.nowinandroid.feature.interests" } + +dependencies { + implementation(projects.core.data) + implementation(projects.core.domain) + + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) +} \ No newline at end of file diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index d96f290e3..206f4c0f9 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -25,9 +25,14 @@ android { } dependencies { + implementation(projects.core.data) + implementation(projects.core.domain) implementation(projects.feature.bookmarks) implementation(projects.feature.foryou) implementation(projects.feature.interests) - implementation(libs.kotlinx.datetime) + + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) } diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 4f5d649b7..4b9a72bdd 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -26,7 +26,10 @@ android { dependencies { implementation(libs.androidx.appcompat) - implementation(libs.google.oss.licenses) { - exclude(group = "androidx.appcompat") - } + implementation(libs.google.oss.licenses) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) } diff --git a/feature/topic/build.gradle.kts b/feature/topic/build.gradle.kts index cc0ecc868..d457b2f73 100644 --- a/feature/topic/build.gradle.kts +++ b/feature/topic/build.gradle.kts @@ -25,5 +25,9 @@ android { } dependencies { - implementation(libs.kotlinx.datetime) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + + androidTestImplementation(projects.core.testing) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa2a32e90..67b267cdc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,26 +9,22 @@ androidxAppCompat = "1.6.1" androidxBrowser = "1.6.0" androidxComposeBom = "2023.10.01" androidxComposeCompiler = "1.5.3" -androidxComposeRuntimeTracing = "1.0.0-alpha03" androidxCore = "1.12.0" androidxCoreSplashscreen = "1.0.1" androidxDataStore = "1.0.0" androidxEspresso = "3.5.1" androidxHiltNavigationCompose = "1.0.0" -androidxJunit = "1.1.5" androidxLifecycle = "2.6.2" androidxMacroBenchmark = "1.2.0" androidxMetrics = "1.0.0-alpha04" androidxNavigation = "2.7.4" androidxProfileinstaller = "1.3.1" -androidxStartup = "1.1.1" androidxTestCore = "1.5.0" androidxTestExt = "1.1.5" androidxTestRules = "1.5.0" androidxTestRunner = "1.5.2" androidxTracing = "1.1.0" androidxUiAutomator = "2.2.0" -androidxWindowManager = "1.1.0" androidxWork = "2.9.0-rc01" coil = "2.4.0" dependencyGuard = "0.4.3" @@ -41,7 +37,6 @@ googleOssPlugin = "0.10.6" hilt = "2.48.1" hiltExt = "1.1.0" jacoco = "0.8.7" -junit4 = "4.13.2" kotlin = "1.9.10" kotlinxCoroutines = "1.7.3" kotlinxDatetime = "0.4.1" @@ -68,15 +63,12 @@ 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" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class" } androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } -androidx-compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata" } -androidx-compose-runtime-tracing = { group = "androidx.compose.runtime", name = "runtime-tracing", version.ref = "androidxComposeRuntimeTracing" } androidx-compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } @@ -86,7 +78,6 @@ androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidxCoreSplashscreen" } androidx-dataStore-core = { group = "androidx.datastore", name = "datastore", version.ref = "androidxDataStore" } androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidxHiltNavigationCompose" } -androidx-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "androidxLifecycle" } androidx-lifecycle-runtimeCompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidxLifecycle" } androidx-lifecycle-viewModelCompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } androidx-metrics = { group = "androidx.metrics", name = "metrics-performance", version.ref = "androidxMetrics" } @@ -100,7 +91,6 @@ androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = " androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidxTestRunner" } androidx-test-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "androidxUiAutomator" } androidx-tracing-ktx = { group = "androidx.tracing", name = "tracing-ktx", version.ref = "androidxTracing" } -androidx-window-manager = { module = "androidx.window:window", version.ref = "androidxWindowManager" } androidx-work-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "androidxWork" } androidx-work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidxWork" } coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" } @@ -111,7 +101,6 @@ firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.r firebase-cloud-messaging = { group = "com.google.firebase", name = "firebase-messaging-ktx" } firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" } firebase-performance = { group = "com.google.firebase", name = "firebase-perf-ktx" } -firebase-performance-gradle = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" } google-oss-licenses = { group = "com.google.android.gms", name = "play-services-oss-licenses", version.ref = "googleOss" } google-oss-licenses-plugin = { group = "com.google.android.gms", name = "oss-licenses-plugin", version.ref = "googleOssPlugin" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } @@ -119,9 +108,8 @@ hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testi hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } -junit4 = { group = "junit", name = "junit", version.ref = "junit4" } +javax-inject = { module = "javax.inject:javax.inject", version = "1" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" } -kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-guava = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-guava", version.ref = "kotlinxCoroutines" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinxDatetime" } @@ -145,7 +133,6 @@ turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine # Dependencies of the included build-logic android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" } -androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidxJunit" } firebase-crashlytics-gradlePlugin = { group = "com.google.firebase", name = "firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsPlugin" } firebase-performance-gradlePlugin = { group = "com.google.firebase", name = "perf-plugin", version.ref = "firebasePerfPlugin" } kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } diff --git a/sync/sync-test/build.gradle.kts b/sync/sync-test/build.gradle.kts index 02e573ae5..0fac2cf83 100644 --- a/sync/sync-test/build.gradle.kts +++ b/sync/sync-test/build.gradle.kts @@ -23,7 +23,7 @@ android { } dependencies { - api(projects.sync.work) + implementation(libs.hilt.android.testing) implementation(projects.core.data) - implementation(projects.core.testing) + implementation(projects.sync.work) } diff --git a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt index 2b0b4fb6a..c13b409e6 100644 --- a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt +++ b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import javax.inject.Inject -class NeverSyncingSyncManager @Inject constructor() : SyncManager { +internal class NeverSyncingSyncManager @Inject constructor() : SyncManager { override val isSyncing: Flow = flowOf(false) override fun requestSync() = Unit } diff --git a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt index 0089450b5..d1c0f562f 100644 --- a/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt +++ b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt @@ -28,7 +28,7 @@ import dagger.hilt.testing.TestInstallIn components = [SingletonComponent::class], replaces = [SyncModule::class], ) -interface TestSyncModule { +internal interface TestSyncModule { @Binds fun bindsSyncStatusMonitor( syncStatusMonitor: NeverSyncingSyncManager, diff --git a/sync/work/build.gradle.kts b/sync/work/build.gradle.kts index 867aef17c..7e61c7389 100644 --- a/sync/work/build.gradle.kts +++ b/sync/work/build.gradle.kts @@ -27,23 +27,19 @@ android { } dependencies { - implementation(projects.core.analytics) - implementation(projects.core.common) - implementation(projects.core.data) - implementation(projects.core.datastore) - implementation(projects.core.model) - implementation(libs.androidx.lifecycle.livedata.ktx) + ksp(libs.hilt.ext.compiler) + implementation(libs.androidx.tracing.ktx) implementation(libs.androidx.work.ktx) implementation(libs.hilt.ext.work) - implementation(libs.kotlinx.coroutines.android) + implementation(projects.core.analytics) + implementation(projects.core.data) prodImplementation(libs.firebase.cloud.messaging) + prodImplementation(platform(libs.firebase.bom)) - ksp(libs.hilt.ext.compiler) - - testImplementation(projects.core.testing) - - androidTestImplementation(projects.core.testing) androidTestImplementation(libs.androidx.work.testing) + androidTestImplementation(libs.hilt.android.testing) + androidTestImplementation(libs.kotlinx.coroutines.guava) + androidTestImplementation(projects.core.testing) } diff --git a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 40d094cd2..91ef476f6 100644 --- a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -27,14 +27,14 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface SyncModule { +abstract class SyncModule { @Binds - fun bindsSyncStatusMonitor( + internal abstract fun bindsSyncStatusMonitor( syncStatusMonitor: WorkManagerSyncManager, ): SyncManager @Binds - fun bindsSyncSubscriber( + internal abstract fun bindsSyncSubscriber( syncSubscriber: StubSyncSubscriber, ): SyncSubscriber } diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt index 0ef90fb29..83286eeec 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt @@ -24,7 +24,7 @@ private const val TAG = "StubSyncSubscriber" /** * Stub implementation of [SyncSubscriber] */ -class StubSyncSubscriber @Inject constructor() : SyncSubscriber { +internal class StubSyncSubscriber @Inject constructor() : SyncSubscriber { override suspend fun subscribe() { Log.d(TAG, "Subscribing to sync") } diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt index 9131e4888..77a993736 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt @@ -33,7 +33,7 @@ import javax.inject.Inject /** * [SyncManager] backed by [WorkInfo] from [WorkManager] */ -class WorkManagerSyncManager @Inject constructor( +internal class WorkManagerSyncManager @Inject constructor( @ApplicationContext private val context: Context, ) : SyncManager { override val isSyncing: Flow = diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt index d5250b330..f2d9283c0 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt @@ -19,12 +19,12 @@ package com.google.samples.apps.nowinandroid.sync.workers import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper -fun AnalyticsHelper.logSyncStarted() = +internal fun AnalyticsHelper.logSyncStarted() = logEvent( AnalyticsEvent(type = "network_sync_started"), ) -fun AnalyticsHelper.logSyncFinished(syncedSuccessfully: Boolean) { +internal fun AnalyticsHelper.logSyncFinished(syncedSuccessfully: Boolean) { val eventType = if (syncedSuccessfully) "network_sync_successful" else "network_sync_failed" logEvent( AnalyticsEvent(type = eventType), diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt index 1948b49a3..ea5f36042 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt @@ -48,7 +48,7 @@ import kotlinx.coroutines.withContext * sync functionality. */ @HiltWorker -class SyncWorker @AssistedInject constructor( +internal class SyncWorker @AssistedInject constructor( @Assisted private val appContext: Context, @Assisted workerParams: WorkerParameters, private val niaPreferences: NiaPreferencesDataSource, diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index af4508406..df6db419b 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -32,20 +32,20 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -interface SyncModule { +abstract class SyncModule { @Binds - fun bindsSyncStatusMonitor( + internal abstract fun bindsSyncStatusMonitor( syncStatusMonitor: WorkManagerSyncManager, ): SyncManager @Binds - fun bindsSyncSubscriber( + internal abstract fun bindsSyncSubscriber( syncSubscriber: FirebaseSyncSubscriber, ): SyncSubscriber companion object { @Provides @Singleton - fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging + internal fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging } } diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt index e51e30164..c7297dd1a 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt @@ -25,7 +25,7 @@ import javax.inject.Inject private const val SYNC_TOPIC_SENDER = "/topics/sync" @AndroidEntryPoint -class SyncNotificationsService : FirebaseMessagingService() { +internal class SyncNotificationsService : FirebaseMessagingService() { @Inject lateinit var syncManager: SyncManager diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt index c2405bccc..2c48488e6 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt @@ -24,7 +24,7 @@ import javax.inject.Inject /** * Implementation of [SyncSubscriber] that subscribes to the FCM [SYNC_TOPIC] */ -class FirebaseSyncSubscriber @Inject constructor( +internal class FirebaseSyncSubscriber @Inject constructor( private val firebaseMessaging: FirebaseMessaging, ) : SyncSubscriber { override suspend fun subscribe() { From 57dacf18d577df8d90c01e22a5cff0035cfbb16b Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 20:45:33 +0100 Subject: [PATCH 2/5] dependencyGuardBaseline --- .../dependencies/releaseRuntimeClasspath.txt | 87 +++---------------- .../prodReleaseRuntimeClasspath.txt | 13 +-- 2 files changed, 14 insertions(+), 86 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index 786b15d57..7db29f30c 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -26,7 +26,6 @@ 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 @@ -46,18 +45,14 @@ 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.core:core-ktx:1.10.0 +androidx.core:core:1.10.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 @@ -69,99 +64,39 @@ 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.tracing:tracing:1.0.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 +com.google.guava:listenablefuture:1.0 +com.squareup.okhttp3:okhttp:4.11.0 +com.squareup.okio:okio-jvm:3.3.0 +com.squareup.okio:okio:3.3.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-coroutines-android:1.7.1 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.1 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.1 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 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 index 8123217b9..878a5c462 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -29,10 +29,8 @@ 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 @@ -74,9 +72,7 @@ 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 @@ -108,16 +104,13 @@ 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.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 -androidx.window.extensions.core:core:1.0.0 -androidx.window:window:1.1.0 +androidx.window:window:1.0.0 androidx.work:work-runtime-ktx:2.9.0-rc01 androidx.work:work-runtime:2.9.0-rc01 com.caverock:androidsvg-aar:1.4 From 7068e3d05598c49f7cd6a377366ec48ec9621f64 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Sat, 9 Dec 2023 21:23:13 +0100 Subject: [PATCH 3/5] Fix badging, which is not "stable" when it comes to ordering --- app/prodRelease-badging.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt index 6c3a859c7..9ae76fff2 100644 --- a/app/prodRelease-badging.txt +++ b/app/prodRelease-badging.txt @@ -105,9 +105,9 @@ application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' +uses-library-not-required:'android.ext.adservices' uses-library-not-required:'androidx.window.extensions' uses-library-not-required:'androidx.window.sidecar' -uses-library-not-required:'android.ext.adservices' feature-group: label='' uses-feature: name='android.hardware.faketouch' uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' From b34d365c058777617d2cc0390d210a6ccbdca5ff Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 22 Dec 2023 11:33:22 +0000 Subject: [PATCH 5/5] Update dependency guard classpaths Change-Id: I5f729bce92ec1cc9f71e34e42cbe38765966fc31 --- .../dependencies/releaseRuntimeClasspath.txt | 73 ++++++++++--------- .../prodReleaseRuntimeClasspath.txt | 45 ++++++------ 2 files changed, 60 insertions(+), 58 deletions(-) diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt index 7db29f30c..10f2dfa32 100644 --- a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -1,15 +1,16 @@ 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.annotation:annotation-experimental:1.3.1 +androidx.annotation:annotation-jvm:1.7.0 +androidx.annotation:annotation:1.7.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.collection:collection-jvm:1.3.0 +androidx.collection:collection:1.3.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 @@ -45,24 +46,24 @@ 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.10.0 -androidx.core:core:1.10.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.emoji2:emoji2:1.4.0 androidx.exifinterface:exifinterface:1.3.6 androidx.fragment:fragment:1.5.1 androidx.interpolator:interpolator: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.lifecycle:lifecycle-common-java8:2.6.2 +androidx.lifecycle:lifecycle-common:2.6.2 +androidx.lifecycle:lifecycle-livedata-core:2.6.2 +androidx.lifecycle:lifecycle-livedata:2.6.2 +androidx.lifecycle:lifecycle-process:2.6.2 +androidx.lifecycle:lifecycle-runtime-ktx:2.6.2 +androidx.lifecycle:lifecycle-runtime:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2 +androidx.lifecycle:lifecycle-viewmodel:2.6.2 androidx.loader:loader:1.0.0 androidx.metrics:metrics-performance:1.0.0-alpha04 androidx.profileinstaller:profileinstaller:1.3.1 @@ -74,29 +75,29 @@ 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.google.accompanist:accompanist-drawablepainter:0.30.1 +com.google.accompanist:accompanist-drawablepainter:0.32.0 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.dagger:dagger-lint-aar:2.50 +com.google.dagger:dagger:2.50 +com.google.dagger:hilt-android:2.50 +com.google.dagger:hilt-core:2.50 com.google.guava:listenablefuture:1.0 -com.squareup.okhttp3:okhttp:4.11.0 -com.squareup.okio:okio-jvm:3.3.0 -com.squareup.okio:okio:3.3.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:2.4.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.6.0 +com.squareup.okio:okio:3.6.0 +io.coil-kt:coil-base:2.5.0 +io.coil-kt:coil-compose-base:2.5.0 +io.coil-kt:coil-compose:2.5.0 +io.coil-kt:coil:2.5.0 javax.inject:javax.inject:1 -org.jetbrains.kotlin:kotlin-stdlib-common:1.9.10 +org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21 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.1 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.1 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.4.1 -org.jetbrains.kotlinx:kotlinx-datetime:0.4.1 +org.jetbrains.kotlin:kotlin-stdlib:1.9.21 +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-datetime-jvm:0.5.0 +org.jetbrains.kotlinx:kotlinx-datetime:0.5.0 org.jetbrains:annotations:23.0.0 diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt index 878a5c462..3f88c60ec 100644 --- a/app/dependencies/prodReleaseRuntimeClasspath.txt +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -1,17 +1,18 @@ 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.annotation:annotation-experimental:1.3.1 +androidx.annotation:annotation-jvm:1.7.0 +androidx.annotation:annotation:1.7.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.collection:collection-jvm:1.3.0 +androidx.collection:collection-ktx:1.3.0 +androidx.collection:collection:1.3.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 @@ -96,9 +97,9 @@ 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.room:room-common:2.6.1 +androidx.room:room-ktx:2.6.1 +androidx.room:room-runtime:2.6.1 androidx.savedstate:savedstate-ktx:1.2.1 androidx.savedstate:savedstate:1.2.1 androidx.sqlite:sqlite-framework:2.4.0 @@ -114,7 +115,7 @@ androidx.window:window:1.0.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-drawablepainter:0.32.0 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 @@ -133,10 +134,10 @@ 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.dagger:dagger-lint-aar:2.50 +com.google.dagger:dagger:2.50 +com.google.dagger:hilt-android:2.50 +com.google.dagger:hilt-core:2.50 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 @@ -175,27 +176,27 @@ 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.coil-kt:coil-base:2.5.0 +io.coil-kt:coil-compose-base:2.5.0 +io.coil-kt:coil-compose:2.5.0 +io.coil-kt:coil-svg:2.5.0 +io.coil-kt:coil:2.5.0 io.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-common:1.9.21 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.kotlin:kotlin-stdlib:1.9.21 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-datetime-jvm:0.5.0 +org.jetbrains.kotlinx:kotlinx-datetime:0.5.0 org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.0 org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.0 org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0