Skip to content

Update dependencies & Modernize the codebase a little bit #89

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.ludi.common)
alias(libs.plugins.ludi.android.common)
alias(libs.plugins.firebase.crashlytics)
Expand Down Expand Up @@ -54,10 +55,6 @@ android {
jvmTarget = "17"
}

composeOptions {
kotlinCompilerExtensionVersion = "1.5.11-dev-k1.9.23-96ef9dc6af1"
}

testOptions {
unitTests {
isIncludeAndroidResources = true
Expand Down
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ plugins {
alias(libs.plugins.android.application).apply(false)
alias(libs.plugins.android.library).apply(false)
alias(libs.plugins.compose.multiplatform).apply(false)
alias(libs.plugins.compose.compiler).apply(false)
alias(libs.plugins.spotless.plugin).apply(false)
alias(libs.plugins.ktlint.plugin).apply(false)
}
8 changes: 5 additions & 3 deletions desktopApp/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.ludi.common)
}

kotlin {
jvm {
jvmToolchain(17)
withJava()
}
jvmToolchain(17)
sourceSets {
jvmMain {
dependencies {
Expand All @@ -26,8 +28,8 @@ dependencies {
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jvmTarget = "17"
compilerOptions {
jvmTarget = JvmTarget.JVM_17
}
}

Expand Down
117 changes: 59 additions & 58 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,87 +2,88 @@

[plugins]

gradle-buildconfig-plugin = "com.github.gmazzo.buildconfig:5.3.5"
android-application = "com.android.application:8.3.0"
android-library = "com.android.library:8.3.0"
kotlin-android = "org.jetbrains.kotlin.android:1.9.23"
kotlin-jvm = "org.jetbrains.kotlin.jvm:1.9.23"
kotlin-multiplatform = "org.jetbrains.kotlin.multiplatform:1.9.23"
compose-multiplatform = "org.jetbrains.compose:1.6.1"
kotlin-ksp = "com.google.devtools.ksp:1.9.23-1.0.19"
kotlinx-serialization = "org.jetbrains.kotlin.plugin.serialization:1.9.23"
wire = "com.squareup.wire:4.9.7"
gradle-buildconfig-plugin = "com.github.gmazzo.buildconfig:5.5.0"
android-application = "com.android.application:8.6.1"
android-library = "com.android.library:8.6.1"
kotlin-android = "org.jetbrains.kotlin.android:2.0.0-RC1"
kotlin-jvm = "org.jetbrains.kotlin.jvm:2.0.0-RC1"
kotlin-multiplatform = "org.jetbrains.kotlin.multiplatform:2.0.0-RC1"
compose-multiplatform = "org.jetbrains.compose:1.7.0-rc01"
compose-compiler = "org.jetbrains.kotlin.plugin.compose:2.0.0-RC1"
kotlin-ksp = "com.google.devtools.ksp:2.0.0-1.0.24"
kotlinx-serialization = "org.jetbrains.kotlin.plugin.serialization:2.0.0-RC1"
wire = "com.squareup.wire:5.1.0"
ktlint-plugin = "org.jlleitschuh.gradle.ktlint:11.6.1"
spotless-plugin = "com.diffplug.spotless:6.25.0"
google-services = "com.google.gms.google-services:4.4.1"
firebase-crashlytics = "com.google.firebase.crashlytics:2.9.9"
gradle-play-publisher = "com.github.triplet.play:3.9.1"
google-services = "com.google.gms.google-services:4.4.2"
firebase-crashlytics = "com.google.firebase.crashlytics:3.0.2"
gradle-play-publisher = "com.github.triplet.play:3.11.0"
app-versioning = "io.github.reactivecircus.app-versioning:1.3.2"
sqldelight = "app.cash.sqldelight:2.0.1"
sqldelight = "app.cash.sqldelight:2.0.2"
ludi-common = { id = "ludi.common", version = "unspecified" }
ludi-android-common = { id = "ludi.android.common", version = "unspecified" }

[libraries]

androidx-core-ktx = "androidx.core:core-ktx:1.12.0"
androidx-activity-compose = "androidx.activity:activity-compose:1.8.2"
androidx-compose-ui-test-junit4 = "androidx.compose.ui:ui-test-junit4:1.6.3"
androidx-core-ktx = "androidx.core:core-ktx:1.13.1"
androidx-activity-compose = "androidx.activity:activity-compose:1.9.2"
androidx-compose-ui-test-junit4 = "androidx.compose.ui:ui-test-junit4:1.7.2"
material3-windowsizeclass = "dev.chrisbanes.material3:material3-window-size-class-multiplatform:0.5.0"
androidx-browser = "androidx.browser:browser:1.8.0"
kmpalette-core = "com.kmpalette:kmpalette-core:3.1.0"
views-material = "com.google.android.material:material:1.11.0"
views-material = "com.google.android.material:material:1.12.0"
splash-screen = "androidx.core:core-splashscreen:1.0.1"
androidx-annotations = "androidx.annotation:annotation:1.7.1"
leakcanary = "com.squareup.leakcanary:leakcanary-android:2.13"
coil = "io.coil-kt:coil-compose:2.6.0"
androidx-annotations = "androidx.annotation:annotation:1.8.2"
leakcanary = "com.squareup.leakcanary:leakcanary-android:2.14"
coil = "io.coil-kt:coil-compose:2.7.0"
compose-imageloader = "io.github.qdsfdhvh:image-loader:1.6.8"
compose-richeditor = "com.mohamedrejeb.richeditor:richeditor-compose:1.0.0-rc02"
kermit = "co.touchlab:kermit:2.0.3"
firebase-bom = "com.google.firebase:firebase-bom:32.7.4"
firebase-crashlytics = "com.google.firebase:firebase-crashlytics:18.6.2"
firebase-analytics = "com.google.firebase:firebase-analytics:21.5.1"
bugsnag = "com.bugsnag:bugsnag:3.7.1"
androidx-lifecycle-runtime-ktx = "androidx.lifecycle:lifecycle-runtime-ktx:2.7.0"
androidx-lifecycle-runtime-compose = "androidx.lifecycle:lifecycle-runtime-compose:2.7.0"
compose-richeditor = "com.mohamedrejeb.richeditor:richeditor-compose:1.0.0-rc07"
kermit = "co.touchlab:kermit:2.0.4"
firebase-bom = "com.google.firebase:firebase-bom:33.3.0"
firebase-crashlytics = "com.google.firebase:firebase-crashlytics:19.1.0"
firebase-analytics = "com.google.firebase:firebase-analytics:22.1.0"
bugsnag = "com.bugsnag:bugsnag:3.7.2"
androidx-lifecycle-runtime-ktx = "androidx.lifecycle:lifecycle-runtime-ktx:2.8.6"
androidx-lifecycle-runtime-compose = "androidx.lifecycle:lifecycle-runtime-compose:2.8.6"
voyager-screenmodel = "cafe.adriel.voyager:voyager-screenmodel:1.0.0"
voyager-navigator = "cafe.adriel.voyager:voyager-navigator:1.0.0"
voyager-transitions = "cafe.adriel.voyager:voyager-transitions:1.0.0"
molecule = "app.cash.molecule:molecule-runtime:1.4.1"
androidx-test-core = "androidx.test:core:1.5.0"
androidx-test-ext-junit = "androidx.test.ext:junit:1.1.5"
androidx-test-runner = "androidx.test:runner:1.5.2"
datastore = "androidx.datastore:datastore:1.1.0-beta02"
datastore-core = "androidx.datastore:datastore-core:1.1.0-beta02"
datastore-preferences = "androidx.datastore:datastore-preferences:1.1.0-beta02"
datastore-preferences-core = "androidx.datastore:datastore-preferences-core:1.1.0-beta02"
okio = "com.squareup.okio:okio:3.9.0"
sqldelight-android = "app.cash.sqldelight:android-driver:2.0.1"
sqldelight-jvm = "app.cash.sqldelight:sqlite-driver:2.0.1"
sqldelight-paging = "app.cash.sqldelight:androidx-paging3-extensions:2.0.1"
molecule = "app.cash.molecule:molecule-runtime:2.0.0"
androidx-test-core = "androidx.test:core:1.6.1"
androidx-test-ext-junit = "androidx.test.ext:junit:1.2.1"
androidx-test-runner = "androidx.test:runner:1.6.2"
datastore = "androidx.datastore:datastore:1.1.1"
datastore-core = "androidx.datastore:datastore-core:1.1.1"
datastore-preferences = "androidx.datastore:datastore-preferences:1.1.1"
datastore-preferences-core = "androidx.datastore:datastore-preferences-core:1.1.1"
okio = "com.squareup.okio:okio:3.9.1"
sqldelight-android = "app.cash.sqldelight:android-driver:2.0.2"
sqldelight-jvm = "app.cash.sqldelight:sqlite-driver:2.0.2"
sqldelight-paging = "app.cash.sqldelight:androidx-paging3-extensions:2.0.2"
sqlite-android = "com.github.requery:sqlite-android:3.45.0"
kotlin-inject-ksp = "me.tatarka.inject:kotlin-inject-compiler-ksp:0.6.3"
kotlin-inject-runtime = "me.tatarka.inject:kotlin-inject-runtime:0.6.3"
lyricist-core = "cafe.adriel.lyricist:lyricist:1.6.2"
lyricist-processor = "cafe.adriel.lyricist:lyricist-processor:1.6.2"
rss-parser = "com.prof18.rssparser:rssparser:6.0.6"
ktor-core = "io.ktor:ktor-client-core:2.3.9"
ktor-okhttp = "io.ktor:ktor-client-okhttp:2.3.9"
ktor-client-mock = "io.ktor:ktor-client-mock:2.3.9"
ktor-content-negotation = "io.ktor:ktor-client-content-negotiation:2.3.9"
ktor-kotlinx-serialization = "io.ktor:ktor-serialization-kotlinx-json:2.3.9"
kotlin-inject-ksp = "me.tatarka.inject:kotlin-inject-compiler-ksp:0.7.2"
kotlin-inject-runtime = "me.tatarka.inject:kotlin-inject-runtime:0.7.2"
lyricist-core = "cafe.adriel.lyricist:lyricist:1.7.0"
lyricist-processor = "cafe.adriel.lyricist:lyricist-processor:1.7.0"
rss-parser = "com.prof18.rssparser:rssparser:6.0.8"
ktor-core = "io.ktor:ktor-client-core:2.3.12"
ktor-okhttp = "io.ktor:ktor-client-okhttp:2.3.12"
ktor-client-mock = "io.ktor:ktor-client-mock:2.3.12"
ktor-content-negotation = "io.ktor:ktor-client-content-negotiation:2.3.12"
ktor-kotlinx-serialization = "io.ktor:ktor-serialization-kotlinx-json:2.3.12"
paging-common = "app.cash.paging:paging-common:3.3.0-alpha02-0.5.1"
paging-compose = "app.cash.paging:paging-compose-common:3.3.0-alpha02-0.5.1"
paging-testing = "app.cash.paging:paging-testing:3.3.0-alpha02-0.5.1"
junit = "junit:junit:4.13.2"
strikt = "io.strikt:strikt-core:0.34.1"
strikt = "io.strikt:strikt-core:0.35.1"
turbine = "app.cash.turbine:turbine:1.1.0"
robolectric = "org.robolectric:robolectric:4.11.1"
guava = "com.google.guava:guava:33.1.0-android"
test-parameter-injector = "com.google.testparameterinjector:test-parameter-injector:1.15"
kotlinx-coroutines-test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0"
kotlinx-serialization = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
robolectric = "org.robolectric:robolectric:4.13"
guava = "com.google.guava:guava:33.3.0-android"
test-parameter-injector = "com.google.testparameterinjector:test-parameter-injector:1.17"
kotlinx-coroutines-test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0"
kotlinx-serialization = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"

# Convention plugins dependencies
android-gradlePlugin = "com.android.tools.build:gradle:8.3.0"
android-gradlePlugin = "com.android.tools.build:gradle:8.6.1"
ktlint-gradlePlugin = "org.jlleitschuh.gradle:ktlint-gradle:11.6.1"
spotless-gradlePlugin = "com.diffplug.spotless:spotless-plugin-gradle:6.25.0"
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Sun Feb 26 22:07:05 EET 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionSha256Sum=9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
35 changes: 22 additions & 13 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import com.github.gmazzo.buildconfig.BuildConfigSourceSet
import de.fayard.refreshVersions.core.versionFor
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
import java.io.FileInputStream
import java.util.Properties

plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.android.library)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.ludi.common)
alias(libs.plugins.ludi.android.common)
alias(libs.plugins.kotlin.ksp)
Expand All @@ -20,22 +23,26 @@ plugins {
kotlin {
targets.configureEach {
compilations.configureEach {
compilerOptions.configure {
freeCompilerArgs.add("-Xexpect-actual-classes")
compileTaskProvider.configure {
compilerOptions {
freeCompilerArgs.add("-Xexpect-actual-classes")
}
}
}
}
androidTarget {
compilations.configureEach {
kotlinOptions {
jvmTarget = "17"
compileTaskProvider.configure {
compilerOptions {
jvmTarget = JvmTarget.JVM_17
}
}
}
}

jvm("desktop") {
jvmToolchain(17)
}
jvm("desktop")

jvmToolchain(17)

@OptIn(ExperimentalKotlinGradlePluginApi::class)
applyHierarchyTemplate {
Expand Down Expand Up @@ -161,6 +168,7 @@ kotlin {

val androidUnitTest by getting {
dependencies {
implementation(compose.components.resources)
implementation(libs.guava)
implementation(libs.junit)
implementation(libs.robolectric)
Expand All @@ -185,7 +193,7 @@ kotlin {

val desktopTest by getting {
dependencies {
dependsOn(commonTest.get())

}
}
}
Expand All @@ -207,14 +215,15 @@ sqldelight {
}
}

compose.resources {
publicResClass = true
generateResClass = always
}

android {
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].resources.srcDirs("src/commonMain/resources")

composeOptions {
kotlinCompilerExtensionVersion = "1.5.11-dev-k1.9.23-96ef9dc6af1"
}

testOptions {
unitTests {
isIncludeAndroidResources = true
Expand Down Expand Up @@ -246,7 +255,7 @@ fun getValueOfKey(key: String) =
properties.getProperty(key)
}

tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>>().all {
tasks.withType<KotlinCompilationTask<*>>().all {
if (name != "kspCommonMainKotlinMetadata") {
dependsOn("kspCommonMainKotlinMetadata")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.hasScrollToIndexAction
Expand All @@ -21,20 +22,27 @@ import com.mr3y.ludi.shared.ui.adaptive.LocalWindowSizeClass
import com.mr3y.ludi.shared.ui.resources.LudiStrings
import com.mr3y.ludi.shared.ui.screens.BaseRobolectricTest
import com.mr3y.ludi.shared.ui.theme.LudiTheme
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.PreviewContextConfigurationEffect
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
class DealsScreenTest : BaseRobolectricTest() {

@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class, ExperimentalResourceApi::class)
@Test
fun deals_launches_state_is_saved_and_survives_config_changes() {
val restorationTester = StateRestorationTester(composeTestRule)
var strings: LudiStrings? by mutableStateOf(null)
var selectedTab by mutableStateOf(0)
restorationTester.setContent {
// A workaround for this issue: https://github.com/robolectric/robolectric/issues/8461
// and this issue: https://youtrack.jetbrains.com/issue/CMP-6612/Support-non-compose-UI-tests-with-resources
CompositionLocalProvider(LocalInspectionMode provides true) {
PreviewContextConfigurationEffect()
}
LudiTheme {
CompositionLocalProvider(LocalWindowSizeClass provides calculateWindowSizeClass()) {
strings = LocalStrings.current
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ import com.mr3y.ludi.shared.ui.presenter.model.FavouriteGame
import com.mr3y.ludi.shared.ui.presenter.model.NewsDataSource
import com.mr3y.ludi.shared.ui.presenter.model.OnboardingGames
import com.mr3y.ludi.shared.ui.presenter.model.OnboardingState
import ludi.shared.generated.resources.game_spot_logo
import ludi.shared.generated.resources.giant_bomb_logo
import ludi.shared.generated.resources.ign_logo
import kotlinx.coroutines.flow.flowOf
import ludi.shared.generated.resources.Res

val FakeAllGenres = Result.Success(
setOf(
Expand Down Expand Up @@ -1279,9 +1283,9 @@ val FakeOnboardingGames = OnboardingGames.SuggestedGames(
val FakeSelectedGames = listOf(FavouriteGame(id = 3498, title = "Grand Theft Auto V", imageUrl = "https://media.rawg.io/media/games/456/456dea5e1c7e3cd07060c14e96612001.jpg", rating = 4.47f))

val FakeNewsDataSources = listOf(
NewsDataSource("Game spot", "game_spot_logo.xml", Source.GameSpot),
NewsDataSource("Giant bomb", "giant_bomb_logo.xml", Source.GiantBomb),
NewsDataSource("IGN", "ign_logo.xml", Source.IGN)
NewsDataSource("Game spot", Res.drawable.game_spot_logo, Source.GameSpot),
NewsDataSource("Giant bomb", Res.drawable.giant_bomb_logo, Source.GiantBomb),
NewsDataSource("IGN", Res.drawable.ign_logo, Source.IGN)
)

val FakeOnboardingState = OnboardingState(
Expand Down
Loading
Loading