commonMain.io.dyte.mobilecorebridge.listeners.RoomEventListener.kt Maven / Gradle / Ivy
package io.dyte.mobilecorebridge.listeners
import io.dyte.core.listeners.DyteMeetingRoomEventsListener
import io.dyte.core.models.ActiveTabType
import io.dyte.core.spotlight.ActiveTab
import io.dyte.mobilecorebridge.CallDetailsBuilder
import io.dyte.mobilecorebridge.DyteClient
import io.dyte.mobilecorebridge.DyteSink
import io.dyte.mobilecorebridge.DyteUtils
import io.dyte.mobilecorebridge.toMap
class RoomEventListener(private val dyteRoomSink: DyteSink, private val dyteClient: DyteClient) :
DyteMeetingRoomEventsListener {
private val callDetailsBuilder = CallDetailsBuilder()
private val dyteUtils = DyteUtils()
override fun onMeetingInitStarted() {
super.onMeetingInitStarted()
callDetailsBuilder.flush().addMethodName("onMeetingInitStarted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingInitCompleted() {
super.onMeetingInitCompleted()
callDetailsBuilder
.flush()
.addMethodName("onActiveTabUpdate")
.addArguments(hashMapOf("activeTab" to dyteClient.getSelfActiveTab()))
dyteRoomSink.success(callDetailsBuilder.build())
callDetailsBuilder.flush().addMethodName("onMeetingInitCompleted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomDisconnected() {
super.onMeetingRoomDisconnected()
callDetailsBuilder.flush().addMethodName("onMeetingRoomDisconnected")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomJoinCompleted() {
super.onMeetingRoomJoinCompleted()
dyteUtils.enableWakelock()
callDetailsBuilder.flush().addMethodName("onMeetingRoomJoinCompleted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomJoinFailed(exception: Exception) {
super.onMeetingRoomJoinFailed(exception)
callDetailsBuilder
.flush()
.addMethodName("onMeetingRoomJoinFailed")
.addArguments(hashMapOf("exception" to exception.message))
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomJoinStarted() {
super.onMeetingRoomJoinStarted()
callDetailsBuilder.flush().addMethodName("onMeetingRoomJoinStarted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomLeaveCompleted() {
super.onMeetingRoomLeaveCompleted()
dyteUtils.disableWakelock()
callDetailsBuilder.flush().addMethodName("onMeetingRoomLeaveCompleted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomLeaveStarted() {
super.onMeetingRoomLeaveStarted()
callDetailsBuilder.flush().addMethodName("onMeetingRoomLeaveStarted")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingInitFailed(exception: Exception) {
super.onMeetingInitFailed(exception)
callDetailsBuilder
.flush()
.addMethodName("onMeetingInitFailed")
.addArguments(hashMapOf("exception" to exception.message))
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onReconnectingToMeetingRoom() {
super.onReconnectingToMeetingRoom()
callDetailsBuilder.flush().addMethodName("onReconnectingToMeetingRoom")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onActiveTabUpdate(activeTab: ActiveTab) {
super.onActiveTabUpdate(activeTab)
callDetailsBuilder
.flush()
.addMethodName("onActiveTabUpdate")
.addArguments(hashMapOf("activeTab" to activeTab.toMap()))
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingEnded() {
super.onMeetingEnded()
callDetailsBuilder.flush().addMethodName("onMeetingEnded")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onReconnectedToMeetingRoom() {
super.onReconnectedToMeetingRoom()
callDetailsBuilder.flush().addMethodName("onReconnectedToMeetingRoom")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomReconnectionFailed() {
super.onMeetingRoomReconnectionFailed()
callDetailsBuilder.flush().addMethodName("onMeetingRoomReconnectionFailed")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onConnectedToMeetingRoom() {
super.onConnectedToMeetingRoom()
callDetailsBuilder.flush().addMethodName("onConnectedToMeetingRoom")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onConnectingToMeetingRoom() {
super.onConnectingToMeetingRoom()
callDetailsBuilder.flush().addMethodName("onConnectingToMeetingRoom")
dyteRoomSink.success(callDetailsBuilder.build())
}
@Deprecated("Please use DyteMeetingRoomEventsListener.onActiveTabUpdate(activeTab: ActiveTab)")
override fun onActiveTabUpdate(id: String, tabType: ActiveTabType) {
super.onActiveTabUpdate(id, tabType)
// Not listening to this callback on flutter end, since it's
// deprecated in the first version itself when this feature
// will be released in Flutter Core. Will listen to new callback
/*
* [onActiveTabUpdate(tabType: ActiveTabType)]
*/
// callDetailsBuilder
// .flush()
// .addMethodName("onActiveTabUpdateOld")
// .addArguments(hashMapOf("id" to id, "tabType" to tabType.name.lowercase()))
//
// dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onDisconnectedFromMeetingRoom() {
super.onDisconnectedFromMeetingRoom()
callDetailsBuilder.flush().addMethodName("onDisconnectedFromMeetingRoom")
dyteRoomSink.success(callDetailsBuilder.build())
}
override fun onMeetingRoomConnectionFailed() {
super.onMeetingRoomConnectionFailed()
callDetailsBuilder.flush().addMethodName("onMeetingRoomConnectionFailed")
dyteRoomSink.success(callDetailsBuilder.build())
}
}