summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-04-01 13:45:08 +0200
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-06 14:44:29 +0200
commitaceb301d9d8a4acae2b5369b567d545480d54918 (patch)
tree82c59cfba7954eb167eff8bbe4d2903038b8cbe1 /android
parent7c43876bb294aae4db136f25e8a868179f9d6765 (diff)
downloadmullvadvpn-aceb301d9d8a4acae2b5369b567d545480d54918.tar.xz
mullvadvpn-aceb301d9d8a4acae2b5369b567d545480d54918.zip
Init Koin as DI for android project
Diffstat (limited to 'android')
-rw-r--r--android/build.gradle15
-rw-r--r--android/src/main/AndroidManifest.xml1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt20
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt28
4 files changed, 63 insertions, 1 deletions
diff --git a/android/build.gradle b/android/build.gradle
index 0ad89540c9..1da910d6ea 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -72,11 +72,17 @@ android {
}
}
}
+
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+ kotlinOptions {
+ jvmTarget = '1.8'
+ freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" // Opt-in option for Koin annotation of KoinComponent.
+ }
+
applicationVariants.all { variant ->
variant.mergeAssetsProvider.configure {
dependsOn copyExtraAssets
@@ -126,17 +132,24 @@ dependencies {
implementation "commons-validator:commons-validator:1.7"
implementation "joda-time:joda-time:2.10.2"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
- implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3"
+ implementation "org.koin:koin-core:$koinVersion"
+ implementation "org.koin:koin-core-ext:$koinVersion"
+ implementation "org.koin:koin-androidx-fragment:$koinVersion"
+ implementation "org.koin:koin-androidx-scope:$koinVersion"
+ implementation "org.koin:koin-androidx-viewmodel:$koinVersion"
/* Test dependencies */
testImplementation "io.mockk:mockk:$mockkVersion"
testImplementation "junit:junit:4.13"
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.3"
+ testImplementation "org.koin:koin-test:$koinVersion"
}
buildscript {
ext {
+ koinVersion = '2.2.2'
kotlinVersion = '1.4.31'
mockkVersion = '1.10.6'
}
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 1190fb182c..98c0999fd4 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -22,6 +22,7 @@
android:extractNativeLibs="true"
android:allowBackup="false"
android:banner="@drawable/banner"
+ android:name=".MullvadApplication"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="net.mullvad.mullvadvpn.ui.MainActivity"
android:label="@string/app_name"
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt
new file mode 100644
index 0000000000..0c3a0d8640
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt
@@ -0,0 +1,20 @@
+package net.mullvad.mullvadvpn
+
+import android.app.Application
+import net.mullvad.mullvadvpn.di.appModule
+import org.koin.android.ext.koin.androidContext
+import org.koin.core.context.startKoin
+
+class MullvadApplication : Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+ // start Koin!
+ startKoin {
+ // declare used Android context
+ androidContext(this@MullvadApplication)
+ // declare modules
+ modules(appModule)
+ }
+ }
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
new file mode 100644
index 0000000000..a144ae6bc2
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
@@ -0,0 +1,28 @@
+package net.mullvad.mullvadvpn.di
+
+import android.content.pm.PackageManager
+import kotlinx.coroutines.Dispatchers
+import net.mullvad.mullvadvpn.applist.ApplicationsIconManager
+import net.mullvad.mullvadvpn.applist.ApplicationsProvider
+import net.mullvad.mullvadvpn.service.SplitTunneling
+import net.mullvad.mullvadvpn.viewmodel.SplitTunnelingViewModel
+import org.koin.android.ext.koin.androidContext
+import org.koin.androidx.viewmodel.dsl.viewModel
+import org.koin.core.qualifier.named
+import org.koin.dsl.module
+import org.koin.dsl.onClose
+
+val appModule = module {
+
+ single<SplitTunneling> { SplitTunneling(androidContext()) }
+ single<PackageManager> { androidContext().packageManager }
+ single<String> (named(SELF_PACKAGE_NAME)) { androidContext().packageName }
+
+ scope(named(APPS_SCOPE)) {
+ viewModel { SplitTunnelingViewModel(get(), get(), Dispatchers.Default) }
+ scoped { ApplicationsIconManager(get()) } onClose { it?.dispose() }
+ scoped { ApplicationsProvider(get(), get(named(SELF_PACKAGE_NAME))) }
+ }
+}
+const val APPS_SCOPE = "APPS_SCOPE"
+const val SELF_PACKAGE_NAME = "SELF_PACKAGE_NAME"