summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-04-13 19:50:57 +0200
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-15 16:00:36 +0200
commitc1e23b6760ec328068f38904bd9d82ab75a94d26 (patch)
tree40529640fc19561daad3c3a95325c70aa347fcee /android/src
parent87bdd6dcf7545a4c31d0b34de2f21f1c3310447c (diff)
downloadmullvadvpn-c1e23b6760ec328068f38904bd9d82ab75a94d26.tar.xz
mullvadvpn-c1e23b6760ec328068f38904bd9d82ab75a94d26.zip
Fix koin dependencies.
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt17
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt14
-rw-r--r--android/src/test/kotlin/net/mullvad/mullvadvpn/di/AppModuleTest.kt6
5 files changed, 27 insertions, 28 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
index 87aabc6d32..975aefeee7 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
@@ -7,9 +7,6 @@ import net.mullvad.mullvadvpn.applist.ApplicationsIconManager
import net.mullvad.mullvadvpn.applist.ApplicationsProvider
import net.mullvad.mullvadvpn.ipc.Event
import net.mullvad.mullvadvpn.ipc.MessageDispatcher
-import net.mullvad.mullvadvpn.service.ServiceInstance
-import net.mullvad.mullvadvpn.ui.MainActivity
-import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnection
import net.mullvad.mullvadvpn.ui.serviceconnection.SplitTunneling
import net.mullvad.mullvadvpn.viewmodel.SplitTunnelingViewModel
import org.koin.android.ext.koin.androidContext
@@ -29,14 +26,12 @@ val appModule = module {
scoped { ApplicationsProvider(get(), get(named(SELF_PACKAGE_NAME))) }
}
- scope<ServiceConnection> {
- scoped<ServiceConnection> { (service: ServiceInstance, mainActivity: MainActivity) ->
- ServiceConnection(service, mainActivity)
- } onClose { it?.onDestroy() }
+ scope(named(SERVICE_CONNECTION_SCOPE)) {
scoped<SplitTunneling> { (messenger: Messenger, dispatcher: MessageDispatcher<Event>) ->
SplitTunneling(messenger, dispatcher)
}
}
}
const val APPS_SCOPE = "APPS_SCOPE"
+const val SERVICE_CONNECTION_SCOPE = "SERVICE_CONNECTION_SCOPE"
const val SELF_PACKAGE_NAME = "SELF_PACKAGE_NAME"
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 570475eb34..43f46a7101 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -20,13 +20,10 @@ import net.mullvad.mullvadvpn.ipc.Event
import net.mullvad.mullvadvpn.service.MullvadVpnService
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnection
import net.mullvad.talpid.util.EventNotifier
-import org.koin.android.ext.android.getKoin
-import org.koin.core.parameter.parametersOf
-import org.koin.core.scope.Scope
open class MainActivity : FragmentActivity() {
companion object {
- val KEY_SHOULD_CONNECT = "should_connect"
+ const val KEY_SHOULD_CONNECT = "should_connect"
}
val problemReport = MullvadProblemReport()
@@ -44,7 +41,6 @@ open class MainActivity : FragmentActivity() {
uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
}
- private var serviceConnectionScope: Scope? = null
private val serviceConnectionManager = object : android.content.ServiceConnection {
override fun onServiceConnected(className: ComponentName, binder: IBinder) {
android.util.Log.d("mullvad", "UI successfully connected to the service")
@@ -56,13 +52,10 @@ open class MainActivity : FragmentActivity() {
localBinder.serviceNotifier.subscribe(this@MainActivity) { service ->
android.util.Log.d("mullvad", "UI connection to the service changed: $service")
- serviceConnectionScope?.close()
+ serviceConnection?.onDestroy()
val newConnection = service?.let { safeService ->
- serviceConnectionScope = getKoin().createScope<ServiceConnection>()
- serviceConnectionScope?.get<ServiceConnection>(
- parameters = { parametersOf(safeService, this@MainActivity) }
- )
+ ServiceConnection(safeService, this@MainActivity)
}
serviceConnection = newConnection
@@ -84,7 +77,7 @@ open class MainActivity : FragmentActivity() {
override fun onServiceDisconnected(className: ComponentName) {
android.util.Log.d("mullvad", "UI lost the connection to the service")
service?.serviceNotifier?.unsubscribe(this@MainActivity)
- serviceConnectionScope?.close()
+ serviceConnection?.onDestroy()
service = null
serviceConnection = null
serviceNotifier.notify(null)
@@ -158,7 +151,7 @@ open class MainActivity : FragmentActivity() {
override fun onDestroy() {
serviceNotifier.unsubscribeAll()
- serviceConnectionScope?.close()
+ serviceConnection?.onDestroy()
super.onDestroy()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
index fbb09689ca..946e876615 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
@@ -17,7 +17,8 @@ import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnection
import net.mullvad.mullvadvpn.ui.serviceconnection.SettingsListener
import net.mullvad.mullvadvpn.ui.serviceconnection.SplitTunneling
-abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceAwareFragment() {
+abstract class ServiceDependentFragment(private val onNoService: OnNoService) :
+ ServiceAwareFragment() {
enum class OnNoService {
GoBack, GoToLaunchScreen
}
@@ -109,12 +110,12 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
savedInstanceState: Bundle?
): View {
synchronized(this) {
- when (state) {
+ return when (state) {
State.Initialized, State.Active, State.Stopped -> {
- return onSafelyCreateView(inflater, container, savedInstanceState)
+ onSafelyCreateView(inflater, container, savedInstanceState)
}
State.Uninitialized, State.LostConnection, State.WaitingForReconnection -> {
- return inflater.inflate(R.layout.missing_service, container, false)
+ inflater.inflate(R.layout.missing_service, container, false)
}
}
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt
index e3b02a3bb8..200853cd38 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt
@@ -6,15 +6,17 @@ import android.os.RemoteException
import android.util.Log
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import net.mullvad.mullvadvpn.dataproxy.RelayListListener
+import net.mullvad.mullvadvpn.di.SERVICE_CONNECTION_SCOPE
import net.mullvad.mullvadvpn.ipc.DispatchingHandler
import net.mullvad.mullvadvpn.ipc.Event
import net.mullvad.mullvadvpn.ipc.Request
import net.mullvad.mullvadvpn.service.ServiceInstance
import net.mullvad.mullvadvpn.ui.MainActivity
import org.koin.core.component.KoinApiExtension
-import org.koin.core.component.KoinComponent
-import org.koin.core.component.get
import org.koin.core.parameter.parametersOf
+import org.koin.core.qualifier.named
+import org.koin.core.scope.KoinScopeComponent
+import org.koin.core.scope.get
// Container of classes that communicate with the service through an active connection
//
@@ -22,7 +24,12 @@ import org.koin.core.parameter.parametersOf
// the service and to get values received from events.
@OptIn(KoinApiExtension::class)
class ServiceConnection(private val service: ServiceInstance, mainActivity: MainActivity) :
- KoinComponent {
+ KoinScopeComponent {
+ override val scope = getKoin().createScope(
+ SERVICE_CONNECTION_SCOPE,
+ named(SERVICE_CONNECTION_SCOPE), this
+ )
+
val dispatcher = DispatchingHandler(Looper.getMainLooper()) { message ->
Event.fromMessage(message)
}
@@ -48,6 +55,7 @@ class ServiceConnection(private val service: ServiceInstance, mainActivity: Main
}
fun onDestroy() {
+ closeScope()
dispatcher.onDestroy()
accountCache.onDestroy()
diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/di/AppModuleTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/di/AppModuleTest.kt
index 6984b064c1..c30a63fedf 100644
--- a/android/src/test/kotlin/net/mullvad/mullvadvpn/di/AppModuleTest.kt
+++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/di/AppModuleTest.kt
@@ -6,7 +6,6 @@ import io.mockk.unmockkAll
import kotlin.test.assertEquals
import net.mullvad.mullvadvpn.ipc.Event
import net.mullvad.mullvadvpn.ipc.MessageDispatcher
-import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnection
import net.mullvad.mullvadvpn.ui.serviceconnection.SplitTunneling
import org.junit.After
import org.junit.Rule
@@ -32,7 +31,10 @@ class AppModuleTest : KoinTest {
@Test
fun test_scope_linking() {
val appsScope: Scope = getKoin().createScope(APPS_SCOPE, named(APPS_SCOPE))
- val serviceConnectionScope = getKoin().createScope<ServiceConnection>()
+ val serviceConnectionScope = getKoin().createScope(
+ SERVICE_CONNECTION_SCOPE,
+ named(SERVICE_CONNECTION_SCOPE)
+ )
appsScope.linkTo(serviceConnectionScope)