From bf46187d0a9cdcc60f2896afd413f484863c5bee Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 9 Jan 2021 15:54:05 +0530 Subject: [PATCH 1/8] build: bump AGP and transitive dependencies Signed-off-by: Harsh Shandilya --- buildSrc/buildDependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/buildDependencies.gradle b/buildSrc/buildDependencies.gradle index 1e390a0e..d18be7dd 100644 --- a/buildSrc/buildDependencies.gradle +++ b/buildSrc/buildDependencies.gradle @@ -1,8 +1,8 @@ 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', ] rootProject.ext.build = [ From a4e0c90fe95127b4437e3ad1824de85a11ebe707 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 9 Jan 2021 15:59:22 +0530 Subject: [PATCH 2/8] build: bump Gradle Signed-off-by: Harsh Shandilya --- buildSrc/src/main/java/BaseProjectConfig.kt | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/BaseProjectConfig.kt b/buildSrc/src/main/java/BaseProjectConfig.kt index 289ca85f..619f1c26 100644 --- a/buildSrc/src/main/java/BaseProjectConfig.kt +++ b/buildSrc/src/main/java/BaseProjectConfig.kt @@ -25,9 +25,9 @@ internal fun Project.configureForRootProject() { delete(rootProject.buildDir) } tasks.withType { - gradleVersion = "6.8-rc-1" + gradleVersion = "6.8" distributionType = Wrapper.DistributionType.ALL - distributionSha256Sum = "89714fb5db6bd66fa5a2302f58d26dc33ecd3db36b24a42d84ff6ba99551eeda" + distributionSha256Sum = "a7ca23b3ccf265680f2bfd35f1f00b1424f4466292c7337c85d46c9641b3f053" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 08fa2b9e..f1577bdd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 From a36ca2672088ce47e88bdfef5432ca30b3b0ce3a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 14 Jan 2021 16:02:35 +0530 Subject: [PATCH 3/8] build: update Jetpack and Accompanist Signed-off-by: Harsh Shandilya --- buildSrc/src/main/java/Dependencies.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index b1b34652..d036e7cb 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -7,7 +7,7 @@ private const val ANDROIDX_HILT_VERSION = "1.0.0-alpha02" private const val DAGGER_HILT_VERSION = "2.30.1-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" @@ -67,7 +67,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 { From dc61aa07ac546a854e8218275e733492d5ddbb54 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 15 Jan 2021 11:19:05 +0530 Subject: [PATCH 4/8] build: bump Dagger Hilt Signed-off-by: Harsh Shandilya --- buildSrc/src/main/java/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index d036e7cb..0255875e 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -4,7 +4,7 @@ */ 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-alpha10" From e9a55cc1dbdd892344acd3c4fc2feff5baf6b5ec Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 18 Jan 2021 18:43:05 +0530 Subject: [PATCH 5/8] buildSrc: introduce versioning plugin Signed-off-by: Harsh Shandilya --- app/build.gradle.kts | 3 +- app/version.properties | 6 ++ buildSrc/build.gradle.kts | 5 + buildSrc/buildDependencies.gradle | 2 + buildSrc/src/main/java/VersioningPlugin.kt | 115 +++++++++++++++++++++ 5 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 app/version.properties create mode 100644 buildSrc/src/main/java/VersioningPlugin.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fa52466c..7a0f79c2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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") diff --git a/app/version.properties b/app/version.properties new file mode 100644 index 00000000..4badf0e7 --- /dev/null +++ b/app/version.properties @@ -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 diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 6e660945..a515a9bd 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -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")) } diff --git a/buildSrc/buildDependencies.gradle b/buildSrc/buildDependencies.gradle index d18be7dd..42c018e5 100644 --- a/buildSrc/buildDependencies.gradle +++ b/buildSrc/buildDependencies.gradle @@ -3,6 +3,7 @@ rootProject.ext.versions = [ daggerHilt: '2.30.1-alpha', kotlin: '1.4.21', 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}", ] diff --git a/buildSrc/src/main/java/VersioningPlugin.kt b/buildSrc/src/main/java/VersioningPlugin.kt new file mode 100644 index 00000000..81df3198 --- /dev/null +++ b/buildSrc/src/main/java/VersioningPlugin.kt @@ -0,0 +1,115 @@ +/* + * 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 java.io.OutputStream +import java.util.Properties +import org.gradle.api.Plugin +import org.gradle.api.Project + +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 { + + /** + * 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()) + } + } + } + } + } +} From 19c5bac6d3135b82cb555b7cd07eedf2ef6fc796 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 18 Jan 2021 18:46:19 +0530 Subject: [PATCH 6/8] all: use Dagger Hilt VM injection Signed-off-by: Harsh Shandilya --- app/build.gradle.kts | 2 -- .../dev/msfjarvis/lobsters/injection/PersistenceModule.kt | 4 ++-- .../msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt | 6 ++++-- buildSrc/src/main/java/Dependencies.kt | 4 ---- model/build.gradle.kts | 1 - .../main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt | 4 ++-- 6 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7a0f79c2..bda98571 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -29,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")) @@ -49,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) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/PersistenceModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/PersistenceModule.kt index b13e523e..361b4066 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/injection/PersistenceModule.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/PersistenceModule.kt @@ -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 diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt index 630e1827..7da7ce2c 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt @@ -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() { diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 0255875e..f48d3871 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -3,7 +3,6 @@ * SPDX-License-Identifier: GPL-3.0-only */ -private const val ANDROIDX_HILT_VERSION = "1.0.0-alpha02" private const val DAGGER_HILT_VERSION = "2.31-alpha" object Dependencies { @@ -44,9 +43,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 { diff --git a/model/build.gradle.kts b/model/build.gradle.kts index f13746e6..a63ae76d 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -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) diff --git a/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt b/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt index 9b46ae60..24a9290d 100644 --- a/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt +++ b/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt @@ -5,7 +5,7 @@ import dagger.Module import dagger.Lazy 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 From 6b85bc51dec6dec4dd1bd775ad5ded900dadcf2b Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 18 Jan 2021 18:51:01 +0530 Subject: [PATCH 7/8] gradle: disable problematic flag Signed-off-by: Harsh Shandilya --- gradle.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6ee6230d..e61ed60a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 From 45c3ec504f1ee7f9878c03b5d5258372d7c0d085 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 18 Jan 2021 18:53:18 +0530 Subject: [PATCH 8/8] all: reformat Signed-off-by: Harsh Shandilya --- .../lobsters/ui/main/MainActivity.kt | 6 ++-- .../lobsters/ui/posts/HottestPosts.kt | 1 - .../lobsters/ui/posts/LobstersItem.kt | 31 ++++++++++++------- .../msfjarvis/lobsters/ui/posts/SavedPosts.kt | 1 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 ++-- .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 ++-- buildSrc/buildDependencies.gradle | 20 ++++++------ buildSrc/src/main/java/BaseProjectConfig.kt | 4 ++- buildSrc/src/main/java/Dependencies.kt | 1 + buildSrc/src/main/java/LobstersPlugin.kt | 3 +- buildSrc/src/main/java/SigningConfig.kt | 2 +- buildSrc/src/main/java/VersioningPlugin.kt | 11 ++++--- .../msfjarvis/lobsters/injection/ApiModule.kt | 2 +- .../lobsters/data/api/LobstersApiTest.kt | 4 +-- 14 files changed, 55 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index fcb09528..3b8a5868 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -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 diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt index ebf678ee..8da9e375 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt @@ -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 diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index 808a8360..5ae278ad 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -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) { - top.linkTo(title.bottom) - }.padding(vertical = 8.dp), + modifier = Modifier + .constrainAs(tags) { + top.linkTo(title.bottom) + } + .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) { - top.linkTo(tags.bottom) - start.linkTo(avatar.end) - }, + 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(), diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt index ab6a190f..27f6ba6b 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt @@ -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 diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 4ae7d123..74819d59 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 4ae7d123..74819d59 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/buildSrc/buildDependencies.gradle b/buildSrc/buildDependencies.gradle index 42c018e5..8e55c4d2 100644 --- a/buildSrc/buildDependencies.gradle +++ b/buildSrc/buildDependencies.gradle @@ -1,17 +1,17 @@ rootProject.ext.versions = [ - agp: '7.0.0-alpha04', + agp : '7.0.0-alpha04', daggerHilt: '2.30.1-alpha', - kotlin: '1.4.21', - lint: '27.3.0-alpha04', - semver: '0.9.0', + kotlin : '1.4.21', + lint : '27.3.0-alpha04', + semver : '0.9.0', ] rootProject.ext.build = [ - androidGradlePlugin: "com.android.tools.build:gradle:${versions.agp}", - androidGradlePlugin_builder: "com.android.tools.build:builder:${versions.agp}", + androidGradlePlugin : "com.android.tools.build:gradle:${versions.agp}", + androidGradlePlugin_builder : "com.android.tools.build:builder:${versions.agp}", androidGradlePlugin_builderModel: "com.android.tools.build:builder-model:${versions.agp}", - 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}", + 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}", ] diff --git a/buildSrc/src/main/java/BaseProjectConfig.kt b/buildSrc/src/main/java/BaseProjectConfig.kt index 619f1c26..1e6fbd3a 100644 --- a/buildSrc/src/main/java/BaseProjectConfig.kt +++ b/buildSrc/src/main/java/BaseProjectConfig.kt @@ -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 { kotlinOptions { freeCompilerArgs = freeCompilerArgs + listOf( diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index f48d3871..19ceccfd 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -7,6 +7,7 @@ private const val DAGGER_HILT_VERSION = "2.31-alpha" object Dependencies { const val COMPOSE_VERSION = "1.0.0-alpha10" + object Kotlin { object Coroutines { diff --git a/buildSrc/src/main/java/LobstersPlugin.kt b/buildSrc/src/main/java/LobstersPlugin.kt index 33a62180..a1d1cd66 100644 --- a/buildSrc/src/main/java/LobstersPlugin.kt +++ b/buildSrc/src/main/java/LobstersPlugin.kt @@ -40,7 +40,8 @@ class LobstersPlugin : Plugin { is AppPlugin -> { project.extensions.getByType().configureCommonAndroidOptions() project.extensions.getByType().configureBuildSigning(project) - project.extensions.getByType().configureAndroidApplicationOptions(project) + project.extensions.getByType() + .configureAndroidApplicationOptions(project) } is Kapt3GradleSubplugin -> { project.configureKapt() diff --git a/buildSrc/src/main/java/SigningConfig.kt b/buildSrc/src/main/java/SigningConfig.kt index 7fb7b8b8..50b86c47 100644 --- a/buildSrc/src/main/java/SigningConfig.kt +++ b/buildSrc/src/main/java/SigningConfig.kt @@ -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" diff --git a/buildSrc/src/main/java/VersioningPlugin.kt b/buildSrc/src/main/java/VersioningPlugin.kt index 81df3198..8601f7f1 100644 --- a/buildSrc/src/main/java/VersioningPlugin.kt +++ b/buildSrc/src/main/java/VersioningPlugin.kt @@ -6,10 +6,10 @@ import com.android.build.gradle.internal.plugins.AppPlugin import com.github.zafarkhaja.semver.Version -import java.io.OutputStream -import java.util.Properties 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" @@ -71,9 +71,10 @@ class VersioningPlugin : Plugin { 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" - } + 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 { diff --git a/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt b/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt index 24a9290d..92a002c0 100644 --- a/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt +++ b/model/src/main/java/dev/msfjarvis/lobsters/injection/ApiModule.kt @@ -1,8 +1,8 @@ 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.ViewModelComponent diff --git a/model/src/test/java/dev/msfjarvis/lobsters/data/api/LobstersApiTest.kt b/model/src/test/java/dev/msfjarvis/lobsters/data/api/LobstersApiTest.kt index aec1f23d..3f5f9e91 100644 --- a/model/src/test/java/dev/msfjarvis/lobsters/data/api/LobstersApiTest.kt +++ b/model/src/test/java/dev/msfjarvis/lobsters/data/api/LobstersApiTest.kt @@ -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