Begin a background task when receiving a call in order to get state updates for longer.

This commit is contained in:
Stefan Ceriu
2024-11-06 13:00:11 +02:00
parent b9d05fe7f3
commit 10966ab620
3 changed files with 11 additions and 5 deletions
@@ -148,6 +148,8 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
switch action { switch action {
case .startCall(let roomID): case .startCall(let roomID):
self?.handleAppRoute(.call(roomID: roomID)) self?.handleAppRoute(.call(roomID: roomID))
case .receivedIncomingCallRequest:
self?.scheduleDelayedSyncStop()
default: default:
break break
} }
@@ -912,6 +914,11 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
private func applicationWillResignActive() { private func applicationWillResignActive() {
MXLog.info("Application will resign active") MXLog.info("Application will resign active")
scheduleDelayedSyncStop()
scheduleBackgroundAppRefresh()
}
private func scheduleDelayedSyncStop() {
guard backgroundTask == nil else { guard backgroundTask == nil else {
return return
} }
@@ -926,10 +933,6 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
self.backgroundTask = nil self.backgroundTask = nil
} }
} }
// This does seem to work if scheduled from the background task above
// Schedule it here instead but with an earliest being date of 30 seconds
scheduleBackgroundAppRefresh()
} }
@objc @objc
@@ -170,11 +170,13 @@ class ElementCallService: NSObject, ElementCallServiceProtocol, PKPushRegistryDe
// https://stackoverflow.com/a/41230020/730924 // https://stackoverflow.com/a/41230020/730924
update.remoteHandle = .init(type: .generic, value: roomID) update.remoteHandle = .init(type: .generic, value: roomID)
callProvider.reportNewIncomingCall(with: callID.callKitID, update: update) { error in callProvider.reportNewIncomingCall(with: callID.callKitID, update: update) { [weak self] error in
if let error { if let error {
MXLog.error("Failed reporting new incoming call with error: \(error)") MXLog.error("Failed reporting new incoming call with error: \(error)")
} }
self?.actionsSubject.send(.receivedIncomingCallRequest)
completion() completion()
} }
@@ -8,6 +8,7 @@
import Combine import Combine
enum ElementCallServiceAction { enum ElementCallServiceAction {
case receivedIncomingCallRequest
case startCall(roomID: String) case startCall(roomID: String)
case endCall(roomID: String) case endCall(roomID: String)
case setAudioEnabled(_ enabled: Bool, roomID: String) case setAudioEnabled(_ enabled: Bool, roomID: String)