diff options
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt | 25 |
2 files changed, 26 insertions, 0 deletions
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 1b68710ece..44ff483ba5 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt @@ -72,6 +72,7 @@ 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) + serviceConnection?.onDestroy() service = null serviceConnection = null serviceNotifier.notify(null) 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 eeff404531..d9071ca2b9 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 @@ -1,7 +1,14 @@ package net.mullvad.mullvadvpn.ui.serviceconnection +import android.os.Looper +import android.os.Messenger +import android.os.RemoteException +import android.util.Log import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache import net.mullvad.mullvadvpn.dataproxy.RelayListListener +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 @@ -10,6 +17,10 @@ import net.mullvad.mullvadvpn.ui.MainActivity // The properties of this class can be used to send events to the service, to listen for events from // the service and to get values received from events. class ServiceConnection(private val service: ServiceInstance, val mainActivity: MainActivity) { + val dispatcher = DispatchingHandler(Looper.getMainLooper()) { message -> + Event.fromMessage(message) + } + val daemon = service.daemon val accountCache = service.accountCache val connectionProxy = service.connectionProxy @@ -25,11 +36,25 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity: init { appVersionInfoCache.onCreate() connectionProxy.mainActivity = mainActivity + registerListener() } fun onDestroy() { + dispatcher.onDestroy() + appVersionInfoCache.onDestroy() relayListListener.onDestroy() connectionProxy.mainActivity = null } + + private fun registerListener() { + val listener = Messenger(dispatcher) + val request = Request.RegisterListener(listener) + + try { + service.messenger.send(request.message) + } catch (exception: RemoteException) { + Log.e("mullvad", "Failed to register listener for service events", exception) + } + } } |
