mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Live Location Sharing Banner (#5370)
* Live Location Sharing Banner # Conflicts: # ElementX.xcodeproj/project.pbxproj * updated the top banner modifier and the top banner views # Conflicts: # ElementX/Resources/Localizations/en-US.lproj/Localizable.strings # ElementX/Resources/Localizations/en.lproj/Localizable.strings * improved the stopping function from the timeline item * stop live location sharing before starting a new one. * added some tests for LiveLocationManager * pr suggestions
This commit is contained in:
@@ -60,6 +60,12 @@ class LiveLocationManager: NSObject, LiveLocationManagerProtocol, CLLocationMana
|
||||
}
|
||||
|
||||
func startLiveLocation(roomID: String, duration: Duration) async -> Result<Void, LiveLocationManagerError> {
|
||||
// Stop any existing session for this room first (e.g. one started from a different device)
|
||||
// before starting a new one.
|
||||
if appSettings.liveLocationSharingTimeoutDatesByRoomID[roomID] != nil {
|
||||
await stopLiveLocation(roomID: roomID)
|
||||
}
|
||||
|
||||
guard case .joined(let roomProxy) = await clientProxy.roomForIdentifier(roomID) else {
|
||||
MXLog.error("Failed to resolve joined room for identifier: \(roomID)")
|
||||
return .failure(.roomNotJoined)
|
||||
@@ -79,17 +85,23 @@ class LiveLocationManager: NSObject, LiveLocationManagerProtocol, CLLocationMana
|
||||
}
|
||||
|
||||
func stopLiveLocation(roomID: String) async {
|
||||
// Best effort: send the stop event to the room regardless of tracking state.
|
||||
if let roomProxy = await resolveRoomProxy(for: roomID) {
|
||||
var roomProxy: JoinedRoomProxyProtocol?
|
||||
let cachedRoomProxy = activeRoomProxies[roomID]
|
||||
appSettings.liveLocationSharingTimeoutDatesByRoomID.removeValue(forKey: roomID)
|
||||
|
||||
if let cachedRoomProxy {
|
||||
roomProxy = cachedRoomProxy
|
||||
// Best effort: send the stop event to the room regardless of tracking state.
|
||||
} else if case let .joined(fetchedRoomProxy) = await clientProxy.roomForIdentifier(roomID) {
|
||||
roomProxy = fetchedRoomProxy
|
||||
}
|
||||
|
||||
if let roomProxy {
|
||||
let result = await roomProxy.stopLiveLocationShare()
|
||||
if case .failure(let error) = result {
|
||||
MXLog.error("Failed to stop live location share in room \(roomID): \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
// Always clean up locally.
|
||||
appSettings.liveLocationSharingTimeoutDatesByRoomID.removeValue(forKey: roomID)
|
||||
activeRoomProxies.removeValue(forKey: roomID)
|
||||
}
|
||||
|
||||
// MARK: - CLLocationManagerDelegate
|
||||
|
||||
Reference in New Issue
Block a user