summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
Diffstat (limited to 'android')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionManager.kt33
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() {