diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 617fdbd97676..df017aa6a7b9 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -62,7 +62,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` diff --git a/.github/workflows/tests_unit.yml b/.github/workflows/tests_unit.yml index cfa55a137266..c1c0c70e8a26 100644 --- a/.github/workflows/tests_unit.yml +++ b/.github/workflows/tests_unit.yml @@ -118,7 +118,7 @@ jobs: # CODACY_TOKEN: ${{ secrets.CODACY_TOKEN }} steps: - name: Configure Windows Pagefile - uses: al-cheb/configure-pagefile-action@v1.4 + uses: al-cheb/configure-pagefile-action@v1.5 if: contains(matrix.os, 'windows') with: minimum-size: 8GB diff --git a/AnkiDroid/build.gradle b/AnkiDroid/build.gradle index bd5bb5ce8e37..06c81b7ef77c 100644 --- a/AnkiDroid/build.gradle +++ b/AnkiDroid/build.gradle @@ -2,7 +2,6 @@ plugins { // Gradle plugin portal alias(libs.plugins.tripletPlay) alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.parcelize) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.keeper) @@ -47,6 +46,7 @@ android { buildConfig = true aidl = true viewBinding = true + resValues = true } if (rootProject.testReleaseBuild) { @@ -248,9 +248,9 @@ android { targetCompatibility JavaVersion.VERSION_17 coreLibraryDesugaringEnabled = true } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17 - } +// kotlinOptions { +// jvmTarget = JavaVersion.VERSION_17 +// } packagingOptions { resources { @@ -309,7 +309,7 @@ tasks.register('copyTestLibIntoAndroidTest', Copy) { } } tasks.named('preBuild').configure { dependsOn('copyTestLibIntoAndroidTest') } -tasks.named('runKtlintCheckOverAndroidTestSourceSet').configure { mustRunAfter('copyTestLibIntoAndroidTest') } +//tasks.named('runKtlintCheckOverAndroidTestSourceSet').configure { mustRunAfter('copyTestLibIntoAndroidTest') } // Issue 11078 - some emulators run, but run zero tests, and still report success tasks.register('assertNonzeroAndroidTests') { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimedia/MultimediaFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimedia/MultimediaFragment.kt index ea8efd374b04..faa4c9b523df 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/multimedia/MultimediaFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimedia/MultimediaFragment.kt @@ -86,9 +86,9 @@ abstract class MultimediaFragment( if (arguments != null) { Timber.d("Getting MultimediaActivityExtra values from arguments") val multimediaActivityExtra = - arguments?.getSerializableCompat( + arguments?.getSerializableCompat( MultimediaActivity.MULTIMEDIA_ARGS_EXTRA, - ) as? MultimediaActivityExtra + ) if (multimediaActivityExtra != null) { indexValue = multimediaActivityExtra.index diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt index a6a605102752..2507459ac228 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt @@ -101,7 +101,7 @@ class AppearanceSettingsFragment : SettingsFragment() { // Only restart if theme has changed if (newValue != appThemePref.value) { val previousThemeId = Themes.currentTheme.id - appThemePref.value = newValue.toString() + appThemePref.value = newValue updateCurrentTheme(requireContext()) if (previousThemeId != Themes.currentTheme.id) { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt b/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt index 3b8d5fbc3199..1d10e818e93b 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/web/HttpFetcher.kt @@ -98,7 +98,7 @@ object HttpFetcher { val reader = BufferedReader( InputStreamReader( - response.body!!.byteStream(), + response.body.byteStream(), Charset.forName(encoding), ), ) diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/AlertDialogFacade.kt b/AnkiDroid/src/main/java/com/ichi2/utils/AlertDialogFacade.kt index 29aafc720eba..5db6a7e2c005 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/AlertDialogFacade.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/AlertDialogFacade.kt @@ -91,7 +91,7 @@ fun AlertDialog.Builder.message( fun AlertDialog.Builder.iconAttr( @DrawableRes res: Int, ) = apply { - return this.setIcon(Themes.getResFromAttr(this.context, res)) + this.setIcon(Themes.getResFromAttr(this.context, res)) } fun AlertDialog.Builder.positiveButton( diff --git a/api/build.gradle.kts b/api/build.gradle.kts index fb2397b38674..198c8f46f5ef 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -3,7 +3,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) id("maven-publish") } @@ -48,7 +47,7 @@ android { } release { isMinifyEnabled = false - proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { diff --git a/build.gradle.kts b/build.gradle.kts index 66dc09c3a04d..d08b17a98660 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,7 +42,7 @@ subprojects { afterEvaluate { plugins.withType { - val androidExtension = extensions.getByName("android") as CommonExtension<*, *, *, *, *, *> + val androidExtension = extensions.getByName("android") as CommonExtension androidExtension.testOptions.unitTests { isIncludeAndroidResources = true } @@ -93,7 +93,7 @@ subprojects { */ tasks.withType(KotlinCompile::class.java).configureEach { compilerOptions { - allWarningsAsErrors = fatalWarnings + allWarningsAsErrors = false //fatalWarnings val compilerArgs = mutableListOf( // https://youtrack.jetbrains.com/issue/KT-73255 // Apply @StringRes to both constructor params and generated properties diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 634737b91176..8cdcace26f38 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { diff --git a/gradle.properties b/gradle.properties index 509de8a9e4ff..170a0fda81a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,6 @@ org.gradle.caching=true org.gradle.configuration-cache.parallel=true # Enable file system watching (should reduce disk IO and increase incremental build speed). -org.gradle.vfs.watch=true \ No newline at end of file +org.gradle.vfs.watch=true + +android.newDsl=false \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f737e97e3ef8..39c925d41eb6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ ktlint = '1.5.0' # # Old changelogs - See 'Table of Contents' in sidebar # https://developer.android.com/build/releases/past-releases -androidGradlePlugin = "8.13.0" +androidGradlePlugin = "9.0.0-alpha13" # https://developer.android.com/jetpack/androidx/releases/activity androidxActivity = "1.11.0" # https://developer.android.com/jetpack/androidx/releases/annotation @@ -83,9 +83,9 @@ json = "20250517" jsoup = "1.21.2" androidTestJunit = "1.3.0" # https://github.com/junit-team/junit5/releases/ -junit = "6.0.0" +junit = "6.0.1" # https://github.com/JetBrains/kotlin/releases/ -kotlin = '2.2.10' +kotlin = '2.3.0-Beta2' # https://github.com/Kotlin/kotlinx.serialization/releases kotlinxSerializationJson = "1.9.0" ktlintGradlePlugin = "13.1.0" @@ -110,7 +110,7 @@ slf4jTimber = "3.1" timber = "5.0.1" # https://github.com/Triple-T/gradle-play-publisher/releases # In the past, releases have been published before the changelog -triplet = "3.12.1" +triplet = "3.12.2" turbine = "1.2.1" [libraries] @@ -155,7 +155,7 @@ java-semver = { module = "com.github.zafarkhaja:java-semver", version.ref = "jav jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } -kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" } google-material = { module = "com.google.android.material:material", version.ref = "material" } nanohttpd = { module = "org.nanohttpd:nanohttpd", version.ref = "nanohttpd" } diff --git a/libanki/build.gradle.kts b/libanki/build.gradle.kts index 8f07bf44bce1..4973f2dd5ff9 100644 --- a/libanki/build.gradle.kts +++ b/libanki/build.gradle.kts @@ -3,7 +3,6 @@ import java.util.Properties plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.serialization) } @@ -19,8 +18,6 @@ android { libs.versions.minSdk .get() .toInt() - - consumerProguardFiles("consumer-rules.pro") } compileOptions { diff --git a/libanki/src/main/java/com/ichi2/anki/libanki/DB.kt b/libanki/src/main/java/com/ichi2/anki/libanki/DB.kt index 0822024335e7..49e28ac189f8 100644 --- a/libanki/src/main/java/com/ichi2/anki/libanki/DB.kt +++ b/libanki/src/main/java/com/ichi2/anki/libanki/DB.kt @@ -134,11 +134,12 @@ class DB( database.execSQL(sql, `object`) } - @KotlinCleanup("""Use Kotlin string. Change split so that there is no empty string after last ";".""") fun executeScript(sql: String) { - val queries = java.lang.String(sql).split(";") + val queries = sql.split(";") for (query in queries) { - database.execSQL(query) + if (query.isNotEmpty()) { + database.execSQL(query) + } } } diff --git a/libanki/testutils/build.gradle.kts b/libanki/testutils/build.gradle.kts index e3518701a098..d63d23b2877d 100644 --- a/libanki/testutils/build.gradle.kts +++ b/libanki/testutils/build.gradle.kts @@ -19,7 +19,6 @@ import java.util.Properties plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index d2f2cdfac4dd..506dac74d13a 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { diff --git a/tools/localization/package.json b/tools/localization/package.json index f10d84d0681d..af002f95bab2 100644 --- a/tools/localization/package.json +++ b/tools/localization/package.json @@ -27,7 +27,7 @@ "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.39.0", "@types/jest": "^30.0.0", - "@types/node": "^24.9.2", + "@types/node": "^24.10.0", "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", "eslint": "^9.39.0", diff --git a/tools/localization/yarn.lock b/tools/localization/yarn.lock index 4111488c287a..147a42c590d2 100644 --- a/tools/localization/yarn.lock +++ b/tools/localization/yarn.lock @@ -1149,7 +1149,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^24.9.2": +"@types/node@npm:*": version: 24.9.2 resolution: "@types/node@npm:24.9.2" dependencies: @@ -1158,6 +1158,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^24.10.0": + version: 24.10.0 + resolution: "@types/node@npm:24.10.0" + dependencies: + undici-types: "npm:~7.16.0" + checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46 + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -1530,7 +1539,7 @@ __metadata: "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.39.0" "@types/jest": "npm:^30.0.0" - "@types/node": "npm:^24.9.2" + "@types/node": "npm:^24.10.0" "@typescript-eslint/eslint-plugin": "npm:^8.46.2" "@typescript-eslint/parser": "npm:^8.46.2" axios: "npm:^1.13.1" diff --git a/vbpd/build.gradle.kts b/vbpd/build.gradle.kts index 1a0ab373fc47..6589470fb2a5 100644 --- a/vbpd/build.gradle.kts +++ b/vbpd/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android {