diff --git a/build.gradle b/build.gradle index d6d7c22f..d8f54d1f 100644 --- a/build.gradle +++ b/build.gradle @@ -13,11 +13,11 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath gradlePlugins.gradle - classpath gradlePlugins.kotlin - classpath gradlePlugins.ktlintGradle - classpath gradlePlugins.detekt - classpath gradlePlugins.jacoco + classpath libs.gradle + classpath libs.kotlin + classpath libs.ktlintGradle + classpath libs.detekt + classpath libs.jacoco } } @@ -47,6 +47,6 @@ allprojects { apply from: 'gradle_scripts/jacoco.gradle' wrapper { - gradleVersion(versions.gradle) + gradleVersion(libs.versions.gradle.get()) distributionType("all") } diff --git a/core/domain/build.gradle b/core/domain/build.gradle index 734c977b..0b0ab96c 100644 --- a/core/domain/build.gradle +++ b/core/domain/build.gradle @@ -8,7 +8,7 @@ ext { } dependencies { - implementation androidSupport.roomRuntime - implementation androidSupport.roomKtx - kapt androidSupport.room + implementation libs.roomRuntime + implementation libs.roomKtx + kapt libs.room } diff --git a/core/subsonic-api/build.gradle b/core/subsonic-api/build.gradle index a95c4078..9ad09193 100644 --- a/core/subsonic-api/build.gradle +++ b/core/subsonic-api/build.gradle @@ -1,24 +1,24 @@ apply from: bootstrap.kotlinModule dependencies { - api other.retrofit - api other.jacksonConverter - api other.koinCore + api libs.retrofit + api libs.jacksonConverter + api libs.koinCore - implementation(other.jacksonKotlin) { + implementation(libs.jacksonKotlin) { exclude module: 'kotlin-reflect' } - implementation other.kotlinReflect // for jackson kotlin, but to use the same version - implementation other.okhttpLogging - implementation other.timber + implementation libs.kotlinReflect // for jackson kotlin, but to use the same version + implementation libs.okhttpLogging + implementation libs.timber - testImplementation testing.kotlinJunit - testImplementation testing.mockito - testImplementation testing.mockitoInline - testImplementation testing.mockitoKotlin - testImplementation testing.kluent - testImplementation testing.mockWebServer - testImplementation testing.apacheCodecs + testImplementation libs.kotlinJunit + testImplementation libs.mockito + testImplementation libs.mockitoInline + testImplementation libs.mockitoKotlin + testImplementation libs.kluent + testImplementation libs.mockWebServer + testImplementation libs.apacheCodecs } ext { diff --git a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt index b5847c95..324d672f 100644 --- a/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt +++ b/core/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIClient.kt @@ -83,7 +83,7 @@ class SubsonicAPIClient( // Create the Retrofit instance, and register a special converter factory // It will update our protocol version to the correct version, once we made a successful call - val retrofit: Retrofit = Retrofit.Builder() + private val retrofit: Retrofit = Retrofit.Builder() .baseUrl("${config.baseUrl}/rest/") .client(okHttpClient) .addConverterFactory( @@ -113,13 +113,16 @@ class SubsonicAPIClient( this.addInterceptor(loggingInterceptor) } - @SuppressWarnings("TrustAllX509TrustManager", "EmptyFunctionBlock") private fun OkHttpClient.Builder.allowSelfSignedCertificates() { - val trustManager = object : X509TrustManager { - override fun checkClientTrusted(p0: Array?, p1: String?) {} - override fun checkServerTrusted(p0: Array?, p1: String?) {} - override fun getAcceptedIssuers(): Array = emptyArray() - } + val trustManager = + @Suppress("CustomX509TrustManager") + object : X509TrustManager { + @Suppress("TrustAllX509TrustManager") + override fun checkClientTrusted(p0: Array?, p1: String?) {} + @Suppress("TrustAllX509TrustManager") + override fun checkServerTrusted(p0: Array?, p1: String?) {} + override fun getAcceptedIssuers(): Array = emptyArray() + } val sslContext = SSLContext.getInstance("SSL") sslContext.init(null, arrayOf(trustManager), SecureRandom()) diff --git a/dependencies.gradle b/dependencies.gradle index d69c98c9..1a8f14d4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,109 +2,4 @@ ext.versions = [ minSdk : 21, targetSdk : 30, compileSdk : 31, - // You need to run ./gradlew wrapper after updating the version - gradle : '7.3.2', - - navigation : "2.3.5", - gradlePlugin : "7.0.0", - androidxcore : "1.6.0", - ktlint : "0.43.2", - ktlintGradle : "10.2.0", - detekt : "1.19.0", - jacoco : "0.8.7", - preferences : "1.1.1", - media : "1.3.1", - - androidSupport : "28.0.0", - androidLegacySupport : "1.0.0", - androidSupportDesign : "1.4.0", - constraintLayout : "2.1.1", - multidex : "2.0.1", - room : "2.4.0", - kotlin : "1.6.10", - kotlinxCoroutines : "1.5.2-native-mt", - viewModelKtx : "2.3.0", - - retrofit : "2.9.0", - jackson : "2.9.5", - okhttp : "3.14.19", - koin : "3.0.2", - picasso : "2.71828", - - junit4 : "4.13.2", - junit5 : "5.8.1", - mockito : "4.1.0", - mockitoKotlin : "4.0.0", - kluent : "1.68", - apacheCodecs : "1.15", - robolectric : "4.6.1", - timber : "4.7.1", - fastScroll : "2.0.1", - colorPicker : "2.2.3", - rxJava : "3.1.2", - rxAndroid : "3.0.0", - multiType : "4.3.0", -] - -ext.gradlePlugins = [ - gradle : "com.android.tools.build:gradle:$versions.gradlePlugin", - kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin", - ktlintGradle : "org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle", - detekt : "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$versions.detekt", - jacoco : "org.jacoco:org.jacoco.core:$versions.jacoco", -] - -ext.androidSupport = [ - core : "androidx.core:core-ktx:$versions.androidxcore", - support : "androidx.legacy:legacy-support-v4:$versions.androidLegacySupport", - design : "com.google.android.material:material:$versions.androidSupportDesign", - annotations : "com.android.support:support-annotations:$versions.androidSupport", - multidex : "androidx.multidex:multidex:$versions.multidex", - constraintLayout : "androidx.constraintlayout:constraintlayout:$versions.constraintLayout", - room : "androidx.room:room-compiler:$versions.room", - roomRuntime : "androidx.room:room-runtime:$versions.room", - roomKtx : "androidx.room:room-ktx:$versions.room", - viewModelKtx : "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.viewModelKtx", - navigationFragment : "androidx.navigation:navigation-fragment:$versions.navigation", - navigationUi : "androidx.navigation:navigation-ui:$versions.navigation", - navigationFragmentKtx : "androidx.navigation:navigation-fragment-ktx:$versions.navigation", - navigationUiKtx : "androidx.navigation:navigation-ui-ktx:$versions.navigation", - navigationFeature : "androidx.navigation:navigation-dynamic-features-fragment:$versions.navigation", - preferences : "androidx.preference:preference:$versions.preferences", - media : "androidx.media:media:$versions.media", -] - -ext.other = [ - kotlinStdlib : "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin", - kotlinReflect : "org.jetbrains.kotlin:kotlin-reflect:$versions.kotlin", - kotlinxCoroutines : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.kotlinxCoroutines", - retrofit : "com.squareup.retrofit2:retrofit:$versions.retrofit", - gsonConverter : "com.squareup.retrofit2:converter-gson:$versions.retrofit", - jacksonConverter : "com.squareup.retrofit2:converter-jackson:$versions.retrofit", - jacksonKotlin : "com.fasterxml.jackson.module:jackson-module-kotlin:$versions.jackson", - okhttpLogging : "com.squareup.okhttp3:logging-interceptor:$versions.okhttp", - koinCore : "io.insert-koin:koin-core:$versions.koin", - koinAndroid : "io.insert-koin:koin-android:$versions.koin", - koinViewModel : "io.insert-koin:koin-android-viewmodel:$versions.koin", - picasso : "com.squareup.picasso:picasso:$versions.picasso", - timber : "com.jakewharton.timber:timber:$versions.timber", - fastScroll : "com.simplecityapps:recyclerview-fastscroll:$versions.fastScroll", - colorPickerView : "com.github.skydoves:colorpickerview:$versions.colorPicker", - rxJava : "io.reactivex.rxjava3:rxjava:$versions.rxJava", - rxAndroid : "io.reactivex.rxjava3:rxandroid:$versions.rxAndroid", - multiType : "com.drakeet.multitype:multitype:$versions.multiType", -] - -ext.testing = [ - junit : "junit:junit:$versions.junit4", - junitVintage : "org.junit.vintage:junit-vintage-engine:$versions.junit5", - kotlinJunit : "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin", - mockitoKotlin : "org.mockito.kotlin:mockito-kotlin:$versions.mockitoKotlin", - mockito : "org.mockito:mockito-core:$versions.mockito", - mockitoInline : "org.mockito:mockito-inline:$versions.mockito", - kluent : "org.amshove.kluent:kluent:$versions.kluent", - kluentAndroid : "org.amshove.kluent:kluent-android:$versions.kluent", - mockWebServer : "com.squareup.okhttp3:mockwebserver:$versions.okhttp", - apacheCodecs : "commons-codec:commons-codec:$versions.apacheCodecs", - robolectric : "org.robolectric:robolectric:$versions.robolectric" -] +] \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..65d9e949 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,100 @@ +[versions] +# You need to run ./gradlew wrapper after updating the version +gradle = "7.3.2" + +navigation = "2.3.5" +gradlePlugin = "7.0.4" +androidxcore = "1.6.0" +ktlint = "0.43.2" +ktlintGradle = "10.2.0" +detekt = "1.19.0" +jacoco = "0.8.7" +preferences = "1.1.1" +media = "1.3.1" + +androidSupport = "28.0.0" +androidLegacySupport = "1.0.0" +androidSupportDesign = "1.4.0" +constraintLayout = "2.1.1" +multidex = "2.0.1" +room = "2.4.0" +kotlin = "1.6.10" +kotlinxCoroutines = "1.5.2-native-mt" +viewModelKtx = "2.3.0" + +retrofit = "2.6.4" +jackson = "2.9.5" +okhttp = "3.12.13" +koin = "3.0.2" +picasso = "2.71828" + +junit4 = "4.13.2" +junit5 = "5.8.1" +mockito = "4.1.0" +mockitoKotlin = "4.0.0" +kluent = "1.68" +apacheCodecs = "1.15" +robolectric = "4.6.1" +timber = "4.7.1" +fastScroll = "2.0.1" +colorPicker = "2.2.3" +rxJava = "3.1.2" +rxAndroid = "3.0.0" +multiType = "4.3.0" + +[libraries] +gradle = { module = "com.android.tools.build:gradle", version.ref = "gradlePlugin" } +kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +ktlintGradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlintGradle" } +detekt = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } +jacoco = { module = "org.jacoco:org.jacoco.core", version.ref = "jacoco" } + +core = { module = "androidx.core:core-ktx", version.ref = "androidxcore" } +support = { module = "androidx.legacy:legacy-support-v4", version.ref = "androidLegacySupport" } +design = { module = "com.google.android.material:material", version.ref = "androidSupportDesign" } +annotations = { module = "com.android.support:support-annotations", version.ref = "androidSupport" } +multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" } +constraintLayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintLayout" } +room = { module = "androidx.room:room-compiler", version.ref = "room" } +roomRuntime = { module = "androidx.room:room-runtime", version.ref = "room" } +roomKtx = { module = "androidx.room:room-ktx", version.ref = "room" } +viewModelKtx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "viewModelKtx" } +navigationFragment = { module = "androidx.navigation:navigation-fragment", version.ref = "navigation" } +navigationUi = { module = "androidx.navigation:navigation-ui", version.ref = "navigation" } +navigationFragmentKtx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigation" } +navigationUiKtx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigation" } +navigationFeature = { module = "androidx.navigation:navigation-dynamic-features-fragment", version.ref = "navigation" } +preferences = { module = "androidx.preference:preference", version.ref = "preferences" } +media = { module = "androidx.media:media", version.ref = "media" } + +kotlinStdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } +kotlinReflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } +kotlinxCoroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } +retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +gsonConverter = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } +jacksonConverter = { module = "com.squareup.retrofit2:converter-jackson", version.ref = "retrofit" } +jacksonKotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" } +okhttpLogging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } +koinCore = { module = "io.insert-koin:koin-core", version.ref = "koin" } +koinAndroid = { module = "io.insert-koin:koin-android", version.ref = "koin" } +koinViewModel = { module = "io.insert-koin:koin-android-viewmodel", version.ref = "koin" } +picasso = { module = "com.squareup.picasso:picasso", version.ref = "picasso" } +timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } +fastScroll = { module = "com.simplecityapps:recyclerview-fastscroll", version.ref = "fastScroll" } +colorPickerView = { module = "com.github.skydoves:colorpickerview", version.ref = "colorPicker" } +rxJava = { module = "io.reactivex.rxjava3:rxjava", version.ref = "rxJava" } +rxAndroid = { module = "io.reactivex.rxjava3:rxandroid", version.ref = "rxAndroid" } +multiType = { module = "com.drakeet.multitype:multitype", version.ref = "multiType" } + +junit = { module = "junit:junit", version.ref = "junit4" } +junitVintage = { module = "org.junit.vintage:junit-vintage-engine", version.ref = "junit5" } +kotlinJunit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } +mockitoKotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockitoKotlin" } +mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" } +mockitoInline = { module = "org.mockito:mockito-inline", version.ref = "mockito" } +kluent = { module = "org.amshove.kluent:kluent", version.ref = "kluent" } +kluentAndroid = { module = "org.amshove.kluent:kluent-android", version.ref = "kluent" } +mockWebServer = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" } +apacheCodecs = { module = "commons-codec:commons-codec", version.ref = "apacheCodecs" } +robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } + diff --git a/gradle_scripts/android-module-bootstrap.gradle b/gradle_scripts/android-module-bootstrap.gradle index 88519a56..6ed10271 100644 --- a/gradle_scripts/android-module-bootstrap.gradle +++ b/gradle_scripts/android-module-bootstrap.gradle @@ -53,14 +53,14 @@ tasks.withType(Test) { } dependencies { - api other.kotlinStdlib + api libs.kotlinStdlib - testImplementation testing.junit - testRuntimeOnly testing.junitVintage + testImplementation libs.junit + testRuntimeOnly libs.junitVintage } jacoco { - toolVersion(versions.jacoco) + toolVersion(libs.versions.jacoco.get()) } ext { diff --git a/gradle_scripts/code_quality.gradle b/gradle_scripts/code_quality.gradle index e6a23903..1b90102b 100644 --- a/gradle_scripts/code_quality.gradle +++ b/gradle_scripts/code_quality.gradle @@ -6,7 +6,7 @@ if (isCodeQualityEnabled) { apply plugin: "org.jlleitschuh.gradle.ktlint" ktlint { - version = versions.ktlint + version = libs.versions.ktlint.get() outputToConsole = true android = true } @@ -21,7 +21,7 @@ if (isCodeQualityEnabled) { detekt { buildUponDefaultConfig = true - toolVersion = versions.detekt + toolVersion = libs.versions.detekt.get() // Builds the AST in parallel. Rules are always executed in parallel. // Can lead to speedups in larger projects. parallel = true diff --git a/gradle_scripts/jacoco.gradle b/gradle_scripts/jacoco.gradle index b7f3cdc5..c8ba2c07 100644 --- a/gradle_scripts/jacoco.gradle +++ b/gradle_scripts/jacoco.gradle @@ -1,7 +1,7 @@ apply plugin: 'jacoco' jacoco { - toolVersion(versions.jacoco) + toolVersion(libs.versions.jacoco.get()) } def mergedJacocoExec = file("${project.buildDir}/jacoco/jacocoMerged.exec") diff --git a/gradle_scripts/kotlin-module-bootstrap.gradle b/gradle_scripts/kotlin-module-bootstrap.gradle index fc84bbd8..4a17c80f 100644 --- a/gradle_scripts/kotlin-module-bootstrap.gradle +++ b/gradle_scripts/kotlin-module-bootstrap.gradle @@ -15,14 +15,14 @@ sourceSets { dependencies { - api other.kotlinStdlib + api libs.kotlinStdlib - testImplementation testing.junit - testRuntimeOnly testing.junitVintage + testImplementation libs.junit + testRuntimeOnly libs.junitVintage } jacoco { - toolVersion(versions.jacoco) + toolVersion(libs.versions.jacoco.get()) } ext { diff --git a/settings.gradle b/settings.gradle index 8fdc7dca..272f548b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,5 @@ +enableFeaturePreview("VERSION_CATALOGS") + include ':core:domain' include ':core:subsonic-api' include ':ultrasonic' diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index ced150ab..754e308d 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -78,54 +78,54 @@ dependencies { implementation project(':core:domain') implementation project(':core:subsonic-api') - api(other.picasso) { + api(libs.picasso) { exclude group: "com.android.support" } - implementation androidSupport.core - implementation androidSupport.support - implementation androidSupport.design - implementation androidSupport.multidex - implementation androidSupport.roomRuntime - implementation androidSupport.roomKtx - implementation androidSupport.viewModelKtx - implementation androidSupport.constraintLayout - implementation androidSupport.preferences - implementation androidSupport.media + implementation libs.core + implementation libs.support + implementation libs.design + implementation libs.multidex + implementation libs.roomRuntime + implementation libs.roomKtx + implementation libs.viewModelKtx + implementation libs.constraintLayout + implementation libs.preferences + implementation libs.media - implementation androidSupport.navigationFragment - implementation androidSupport.navigationUi - implementation androidSupport.navigationFragmentKtx - implementation androidSupport.navigationUiKtx - implementation androidSupport.navigationFeature + implementation libs.navigationFragment + implementation libs.navigationUi + implementation libs.navigationFragmentKtx + implementation libs.navigationUiKtx + implementation libs.navigationFeature - implementation other.kotlinStdlib - implementation other.kotlinxCoroutines - implementation other.koinAndroid - implementation other.okhttpLogging - implementation other.fastScroll - implementation other.colorPickerView - implementation other.rxJava - implementation other.rxAndroid - implementation other.multiType + implementation libs.kotlinStdlib + implementation libs.kotlinxCoroutines + implementation libs.koinAndroid + implementation libs.okhttpLogging + implementation libs.fastScroll + implementation libs.colorPickerView + implementation libs.rxJava + implementation libs.rxAndroid + implementation libs.multiType - kapt androidSupport.room + kapt libs.room - testImplementation other.kotlinReflect - testImplementation testing.junit - testRuntimeOnly testing.junitVintage - testImplementation testing.kotlinJunit - testImplementation testing.kluent - testImplementation testing.mockito - testImplementation testing.mockitoInline - testImplementation testing.mockitoKotlin - testImplementation testing.robolectric + testImplementation libs.kotlinReflect + testImplementation libs.junit + testRuntimeOnly libs.junitVintage + testImplementation libs.kotlinJunit + testImplementation libs.kluent + testImplementation libs.mockito + testImplementation libs.mockitoInline + testImplementation libs.mockitoKotlin + testImplementation libs.robolectric - implementation other.timber + implementation libs.timber } jacoco { - toolVersion(versions.jacoco) + toolVersion(libs.versions.jacoco.get()) } // Excluding all java classes and stuff that should not be covered @@ -149,7 +149,7 @@ ext { } jacoco { - toolVersion(versions.jacoco) + toolVersion(libs.versions.jacoco.get()) } tasks.withType(Test) { diff --git a/ultrasonic/lint-baseline.xml b/ultrasonic/lint-baseline.xml index 600b459a..cd999750 100644 --- a/ultrasonic/lint-baseline.xml +++ b/ultrasonic/lint-baseline.xml @@ -1,19 +1,5 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -