diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-04 21:58:18 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-02-15 18:47:22 +0000 |
| commit | eeb01fc472e3f095b02b5a3d6480677a16882eea (patch) | |
| tree | b226e75961aee4cc47baaed6b1af339285008a67 /android/src/main | |
| parent | 750a5c981bfa7bdd1908ababc4cfe0a34a454324 (diff) | |
| download | mullvadvpn-eeb01fc472e3f095b02b5a3d6480677a16882eea.tar.xz mullvadvpn-eeb01fc472e3f095b02b5a3d6480677a16882eea.zip | |
Register for service events in `ServiceConnection`
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) + } + } } |
