summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt25
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)
+ }
+ }
}