94: Update AGP r=msfjarvis a=msfjarvis

bors r+

Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
bors[bot] 2021-01-18 13:23:55 +00:00 committed by GitHub
commit 2547d36254
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 198 additions and 63 deletions

View file

@ -4,6 +4,7 @@ plugins {
kotlin("kapt")
kotlin("plugin.serialization") version "1.4.21"
id("dagger.hilt.android.plugin")
`versioning-plugin`
`lobsters-plugin`
`core-library-desugaring`
}
@ -11,8 +12,6 @@ plugins {
android {
defaultConfig {
applicationId = "dev.msfjarvis.lobsters"
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions.annotationProcessorOptions {
argument("room.schemaLocation", "${projectDir}/schemas")
@ -30,7 +29,6 @@ android {
dependencies {
kapt(Dependencies.AndroidX.Hilt.daggerCompiler)
kapt(Dependencies.AndroidX.Hilt.daggerHiltCompiler)
kapt(Dependencies.AndroidX.Room.compiler)
kapt(Dependencies.ThirdParty.Roomigrant.compiler)
implementation(project(":model"))
@ -50,7 +48,6 @@ dependencies {
implementation(Dependencies.AndroidX.Compose.uiTooling)
implementation(Dependencies.AndroidX.Compose.uiUnit)
implementation(Dependencies.AndroidX.Hilt.dagger)
implementation(Dependencies.AndroidX.Hilt.hiltLifecycleViewmodel)
implementation(Dependencies.AndroidX.Lifecycle.runtimeKtx)
implementation(Dependencies.AndroidX.Lifecycle.viewmodelKtx)
implementation(Dependencies.AndroidX.Room.runtime)

View file

@ -5,13 +5,13 @@ import androidx.room.Room
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.components.ViewModelComponent
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.msfjarvis.lobsters.data.source.PostsDatabase
import dev.msfjarvis.lobsters.data.source.PostsDatabase_Migrations
@Module
@InstallIn(ActivityComponent::class)
@InstallIn(ViewModelComponent::class)
object PersistenceModule {
@Provides

View file

@ -25,14 +25,14 @@ import androidx.navigation.compose.navigate
import androidx.navigation.compose.rememberNavController
import androidx.paging.compose.collectAsLazyPagingItems
import dagger.hilt.android.AndroidEntryPoint
import dev.msfjarvis.lobsters.util.IconResource
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
import dev.msfjarvis.lobsters.ui.navigation.Destination
import dev.msfjarvis.lobsters.ui.posts.HottestPosts
import dev.msfjarvis.lobsters.ui.theme.LobstersTheme
import dev.msfjarvis.lobsters.ui.posts.SavedPosts
import dev.msfjarvis.lobsters.ui.theme.LobstersTheme
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
import dev.msfjarvis.lobsters.util.IconResource
import javax.inject.Inject
@AndroidEntryPoint

View file

@ -4,7 +4,6 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items

View file

@ -63,7 +63,8 @@ fun LobstersItem(
onSaveButtonClick: () -> Unit,
) {
Surface(
modifier = Modifier.fillMaxWidth()
modifier = Modifier
.fillMaxWidth()
.clickable(
onClick = onClick,
onLongClick = onLongClick,
@ -77,7 +78,8 @@ fun LobstersItem(
text = post.title,
color = titleColor,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(top = 4.dp)
modifier = Modifier
.padding(top = 4.dp)
.constrainAs(title) {
top.linkTo(parent.top)
start.linkTo(parent.start)
@ -85,9 +87,11 @@ fun LobstersItem(
)
TagRow(
tags = post.tags,
modifier = Modifier.constrainAs(tags) {
modifier = Modifier
.constrainAs(tags) {
top.linkTo(title.bottom)
}.padding(vertical = 8.dp),
}
.padding(vertical = 8.dp),
)
CoilImage(
data = "https://lobste.rs/${post.submitterUser.avatarUrl}",
@ -95,7 +99,9 @@ fun LobstersItem(
requestBuilder = {
transformations(CircleCropTransformation())
},
modifier = Modifier.width(30.dp).padding(4.dp)
modifier = Modifier
.width(30.dp)
.padding(4.dp)
.constrainAs(avatar) {
top.linkTo(tags.bottom)
start.linkTo(parent.start)
@ -103,14 +109,17 @@ fun LobstersItem(
)
Text(
text = "submitted by ${post.submitterUser.username}",
modifier = Modifier.padding(bottom = 4.dp).constrainAs(submitter) {
modifier = Modifier
.padding(bottom = 4.dp)
.constrainAs(submitter) {
top.linkTo(tags.bottom)
start.linkTo(avatar.end)
},
)
IconResource(
resourceId = R.drawable.ic_favorite_border_24px,
modifier = Modifier.padding(8.dp)
modifier = Modifier
.padding(8.dp)
.clickable(
onClick = onSaveButtonClick,
indication = rememberRipple(),

View file

@ -4,7 +4,6 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import dev.msfjarvis.lobsters.model.LobstersPost
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient

View file

@ -1,10 +1,10 @@
package dev.msfjarvis.lobsters.ui.viewmodel
import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.msfjarvis.lobsters.data.remote.LobstersPagingSource
import dev.msfjarvis.lobsters.data.source.PostsDatabase
import dev.msfjarvis.lobsters.model.LobstersPost
@ -12,8 +12,10 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import javax.inject.Inject
class LobstersViewModel @ViewModelInject constructor(
@HiltViewModel
class LobstersViewModel @Inject constructor(
private val pagingSource: LobstersPagingSource,
database: PostsDatabase,
) : ViewModel() {

6
app/version.properties Normal file
View file

@ -0,0 +1,6 @@
#
#This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
#
#Mon Jan 18 18:42:38 IST 2021
versioning-plugin.versionCode=10000
versioning-plugin.versionName=1.0.0

View file

@ -24,6 +24,10 @@ gradlePlugin {
id = "core-library-desugaring"
implementationClass = "CoreLibraryDesugaringPlugin"
}
register("versioning") {
id = "versioning-plugin"
implementationClass = "VersioningPlugin"
}
}
}
@ -34,4 +38,5 @@ dependencies {
implementation(build.getValue("androidGradlePlugin_builder"))
implementation(build.getValue("androidGradlePlugin_builderModel"))
implementation(build.getValue("androidGradlePlugin_lintModel"))
implementation(build.getValue("jsemver"))
}

View file

@ -1,8 +1,9 @@
rootProject.ext.versions = [
agp: '7.0.0-alpha03',
agp : '7.0.0-alpha04',
daggerHilt: '2.30.1-alpha',
kotlin : '1.4.21',
lint: '27.3.0-alpha03',
lint : '27.3.0-alpha04',
semver : '0.9.0',
]
rootProject.ext.build = [
@ -12,4 +13,5 @@ rootProject.ext.build = [
androidGradlePlugin_lintModel : "com.android.tools.lint:lint-model:${versions.lint}",
daggerGradlePlugin : "com.google.dagger:hilt-android-gradle-plugin:${versions.daggerHilt}",
kotlinGradlePlugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}",
jsemver : "com.github.zafarkhaja:java-semver:${versions.semver}",
]

View file

@ -25,9 +25,9 @@ internal fun Project.configureForRootProject() {
delete(rootProject.buildDir)
}
tasks.withType<Wrapper> {
gradleVersion = "6.8-rc-1"
gradleVersion = "6.8"
distributionType = Wrapper.DistributionType.ALL
distributionSha256Sum = "89714fb5db6bd66fa5a2302f58d26dc33ecd3db36b24a42d84ff6ba99551eeda"
distributionSha256Sum = "a7ca23b3ccf265680f2bfd35f1f00b1424f4466292c7337c85d46c9641b3f053"
}
}
@ -54,12 +54,14 @@ internal fun Project.configureForAllProjects() {
}
}
}
/**
* Apply configuration options for Android Application projects.
*/
@Suppress("UnstableApiUsage")
internal fun BaseAppModuleExtension.configureAndroidApplicationOptions(project: Project) {
val minifySwitch = project.providers.environmentVariable("DISABLE_MINIFY").forUseAtConfigurationTime()
val minifySwitch =
project.providers.environmentVariable("DISABLE_MINIFY").forUseAtConfigurationTime()
project.tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + listOf(

View file

@ -3,11 +3,11 @@
* SPDX-License-Identifier: GPL-3.0-only
*/
private const val ANDROIDX_HILT_VERSION = "1.0.0-alpha02"
private const val DAGGER_HILT_VERSION = "2.30.1-alpha"
private const val DAGGER_HILT_VERSION = "2.31-alpha"
object Dependencies {
const val COMPOSE_VERSION = "1.0.0-alpha09"
const val COMPOSE_VERSION = "1.0.0-alpha10"
object Kotlin {
object Coroutines {
@ -21,9 +21,9 @@ object Dependencies {
object AndroidX {
const val activityKtx = "androidx.activity:activity-ktx:1.2.0-rc01"
const val appCompat = "androidx.appcompat:appcompat:1.3.0-alpha02"
const val appCompat = "androidx.appcompat:appcompat:1.3.0-beta01"
const val browser = "androidx.browser:browser:1.3.0"
const val coreKtx = "androidx.core:core-ktx:1.5.0-alpha05"
const val coreKtx = "androidx.core:core-ktx:1.5.0-beta01"
const val coreLibraryDesugaring = "com.android.tools:desugar_jdk_libs:1.0.10"
const val material = "com.google.android.material:material:1.3.0-beta01"
@ -33,8 +33,8 @@ object Dependencies {
const val foundation = "androidx.compose.foundation:foundation:$COMPOSE_VERSION"
const val foundationLayout = "androidx.compose.foundation:foundation-layout:$COMPOSE_VERSION"
const val material = "androidx.compose.material:material:$COMPOSE_VERSION"
const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha04"
const val paging = "androidx.paging:paging-compose:1.0.0-alpha04"
const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha05"
const val paging = "androidx.paging:paging-compose:1.0.0-alpha05"
const val runtime = "androidx.compose.runtime:runtime:$COMPOSE_VERSION"
const val ui = "androidx.compose.ui:ui:$COMPOSE_VERSION"
const val uiUnit = "androidx.compose.ui:ui-unit:$COMPOSE_VERSION"
@ -44,9 +44,6 @@ object Dependencies {
object Hilt {
const val dagger = "com.google.dagger:hilt-android:$DAGGER_HILT_VERSION"
const val daggerCompiler = "com.google.dagger:hilt-compiler:$DAGGER_HILT_VERSION"
const val daggerHiltCompiler = "androidx.hilt:hilt-compiler:$ANDROIDX_HILT_VERSION"
const val hiltLifecycleViewmodel =
"androidx.hilt:hilt-lifecycle-viewmodel:$ANDROIDX_HILT_VERSION"
}
object Lifecycle {
@ -67,7 +64,7 @@ object Dependencies {
object ThirdParty {
const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.4.1"
const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.4.2"
const val customtabs = "saschpe.android:customtabs:3.0.2"
object Moshi {

View file

@ -40,7 +40,8 @@ class LobstersPlugin : Plugin<Project> {
is AppPlugin -> {
project.extensions.getByType<TestedExtension>().configureCommonAndroidOptions()
project.extensions.getByType<BaseAppModuleExtension>().configureBuildSigning(project)
project.extensions.getByType<BaseAppModuleExtension>().configureAndroidApplicationOptions(project)
project.extensions.getByType<BaseAppModuleExtension>()
.configureAndroidApplicationOptions(project)
}
is Kapt3GradleSubplugin -> {
project.configureKapt()

View file

@ -4,8 +4,8 @@
*/
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import java.util.Properties
import org.gradle.api.Project
import java.util.*
private const val KEYSTORE_CONFIG_PATH = "keystore.properties"

View file

@ -0,0 +1,116 @@
/*
* Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
import com.android.build.gradle.internal.plugins.AppPlugin
import com.github.zafarkhaja.semver.Version
import org.gradle.api.Plugin
import org.gradle.api.Project
import java.io.OutputStream
import java.util.*
private const val VERSIONING_PROP_FILE = "version.properties"
private const val VERSIONING_PROP_VERSION_NAME = "versioning-plugin.versionName"
private const val VERSIONING_PROP_VERSION_CODE = "versioning-plugin.versionCode"
private const val VERSIONING_PROP_COMMENT = """
This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
"""
/**
* A Gradle [Plugin] that takes a [Project] with the [AppPlugin] applied and dynamically sets the
* versionCode and versionName properties based on values read from a [VERSIONING_PROP_FILE] file in
* the [Project.getBuildDir] directory. It also adds Gradle tasks to bump the major, minor, and patch
* versions along with one to prepare the next snapshot.
*/
@Suppress(
"UnstableApiUsage",
"NAME_SHADOWING"
)
class VersioningPlugin : Plugin<Project> {
/**
* Generate the Android 'versionCode' property
*/
private fun Version.androidCode(): Int {
return majorVersion * 1_00_00 +
minorVersion * 1_00 +
patchVersion
}
/**
* Write an Android-specific variant of [this] to [stream]
*/
private fun Version.writeForAndroid(stream: OutputStream) {
val newVersionCode = androidCode()
val props = Properties()
props.setProperty(VERSIONING_PROP_VERSION_CODE, "$newVersionCode")
props.setProperty(VERSIONING_PROP_VERSION_NAME, toString())
props.store(stream, VERSIONING_PROP_COMMENT)
}
/**
* Returns the same [Version], but with build metadata stripped.
*/
private fun Version.clearPreRelease(): Version {
return Version.forIntegers(majorVersion, minorVersion, patchVersion)
}
override fun apply(project: Project) {
with(project) {
val appPlugin = requireNotNull(plugins.findPlugin(AppPlugin::class.java)) {
"Plugin 'com.android.application' must be applied to use this plugin"
}
val propFile = layout.projectDirectory.file(VERSIONING_PROP_FILE)
require(propFile.asFile.exists()) {
"A 'version.properties' file must exist in the project subdirectory to use this plugin"
}
val contents = providers.fileContents(propFile).asText.forUseAtConfigurationTime()
val versionProps = Properties().also { it.load(contents.get().byteInputStream()) }
val versionName = requireNotNull(versionProps.getProperty(VERSIONING_PROP_VERSION_NAME)) {
"version.properties must contain a '$VERSIONING_PROP_VERSION_NAME' property"
}
val versionCode =
requireNotNull(versionProps.getProperty(VERSIONING_PROP_VERSION_CODE).toInt()) {
"version.properties must contain a '$VERSIONING_PROP_VERSION_CODE' property"
}
appPlugin.extension.defaultConfig.versionName = versionName
appPlugin.extension.defaultConfig.versionCode = versionCode
afterEvaluate {
val version = Version.valueOf(versionName)
tasks.register("clearPreRelease") {
doLast {
version.clearPreRelease()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpMajor") {
doLast {
version.incrementMajorVersion()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpMinor") {
doLast {
version.incrementMinorVersion()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpPatch") {
doLast {
version.incrementPatchVersion()
.writeForAndroid(propFile.asFile.outputStream())
}
}
tasks.register("bumpSnapshot") {
doLast {
version.incrementMinorVersion()
.setPreReleaseVersion("SNAPSHOT")
.writeForAndroid(propFile.asFile.outputStream())
}
}
}
}
}
}

View file

@ -38,7 +38,8 @@ android.enableRTxtResourceShrinking=true
android.enablePartialRIncrementalBuilds=true
android.experimental.enableNewResourceShrinker=true
android.experimental.enableNewResourceShrinker.preciseShrinking=true
android.generateManifestClass=true
# Breaks build with AGP 7.0.0-alpha04
# android.generateManifestClass=true
# Default Android build features
android.defaults.buildfeatures.buildconfig=false

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=89714fb5db6bd66fa5a2302f58d26dc33ecd3db36b24a42d84ff6ba99551eeda
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-rc-1-all.zip
distributionSha256Sum=a7ca23b3ccf265680f2bfd35f1f00b1424f4466292c7337c85d46c9641b3f053
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View file

@ -7,7 +7,6 @@ plugins {
dependencies {
kapt(Dependencies.AndroidX.Hilt.daggerCompiler)
kapt(Dependencies.AndroidX.Hilt.daggerHiltCompiler)
kapt(Dependencies.ThirdParty.Moshi.codegen)
api(Dependencies.ThirdParty.Retrofit.lib)
implementation(Dependencies.AndroidX.Hilt.dagger)

View file

@ -1,11 +1,11 @@
package dev.msfjarvis.lobsters.injection
import com.squareup.moshi.Moshi
import dagger.Module
import dagger.Lazy
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.components.ViewModelComponent
import dev.msfjarvis.lobsters.data.api.LobstersApi
import okhttp3.OkHttpClient
import retrofit2.Retrofit
@ -13,7 +13,7 @@ import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
@Module
@InstallIn(ActivityComponent::class)
@InstallIn(ViewModelComponent::class)
object ApiModule {
@Provides

View file

@ -3,14 +3,14 @@ package dev.msfjarvis.lobsters.data.api
import dev.msfjarvis.lobsters.injection.ApiModule
import dev.msfjarvis.lobsters.injection.MoshiModule
import dev.msfjarvis.lobsters.util.TestUtils
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import kotlinx.coroutines.runBlocking
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import okhttp3.mockwebserver.RecordedRequest
import org.junit.AfterClass
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.BeforeClass
import org.junit.Test