diff options
| author | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-01 13:45:08 +0200 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-06 14:44:29 +0200 |
| commit | aceb301d9d8a4acae2b5369b567d545480d54918 (patch) | |
| tree | 82c59cfba7954eb167eff8bbe4d2903038b8cbe1 | |
| parent | 7c43876bb294aae4db136f25e8a868179f9d6765 (diff) | |
| download | mullvadvpn-aceb301d9d8a4acae2b5369b567d545480d54918.tar.xz mullvadvpn-aceb301d9d8a4acae2b5369b567d545480d54918.zip | |
Init Koin as DI for android project
| -rw-r--r-- | android/build.gradle | 15 | ||||
| -rw-r--r-- | android/src/main/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadApplication.kt | 20 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt | 28 |
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" |
