Build cleanup

* Move Hilt setup to convention plugin
* Disable Hilt on modules where it's not needed
* Enable non-transitive R classes
* Fix `configuration` blocks called in wrong scope
* Move imperative Flavors code from build.gradle
* Disable unnecessary build features globally
* Disable configure-on-demand as it's not encouraged
* Don't use internal AGP packages in plugins

Change-Id: I1bee3e3fd0103054637b979a350f9fd2312ae8ba
pull/305/head
Wojtek Kaliciński 2 years ago
parent d81aa055ee
commit d0cff2b11c

@ -20,9 +20,8 @@ plugins {
id("nowinandroid.android.application") id("nowinandroid.android.application")
id("nowinandroid.android.application.compose") id("nowinandroid.android.application.compose")
id("nowinandroid.android.application.jacoco") id("nowinandroid.android.application.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("jacoco") id("jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
id("nowinandroid.firebase-perf") id("nowinandroid.firebase-perf")
} }
@ -67,19 +66,6 @@ android {
} }
} }
// @see Flavor for more details on the app product flavors.
flavorDimensions += FlavorDimension.contentType.name
productFlavors {
Flavor.values().forEach {
create(it.name) {
dimension = it.dimension.name
if (it.applicationIdSuffix != null) {
applicationIdSuffix = it.applicationIdSuffix
}
}
}
}
packagingOptions { packagingOptions {
resources { resources {
excludes.add("/META-INF/{AL2.0,LGPL2.1}") excludes.add("/META-INF/{AL2.0,LGPL2.1}")
@ -124,17 +110,13 @@ dependencies {
implementation(libs.coil.kt) implementation(libs.coil.kt)
implementation(libs.coil.kt.svg) implementation(libs.coil.kt.svg)
}
implementation(libs.hilt.android) // androidx.test is forcing JUnit, 4.12. This forces it to use 4.13
kapt(libs.hilt.compiler) configurations.configureEach {
kaptAndroidTest(libs.hilt.compiler) resolutionStrategy {
force(libs.junit4)
// androidx.test is forcing JUnit, 4.12. This forces it to use 4.13 // Temporary workaround for https://issuetracker.google.com/174733673
configurations.configureEach { force("org.objenesis:objenesis:2.6")
resolutionStrategy {
force(libs.junit4)
// Temporary workaround for https://issuetracker.google.com/174733673
force("org.objenesis:objenesis:2.6")
}
} }
} }

@ -25,7 +25,8 @@ import androidx.compose.ui.test.performClick
import androidx.test.espresso.Espresso import androidx.test.espresso.Espresso
import androidx.test.espresso.NoActivityResumedException import androidx.test.espresso.NoActivityResumedException
import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.MainActivity
import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR
import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR
import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
@ -70,11 +71,11 @@ class NavigationTest {
@Before @Before
fun setup() { fun setup() {
composeTestRule.activity.apply { composeTestRule.activity.apply {
done = getString(R.string.done) done = getString(FeatureForyouR.string.done)
navigateUp = getString(R.string.navigate_up) navigateUp = getString(FeatureForyouR.string.navigate_up)
forYouLoading = getString(R.string.for_you_loading) forYouLoading = getString(FeatureForyouR.string.for_you_loading)
forYou = getString(R.string.for_you) forYou = getString(FeatureForyouR.string.for_you)
interests = getString(R.string.interests) interests = getString(FeatureInterestsR.string.interests)
sampleTopic = "Headlines" sampleTopic = "Headlines"
} }
} }

@ -30,6 +30,10 @@ android {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
buildFeatures {
buildConfig = true
}
buildTypes { buildTypes {
// This benchmark buildType is used for benchmarking, and should function like your // This benchmark buildType is used for benchmarking, and should function like your
// release build (for example, with minification on). It's signed with a debug key // release build (for example, with minification on). It's signed with a debug key

@ -65,6 +65,10 @@ gradlePlugin {
id = "nowinandroid.android.test" id = "nowinandroid.android.test"
implementationClass = "AndroidTestConventionPlugin" implementationClass = "AndroidTestConventionPlugin"
} }
register("androidHilt") {
id = "nowinandroid.android.hilt"
implementationClass = "AndroidHiltConventionPlugin"
}
register("spotless") { register("spotless") {
id = "nowinandroid.spotless" id = "nowinandroid.spotless"
implementationClass = "SpotlessConventionPlugin" implementationClass = "SpotlessConventionPlugin"

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.android.build.api.dsl.ApplicationExtension
import com.google.samples.apps.nowinandroid.configureAndroidCompose import com.google.samples.apps.nowinandroid.configureAndroidCompose
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
@ -24,7 +24,7 @@ class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) { override fun apply(target: Project) {
with(target) { with(target) {
pluginManager.apply("com.android.application") pluginManager.apply("com.android.application")
val extension = extensions.getByType<BaseAppModuleExtension>() val extension = extensions.getByType<ApplicationExtension>()
configureAndroidCompose(extension) configureAndroidCompose(extension)
} }
} }

@ -15,7 +15,8 @@
*/ */
import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.android.build.api.dsl.ApplicationExtension
import com.google.samples.apps.nowinandroid.configureFlavors
import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configureKotlinAndroid
import com.google.samples.apps.nowinandroid.configurePrintApksTask import com.google.samples.apps.nowinandroid.configurePrintApksTask
import org.gradle.api.Plugin import org.gradle.api.Plugin
@ -30,9 +31,10 @@ class AndroidApplicationConventionPlugin : Plugin<Project> {
apply("org.jetbrains.kotlin.android") apply("org.jetbrains.kotlin.android")
} }
extensions.configure<BaseAppModuleExtension> { extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this) configureKotlinAndroid(this)
defaultConfig.targetSdk = 33 defaultConfig.targetSdk = 33
configureFlavors(this)
} }
extensions.configure<ApplicationAndroidComponentsExtension> { extensions.configure<ApplicationAndroidComponentsExtension> {
configurePrintApksTask(this) configurePrintApksTask(this)

@ -26,9 +26,8 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
override fun apply(target: Project) { override fun apply(target: Project) {
with(target) { with(target) {
pluginManager.apply { pluginManager.apply {
apply("com.android.library") apply("nowinandroid.android.library")
apply("org.jetbrains.kotlin.android") apply("nowinandroid.android.hilt")
apply("org.jetbrains.kotlin.kapt")
} }
extensions.configure<LibraryExtension> { extensions.configure<LibraryExtension> {
defaultConfig { defaultConfig {
@ -59,9 +58,6 @@ class AndroidFeatureConventionPlugin : Plugin<Project> {
add("implementation", libs.findLibrary("kotlinx.coroutines.android").get()) add("implementation", libs.findLibrary("kotlinx.coroutines.android").get())
add("implementation", libs.findLibrary("hilt.android").get())
add("kapt", libs.findLibrary("hilt.compiler").get())
// TODO : Remove this dependency once we upgrade to Android Studio Dolphin b/228889042 // TODO : Remove this dependency once we upgrade to Android Studio Dolphin b/228889042
// These dependencies are currently necessary to render Compose previews // These dependencies are currently necessary to render Compose previews
add( add(

@ -0,0 +1,44 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.google.samples.apps.nowinandroid.configureJacoco
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.kotlin
class AndroidHiltConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("org.jetbrains.kotlin.kapt")
apply("dagger.hilt.android.plugin")
}
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
dependencies {
"implementation"(libs.findLibrary("hilt.android").get())
"kapt"(libs.findLibrary("hilt.compiler").get())
"kaptAndroidTest"(libs.findLibrary("hilt.compiler").get())
}
}
}
}

@ -14,6 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.api.variant.LibraryAndroidComponentsExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.LibraryExtension import com.android.build.gradle.LibraryExtension
import com.google.samples.apps.nowinandroid.configureFlavors import com.google.samples.apps.nowinandroid.configureFlavors
@ -43,13 +44,11 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
configurePrintApksTask(this) configurePrintApksTask(this)
} }
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs") val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
dependencies { configurations.configureEach {
configurations.configureEach { resolutionStrategy {
resolutionStrategy { force(libs.findLibrary("junit4").get())
force(libs.findLibrary("junit4").get()) // Temporary workaround for https://issuetracker.google.com/174733673
// Temporary workaround for https://issuetracker.google.com/174733673 force("org.objenesis:objenesis:2.6")
force("org.objenesis:objenesis:2.6")
}
} }
} }
} }

@ -1,5 +1,8 @@
package com.google.samples.apps.nowinandroid package com.google.samples.apps.nowinandroid
import com.android.build.api.dsl.ApplicationExtension
import com.android.build.api.dsl.ApplicationProductFlavor
import com.android.build.api.dsl.ApplicationVariantDimension
import com.android.build.api.dsl.CommonExtension import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project import org.gradle.api.Project
@ -24,6 +27,11 @@ fun Project.configureFlavors(
Flavor.values().forEach{ Flavor.values().forEach{
create(it.name) { create(it.name) {
dimension = it.dimension.name dimension = it.dimension.name
if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) {
if (it.applicationIdSuffix != null) {
this.applicationIdSuffix = it.applicationIdSuffix
}
}
} }
} }
} }

@ -26,10 +26,8 @@ import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.DirectoryProperty
import org.gradle.api.provider.ListProperty import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction

@ -16,14 +16,11 @@
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
dependencies { dependencies {
implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.android)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
testImplementation(project(":core:testing")) testImplementation(project(":core:testing"))
} }

@ -15,16 +15,11 @@
*/ */
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
dependencies { dependencies {
api(project(":core:data")) api(project(":core:data"))
implementation(project(":core:testing")) implementation(project(":core:testing"))
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
kaptAndroidTest(libs.hilt.compiler)
} }

@ -16,9 +16,8 @@
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("kotlinx-serialization") id("kotlinx-serialization")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -35,7 +34,4 @@ dependencies {
implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.datetime)
implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.serialization.json) implementation(libs.kotlinx.serialization.json)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
} }

@ -18,8 +18,7 @@
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
alias(libs.plugins.ksp) alias(libs.plugins.ksp)
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -47,8 +46,5 @@ dependencies {
implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.datetime)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
androidTestImplementation(project(":core:testing")) androidTestImplementation(project(":core:testing"))
} }

@ -15,8 +15,7 @@
*/ */
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -25,8 +24,4 @@ dependencies {
implementation(project(":core:testing")) implementation(project(":core:testing"))
api(libs.androidx.dataStore.core) api(libs.androidx.dataStore.core)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
kaptAndroidTest(libs.hilt.compiler)
} }

@ -24,8 +24,7 @@ import com.google.protobuf.gradle.protoc
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
alias(libs.plugins.protobuf) alias(libs.plugins.protobuf)
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -65,10 +64,6 @@ dependencies {
implementation(libs.androidx.dataStore.core) implementation(libs.androidx.dataStore.core)
implementation(libs.protobuf.kotlin.lite) implementation(libs.protobuf.kotlin.lite)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
kaptAndroidTest(libs.hilt.compiler)
} }
// TODO b/239411851, Remove kapt workaround configuration // TODO b/239411851, Remove kapt workaround configuration

@ -18,16 +18,11 @@
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
alias(libs.plugins.ksp)
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
dependencies { dependencies {
api(libs.androidx.hilt.navigation.compose) api(libs.androidx.hilt.navigation.compose)
api(libs.androidx.navigation.compose) api(libs.androidx.navigation.compose)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
} }

@ -13,16 +13,22 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("kotlinx-serialization") id("kotlinx-serialization")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
} }
android {
buildFeatures {
buildConfig = true
}
}
secrets { secrets {
defaultPropertiesFileName = "secrets.defaults.properties" defaultPropertiesFileName = "secrets.defaults.properties"
} }
@ -40,7 +46,4 @@ dependencies {
implementation(libs.okhttp.logging) implementation(libs.okhttp.logging)
implementation(libs.retrofit.core) implementation(libs.retrofit.core)
implementation(libs.retrofit.kotlin.serialization) implementation(libs.retrofit.kotlin.serialization)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
} }

