summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
Diffstat (limited to 'android')
-rw-r--r--android/buildSrc/src/main/kotlin/Dependencies.kt3
-rw-r--r--android/buildSrc/src/main/kotlin/Versions.kt1
-rw-r--r--android/gradle.properties1
-rw-r--r--android/gradle/verification-metadata.xml38
-rw-r--r--android/settings.gradle.kts16
-rw-r--r--android/test/arch/build.gradle.kts42
-rw-r--r--android/test/arch/src/test/AndroidManifest.xml1
-rw-r--r--android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/ViewModelTests.kt16
8 files changed, 112 insertions, 6 deletions
diff --git a/android/buildSrc/src/main/kotlin/Dependencies.kt b/android/buildSrc/src/main/kotlin/Dependencies.kt
index 2aa2db27d6..80c3313683 100644
--- a/android/buildSrc/src/main/kotlin/Dependencies.kt
+++ b/android/buildSrc/src/main/kotlin/Dependencies.kt
@@ -4,9 +4,10 @@ object Dependencies {
const val commonsValidator = "commons-validator:commons-validator:${Versions.commonsValidator}"
const val jodaTime = "joda-time:joda-time:${Versions.jodaTime}"
const val junit = "junit:junit:${Versions.junit}"
+ const val konsist = "com.lemonappdev:konsist:${Versions.konsist}"
const val leakCanary = "com.squareup.leakcanary:leakcanary-android:${Versions.leakCanary}"
- const val turbine = "app.cash.turbine:turbine:${Versions.turbine}"
const val mockkWebserver = "com.squareup.okhttp3:mockwebserver:${Versions.mockWebserver}"
+ const val turbine = "app.cash.turbine:turbine:${Versions.turbine}"
object AndroidX {
const val appcompat = "androidx.appcompat:appcompat:${Versions.AndroidX.appcompat}"
diff --git a/android/buildSrc/src/main/kotlin/Versions.kt b/android/buildSrc/src/main/kotlin/Versions.kt
index d10c7e252b..553c952748 100644
--- a/android/buildSrc/src/main/kotlin/Versions.kt
+++ b/android/buildSrc/src/main/kotlin/Versions.kt
@@ -3,6 +3,7 @@ object Versions {
const val jodaTime = "2.12.5"
const val junit = "4.13.2"
const val jvmTarget = "17"
+ const val konsist = "0.11.0"
const val kotlin = "1.9.10"
const val kotlinCompilerExtensionVersion = "1.5.3"
const val kotlinx = "1.7.3"
diff --git a/android/gradle.properties b/android/gradle.properties
index 3f3bea5a66..4233d36b82 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,4 +1,3 @@
-android.enableJetifier=true
android.enableR8.fullMode=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
diff --git a/android/gradle/verification-metadata.xml b/android/gradle/verification-metadata.xml
index 98f3a9dd94..6aca8d73fa 100644
--- a/android/gradle/verification-metadata.xml
+++ b/android/gradle/verification-metadata.xml
@@ -2222,6 +2222,14 @@
<sha256 value="b29c1c21e52ed6238cd3fed39d880a17ecf2360118604548cea8821be6801e1c" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="com.lemonappdev" name="konsist" version="0.11.0">
+ <artifact name="konsist-0.11.0.jar">
+ <sha256 value="6b60badd6cf1d49a7b76fee18fe7265bd96d98fd4b9fe065470a5fdf8dacc7bd" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="konsist-0.11.0.module">
+ <sha256 value="243b6b46fbacea79349ea05e5dba20d6ee72103361e74c8d5102270fc956b986" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="com.linkedin.dexmaker" name="dexmaker" version="2.28.1">
<artifact name="dexmaker-2.28.1.jar">
<sha256 value="824a109b2352138c3699760e1683385d0ed50ce526fc7982f8d65757743374bf" origin="Generated by Gradle"/>
@@ -3178,6 +3186,11 @@
<sha256 value="2c28fa5d7c47e01c4eace2276e05e8d119a9f0b26cce98720781df36b792c821" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlin" name="kotlin-compiler" version="1.9.10">
+ <artifact name="kotlin-compiler-1.9.10.jar">
+ <sha256 value="a2718d75fb90075fb401d924013453ea97859aec6e189ebb9e6c83c630efe7f7" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlin" name="kotlin-compiler-embeddable" version="1.8.20">
<artifact name="kotlin-compiler-embeddable-1.8.20.jar">
<sha256 value="5655386be55d45a78d887372bbd59d03e06750f7756108d14139e8d7e4b2e179" origin="Generated by Gradle"/>
@@ -3451,6 +3464,11 @@
<sha256 value="f78c5d8c09db985912ab83a1de3c3b53ddf208d7b151f06a72358ea3e137d01b" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.10">
+ <artifact name="kotlin-stdlib-1.7.10.jar">
+ <sha256 value="e771fe74250a943e8f6346713201ff1d8cb95c3a5d1a91a22b65a9e04f6a8901" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.8.20">
<artifact name="kotlin-stdlib-1.8.20.jar">
<sha256 value="4395647b1961d9fb730a34e8dbe56c293157bc0759004cca63d9b5ee6653e5c7" origin="Generated by Gradle"/>
@@ -3476,6 +3494,11 @@
<sha256 value="812cf197d9c4c67e1f47f95e2d72a9b600f0d1124560617bfe9850773eccbcff" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.10">
+ <artifact name="kotlin-stdlib-common-1.7.10.jar">
+ <sha256 value="19f102efe9629f8eabc63853ad15c533e47c47f91fca09285c5bde86e59f91d4" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.8.20">
<artifact name="kotlin-stdlib-common-1.8.20.jar">
<sha256 value="fa20188abaa8ecf1d0035e93a969b071f10e45a1c8378c314521eade73f75fd5" origin="Generated by Gradle"/>
@@ -3491,6 +3514,11 @@
<sha256 value="cde3341ba18a2ba262b0b7cf6c55b20c90e8d434e42c9a13e6a3f770db965a88" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.6.0">
+ <artifact name="kotlin-stdlib-jdk7-1.6.0.jar">
+ <sha256 value="870d35fd266b2daf64c1080fe51824d3c368f7995384a8d7c5fc2fdc40eb7b3a" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.6.21">
<artifact name="kotlin-stdlib-jdk7-1.6.21.jar">
<sha256 value="f1b0634dbb94172038463020bb2dd45ca26849f8ce29d625acb0f1569d11dbee" origin="Generated by Gradle"/>
@@ -3516,6 +3544,11 @@
<sha256 value="ac6361bf9ad1ed382c2103d9712c47cdec166232b4903ed596e8876b0681c9b7" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.6.0">
+ <artifact name="kotlin-stdlib-jdk8-1.6.0.jar">
+ <sha256 value="ab0547c495953214a5f2b28150014f4e02133678d52b77d76375ea235e443dbd" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.6.21">
<artifact name="kotlin-stdlib-jdk8-1.6.21.jar">
<sha256 value="dab45489b47736d59fce44b80676f1947a9b6bcab10fd60e878a83bd82a6954c" origin="Generated by Gradle"/>
@@ -3671,6 +3704,11 @@
<sha256 value="48dfd8139edee5481bcc8b25e24d7586aca615f0d1ed2beb242dc7478ed4cee0" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.5.0">
+ <artifact name="kotlinx-coroutines-core-1.5.0.module">
+ <sha256 value="d8a26a896da32fb1f8c3f13fe41cb798a612a1c1ddf3a555d82ee1ff16ef13d3" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.6.1">
<artifact name="kotlinx-coroutines-core-1.6.1.module">
<sha256 value="79fe6569a9fffb409e51c64d5f8c54d27c4aa3735886155899d28ed2c9dfbc48" origin="Generated by Gradle"/>
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
index 5df9c08f1e..e47f3c08f9 100644
--- a/android/settings.gradle.kts
+++ b/android/settings.gradle.kts
@@ -1,5 +1,8 @@
-include(":app", ":service", ":tile")
-
+include(
+ ":app",
+ ":service",
+ ":tile"
+)
include(
":lib:common",
":lib:endpoint",
@@ -10,5 +13,10 @@ include(
":lib:theme",
":lib:common-test"
)
-
-include(":test", ":test:common", ":test:e2e", ":test:mockapi")
+include(
+ ":test",
+ ":test:arch",
+ ":test:common",
+ ":test:e2e",
+ ":test:mockapi"
+)
diff --git a/android/test/arch/build.gradle.kts b/android/test/arch/build.gradle.kts
new file mode 100644
index 0000000000..0a28fd2fab
--- /dev/null
+++ b/android/test/arch/build.gradle.kts
@@ -0,0 +1,42 @@
+plugins {
+ id(Dependencies.Plugin.androidLibraryId)
+ id(Dependencies.Plugin.kotlinAndroidId)
+}
+
+android {
+ namespace = "net.mullvad.mullvadvpn.test.arch"
+ compileSdk = Versions.Android.compileSdkVersion
+
+ defaultConfig {
+ minSdk = Versions.Android.minSdkVersion
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ kotlinOptions {
+ jvmTarget = Versions.jvmTarget
+ }
+
+ lint {
+ lintConfig = file("${rootProject.projectDir}/config/lint.xml")
+ abortOnError = true
+ warningsAsErrors = true
+ }
+}
+
+androidComponents {
+ beforeVariants { variantBuilder ->
+ variantBuilder.apply {
+ enable = name != "release"
+ }
+ }
+}
+
+dependencies {
+ testImplementation(Dependencies.AndroidX.appcompat)
+ testImplementation(Dependencies.junit)
+ testImplementation(Dependencies.konsist)
+}
diff --git a/android/test/arch/src/test/AndroidManifest.xml b/android/test/arch/src/test/AndroidManifest.xml
new file mode 100644
index 0000000000..cc947c5679
--- /dev/null
+++ b/android/test/arch/src/test/AndroidManifest.xml
@@ -0,0 +1 @@
+<manifest />
diff --git a/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/ViewModelTests.kt b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/ViewModelTests.kt
new file mode 100644
index 0000000000..35ffe52c31
--- /dev/null
+++ b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/ViewModelTests.kt
@@ -0,0 +1,16 @@
+package net.mullvad.mullvadvpn.test.arch
+
+import androidx.lifecycle.ViewModel
+import com.lemonappdev.konsist.api.Konsist
+import com.lemonappdev.konsist.api.ext.list.withAllParentsOf
+import com.lemonappdev.konsist.api.verify.assert
+import org.junit.Test
+
+class ViewModelTests {
+ @Test
+ fun ensureViewModelsHaveViewModelSuffix() {
+ Konsist.scopeFromProject().classes().withAllParentsOf(ViewModel::class).assert {
+ it.name.endsWith("ViewModel")
+ }
+ }
+}