From 6b6fb03dcefa61f37145990ca573e51be07f846c Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 5 Jul 2021 15:43:54 +0200 Subject: [PATCH] Jitsi call : create JitsiBroadcastEventObserver --- .../conference/JitsiBroadcastEventObserver.kt | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 vector/src/main/java/im/vector/app/features/call/conference/JitsiBroadcastEventObserver.kt diff --git a/vector/src/main/java/im/vector/app/features/call/conference/JitsiBroadcastEventObserver.kt b/vector/src/main/java/im/vector/app/features/call/conference/JitsiBroadcastEventObserver.kt new file mode 100644 index 0000000000..57f89c557e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/call/conference/JitsiBroadcastEventObserver.kt @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.call.conference + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent +import androidx.localbroadcastmanager.content.LocalBroadcastManager +import org.jitsi.meet.sdk.BroadcastEvent +import org.matrix.android.sdk.api.extensions.tryOrNull + +fun BroadcastEvent.extractConferenceUrl(): String? { + return when (type) { + BroadcastEvent.Type.CONFERENCE_TERMINATED, + BroadcastEvent.Type.CONFERENCE_WILL_JOIN, + BroadcastEvent.Type.CONFERENCE_JOINED -> data["url"] as? String + else -> null + } +} + +class JitsiBroadcastEventObserver(private val context: Context, + private val onBroadcastEvent: (BroadcastEvent) -> Unit) : LifecycleObserver { + + // See https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-android-sdk#listening-for-broadcasted-events + private val broadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + intent?.let { onBroadcastReceived(it) } + } + } + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + fun unregisterForBroadcastMessages() { + tryOrNull("Unable to unregister receiver") { + LocalBroadcastManager.getInstance(context).unregisterReceiver(broadcastReceiver) + } + } + + @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) + fun registerForBroadcastMessages() { + val intentFilter = IntentFilter() + for (type in BroadcastEvent.Type.values()) { + intentFilter.addAction(type.action) + } + tryOrNull("Unable to register receiver") { + LocalBroadcastManager.getInstance(context).registerReceiver(broadcastReceiver, intentFilter) + } + } + + private fun onBroadcastReceived(intent: Intent) { + val event = BroadcastEvent(intent) + onBroadcastEvent(event) + } +}