@ -15,7 +15,7 @@
*/ */
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
kotlin("kapt") id("nowinandroid.android.hilt")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -24,9 +24,6 @@ dependencies {
implementation(project(":core:data")) implementation(project(":core:data"))
implementation(project(":core:model")) implementation(project(":core:model"))
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
api(libs.junit4) api(libs.junit4)
api(libs.androidx.test.core) api(libs.androidx.test.core)
api(libs.kotlinx.coroutines.test) api(libs.kotlinx.coroutines.test)

@ -57,6 +57,7 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage import coil.compose.AsyncImage
import com.google.samples.apps.nowinandroid.core.designsystem.R as DesignsystemR
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaToggleButton
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopicTag import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopicTag
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
@ -135,7 +136,7 @@ fun NewsResourceHeaderImage(
) { ) {
AsyncImage( AsyncImage(
placeholder = if (LocalInspectionMode.current) { placeholder = if (LocalInspectionMode.current) {
painterResource(R.drawable.ic_placeholder_default) painterResource(DesignsystemR.drawable.ic_placeholder_default)
} else { } else {
// TODO b/228077205, show specific loading image visual // TODO b/228077205, show specific loading image visual
null null

@ -14,11 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library")
id("nowinandroid.android.feature") id("nowinandroid.android.feature")
id("nowinandroid.android.library.compose") id("nowinandroid.android.library.compose")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }

@ -209,7 +209,9 @@ private fun AuthorToolbar(
IconButton(onClick = { onBackClick() }) { IconButton(onClick = { onBackClick() }) {
Icon( Icon(
imageVector = Filled.ArrowBack, imageVector = Filled.ArrowBack,
contentDescription = stringResource(id = R.string.back) contentDescription = stringResource(
id = com.google.samples.apps.nowinandroid.core.ui.R.string.back
)
) )
} }
val selected = uiState.isFollowed val selected = uiState.isFollowed

@ -14,11 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library")
id("nowinandroid.android.feature") id("nowinandroid.android.feature")
id("nowinandroid.android.library.compose") id("nowinandroid.android.library.compose")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }

@ -14,11 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library")
id("nowinandroid.android.feature") id("nowinandroid.android.feature")
id("nowinandroid.android.library.compose") id("nowinandroid.android.library.compose")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }

@ -14,10 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library")
id("nowinandroid.android.feature") id("nowinandroid.android.feature")
id("nowinandroid.android.library.compose") id("nowinandroid.android.library.compose")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }

@ -14,11 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("nowinandroid.android.library")
id("nowinandroid.android.feature") id("nowinandroid.android.feature")
id("nowinandroid.android.library.compose") id("nowinandroid.android.library.compose")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }

@ -210,7 +210,9 @@ private fun TopicToolbar(
IconButton(onClick = { onBackClick() }) { IconButton(onClick = { onBackClick() }) {
Icon( Icon(
imageVector = Filled.ArrowBack, imageVector = Filled.ArrowBack,
contentDescription = stringResource(id = R.string.back) contentDescription = stringResource(
id = com.google.samples.apps.nowinandroid.core.ui.R.string.back
)
) )
} }
val selected = uiState.isFollowed val selected = uiState.isFollowed

@ -4,17 +4,26 @@
# any settings specified in this file. # any settings specified in this file.
# For more details on how to configure your build environment visit # For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.configureondemand=true
org.gradle.caching=true
org.gradle.parallel=true
# Ensure important default jvmargs aren't overwritten. See https://github.com/gradle/gradle/issues/19750 # Ensure important default jvmargs aren't overwritten. See https://github.com/gradle/gradle/issues/19750
org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true org.gradle.parallel=true
# Not encouraged by Gradle and can produce weird results. Wait for isolated projects instead.
org.gradle.configureondemand=false
# Enable caching between builds.
org.gradle.caching=true
# TODO: enable this when moving to AGP 7.3
#org.gradle.unsafe.configuration-cache=true
# AndroidX package structure to make it clearer which packages are bundled with the # AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK # Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
@ -23,3 +32,14 @@ android.useAndroidX=true
kotlin.code.style=official kotlin.code.style=official
# Allow kapt to use incremental processing # Allow kapt to use incremental processing
kapt.incremental.apt=true kapt.incremental.apt=true
# Non-transitive R classes is recommended and is faster/smaller
android.nonTransitiveRClass=true
# Disable build features that are enabled by default,
# https://developer.android.com/studio/releases/gradle-plugin#buildFeatures
android.defaults.buildfeatures.buildconfig=false
android.defaults.buildfeatures.aidl=false
android.defaults.buildfeatures.renderscript=false
android.defaults.buildfeatures.resvalues=false
android.defaults.buildfeatures.shaders=false

@ -1,7 +1,7 @@
[versions] [versions]
accompanist = "0.24.8-beta" accompanist = "0.24.8-beta"
androidDesugarJdkLibs = "1.1.5" androidDesugarJdkLibs = "1.1.5"
androidGradlePlugin = "7.2.2" androidGradlePlugin = "7.2.2" # TODO: when changing this to 7.3 resolve TODO in gradle.properties
androidxActivity = "1.5.1" androidxActivity = "1.5.1"
androidxAppCompat = "1.5.1" androidxAppCompat = "1.5.1"
androidxCompose = "1.3.0-beta02" androidxCompose = "1.3.0-beta02"

@ -16,8 +16,7 @@
plugins { plugins {
id("nowinandroid.android.library") id("nowinandroid.android.library")
id("nowinandroid.android.library.jacoco") id("nowinandroid.android.library.jacoco")
kotlin("kapt") id("nowinandroid.android.hilt")
id("dagger.hilt.android.plugin")
id("nowinandroid.spotless") id("nowinandroid.spotless")
} }
@ -43,12 +42,7 @@ dependencies {
testImplementation(project(":core:testing")) testImplementation(project(":core:testing"))
androidTestImplementation(project(":core:testing")) androidTestImplementation(project(":core:testing"))
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
kapt(libs.hilt.ext.compiler) kapt(libs.hilt.ext.compiler)
androidTestImplementation(libs.androidx.work.testing) androidTestImplementation(libs.androidx.work.testing)
kaptAndroidTest(libs.hilt.compiler)
kaptAndroidTest(libs.hilt.ext.compiler)
} }

@ -69,7 +69,9 @@ private fun Context.syncWorkNotification(): Notification {
this, this,
SyncNotificationChannelID SyncNotificationChannelID
) )
.setSmallIcon(R.drawable.ic_nia_notification) .setSmallIcon(
com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification
)
.setContentTitle(getString(R.string.sync_notification_title)) .setContentTitle(getString(R.string.sync_notification_title))
.setPriority(NotificationCompat.PRIORITY_DEFAULT) .setPriority(NotificationCompat.PRIORITY_DEFAULT)
.build() .build()

Loading…
Cancel
Save