diff options
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Event.kt | 20 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt | 15 |
2 files changed, 34 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Event.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Event.kt new file mode 100644 index 0000000000..fa6aa22081 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Event.kt @@ -0,0 +1,20 @@ +package net.mullvad.mullvadvpn.ipc + +import android.os.Message as RawMessage +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +// Events that can be sent from the service +sealed class Event : Message(), Parcelable { + protected override val messageId = 1 + protected override val messageKey = MESSAGE_KEY + + @Parcelize + object ListenerReady : Event(), Parcelable + + companion object { + private const val MESSAGE_KEY = "event" + + fun fromMessage(message: RawMessage): Event? = Message.fromMessage(message, MESSAGE_KEY) + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt index 5fe38c9539..239e701ae3 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt @@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.service.endpoint import android.os.Looper import android.os.Messenger import net.mullvad.mullvadvpn.ipc.DispatchingHandler +import net.mullvad.mullvadvpn.ipc.Event import net.mullvad.mullvadvpn.ipc.Request class ServiceEndpoint(looper: Looper) { @@ -16,11 +17,23 @@ class ServiceEndpoint(looper: Looper) { init { dispatcher.registerHandler(Request.RegisterListener::class) { request -> - listeners.add(request.listener) + registerListener(request.listener) } } fun onDestroy() { dispatcher.onDestroy() } + + private fun registerListener(listener: Messenger) { + synchronized(this) { + listeners.add(listener) + + val initialEvents = listOf(Event.ListenerReady) + + initialEvents.forEach { event -> + listener.send(event.message) + } + } + } } |
