                                                name: .RoomGroupCallTileTapped,
                                                object: nil)
         
-        isStarted = true
+        #if canImport(JitsiMeetSDK)
+        JMCallKitProxy.addListener(self)
+        
+        guard let session = sessions.first else {
+            return
+        }
+        
+        widgetEventsListener = session.listenToEvents([
+            MXEventType(identifier: kWidgetMatrixEventTypeString),
+            MXEventType(identifier: kWidgetModularEventTypeString)
+        ]) { (event, direction, _) in
+            if direction == .backwards {
+                //  ignore backwards events
+                return
+            }
+            
+            self.processWidgetEvent(event, inSession: session)
+        }
+        #endif
     }
     
     private func removeCallObservers() {
         guard isStarted else {
             return
+        }
+        
+        defer {
+            isStarted = false
         }
         
         NotificationCenter.default.removeObserver(self,

import Foundation
import MatrixKit

@objcMembers
/// Service to manage call screens and call bar UI management.
class CallPresenter: NSObject {
    
    private enum Constants {
        static let pipAnimationDuration: TimeInterval = 0.25
    }
    
    private var sessions: [MXSession] = []

                                                  name: .RoomGroupCallTileTapped,
                                                  object: nil)
        
        #if canImport(JitsiMeetSDK)
        JMCallKitProxy.removeListener(self)
        
        guard let session = sessions.first else {
            return
        }
        
        if let widgetEventsListener = widgetEventsListener {
            session.removeListener(widgetEventsListener)
        }
        widgetEventsListener = nil
        #endif
    }
    
    @objc
