diff options
| author | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-13 19:50:57 +0200 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-15 16:00:36 +0200 |
| commit | c1e23b6760ec328068f38904bd9d82ab75a94d26 (patch) | |
| tree | 40529640fc19561daad3c3a95325c70aa347fcee /android/src | |
| parent | 87bdd6dcf7545a4c31d0b34de2f21f1c3310447c (diff) | |
| download | mullvadvpn-c1e23b6760ec328068f38904bd9d82ab75a94d26.tar.xz mullvadvpn-c1e23b6760ec328068f38904bd9d82ab75a94d26.zip | |
Fix koin dependencies.
Diffstat (limited to 'android/src')
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) |
