diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt index f912f765a8..a2a6a63f03 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt @@ -26,6 +26,7 @@ class ServiceConnectionManager( @Deprecated(message = "Use connectionState") val serviceNotifier = EventNotifier<ServiceConnectionContainer?>(null) + var isBound = false private var vpnPermissionRequestHandler: (() -> Unit)? = null private val serviceConnection = object : android.content.ServiceConnection { @@ -54,22 +55,32 @@ class ServiceConnectionManager( vpnPermissionRequestHandler: () -> Unit, apiEndpointConfiguration: ApiEndpointConfiguration? ) { - this.vpnPermissionRequestHandler = vpnPermissionRequestHandler - val intent = Intent(context, MullvadVpnService::class.java) + synchronized(this) { + if (isBound.not()) { + this.vpnPermissionRequestHandler = vpnPermissionRequestHandler + val intent = Intent(context, MullvadVpnService::class.java) - if (BuildConfig.DEBUG && apiEndpointConfiguration != null) { - intent.putApiEndpointConfigurationExtra(apiEndpointConfiguration) - } + if (BuildConfig.DEBUG && apiEndpointConfiguration != null) { + intent.putApiEndpointConfigurationExtra(apiEndpointConfiguration) + } - context.startService(intent) - context.bindService(intent, serviceConnection, 0) + context.startService(intent) + context.bindService(intent, serviceConnection, 0) + isBound = true + } + } } fun unbind() { - _connectionState.value.readyContainer()?.onDestroy() - context.unbindService(serviceConnection) - notify(ServiceConnectionState.Disconnected) - vpnPermissionRequestHandler = null + synchronized(this) { + if (isBound) { + _connectionState.value.readyContainer()?.onDestroy() + context.unbindService(serviceConnection) + notify(ServiceConnectionState.Disconnected) + vpnPermissionRequestHandler = null + isBound = false + } + } } fun onDestroy() { |
