mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Refactor and redesign Location Sharing Screen (#5155)
* refactored the static location screen to the location sharing screen # Conflicts: # UnitTests/Sources/LocationSharingScreenViewModelTests.swift # Conflicts: # ElementX.xcodeproj/project.pbxproj * implemented a custom pin with an overlayable view * implemented the render of the user when the location is sender instead of the pin type * removed description and body they are not used at all. * reimplemented single button for sharing this or user location + implemented an experimental way to update annotations * removed unnecessary @Suite description * implemented a way to display the alert on top of the sheet and added a spinner to the center user location button * fixed alerts strings * fixed a failing test * improved preview tests
This commit is contained in:
@@ -85,8 +85,10 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
|
||||
actionsSubject.send(.finished)
|
||||
case .displayUser(let userID):
|
||||
actionsSubject.send(.displayUser(userID: userID))
|
||||
case .presentLocationViewer(let geoURI, let description):
|
||||
presentMapNavigator(geoURI: geoURI, description: description, timelineController: timelineController)
|
||||
case .presentLocationViewer(let senderID, let geoURI):
|
||||
presentMapNavigator(senderID: senderID,
|
||||
geoURI: geoURI,
|
||||
timelineController: timelineController)
|
||||
case .displayMessageForwarding(let forwardingItem):
|
||||
presentMessageForwarding(with: forwardingItem)
|
||||
case .displayRoomScreenWithFocussedPin(let eventID, let threadRootEventID):
|
||||
@@ -98,16 +100,22 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol {
|
||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||
}
|
||||
|
||||
private func presentMapNavigator(geoURI: GeoURI, description: String?, timelineController: TimelineControllerProtocol) {
|
||||
private func presentMapNavigator(senderID: String?,
|
||||
geoURI: GeoURI,
|
||||
timelineController: TimelineControllerProtocol) {
|
||||
let stackCoordinator = NavigationStackCoordinator()
|
||||
|
||||
let params = StaticLocationScreenCoordinatorParameters(interactionMode: .viewOnly(geoURI: geoURI, description: description),
|
||||
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
||||
timelineController: timelineController,
|
||||
appMediator: flowParameters.appMediator,
|
||||
analytics: flowParameters.analytics,
|
||||
userIndicatorController: flowParameters.userIndicatorController)
|
||||
let coordinator = StaticLocationScreenCoordinator(parameters: params)
|
||||
let params = LocationSharingScreenCoordinatorParameters(interactionMode: .viewStatic(senderID: senderID,
|
||||
geoURI: geoURI),
|
||||
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
||||
liveLocationSharingEnabled: flowParameters.appSettings.liveLocationSharingEnabled,
|
||||
roomProxy: roomProxy,
|
||||
timelineController: timelineController,
|
||||
appMediator: flowParameters.appMediator,
|
||||
analytics: flowParameters.analytics,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
mediaProvider: flowParameters.userSession.mediaProvider)
|
||||
let coordinator = LocationSharingScreenCoordinator(parameters: params)
|
||||
|
||||
coordinator.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
|
||||
@@ -703,8 +703,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case .presentPollForm(let mode):
|
||||
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentLocationViewer(_, let geoURI, let description):
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewOnly(geoURI: geoURI, description: description)),
|
||||
case .presentLocationViewer(let senderID, let geoURI):
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(senderID: senderID, geoURI: geoURI)),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentRoomMemberDetails(userID: let userID):
|
||||
stateMachine.tryEvent(.startMembersFlow(entryPoint: .roomMember(userID: userID)))
|
||||
@@ -788,10 +788,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case .presentPollForm(let mode):
|
||||
stateMachine.tryEvent(.presentPollForm(mode: mode),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentLocationViewer(_, let geoURI, let description):
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewOnly(geoURI: geoURI,
|
||||
description: description)),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentLocationViewer(let senderID, let geoURI):
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(senderID: senderID,
|
||||
geoURI: geoURI)),
|
||||
userInfo: EventUserInfo(animated: animated,
|
||||
timelineController: timelineController))
|
||||
case .presentEmojiPicker(let itemID, let selectedEmojis):
|
||||
stateMachine.tryEvent(.presentEmojiPicker(itemID: itemID, selectedEmojis: selectedEmojis),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
@@ -1128,18 +1129,21 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func presentMapNavigator(interactionMode: StaticLocationInteractionMode,
|
||||
private func presentMapNavigator(interactionMode: LocationSharingInteractionMode,
|
||||
timelineController: TimelineControllerProtocol,
|
||||
animated: Bool) {
|
||||
let stackCoordinator = NavigationStackCoordinator()
|
||||
|
||||
let params = StaticLocationScreenCoordinatorParameters(interactionMode: interactionMode,
|
||||
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
||||
timelineController: timelineController,
|
||||
appMediator: flowParameters.appMediator,
|
||||
analytics: flowParameters.analytics,
|
||||
userIndicatorController: flowParameters.userIndicatorController)
|
||||
let coordinator = StaticLocationScreenCoordinator(parameters: params)
|
||||
let params = LocationSharingScreenCoordinatorParameters(interactionMode: interactionMode,
|
||||
mapURLBuilder: flowParameters.appSettings.mapTilerConfiguration,
|
||||
liveLocationSharingEnabled: flowParameters.appSettings.liveLocationSharingEnabled,
|
||||
roomProxy: roomProxy,
|
||||
timelineController: timelineController,
|
||||
appMediator: flowParameters.appMediator,
|
||||
analytics: flowParameters.analytics,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
mediaProvider: flowParameters.userSession.mediaProvider)
|
||||
let coordinator = LocationSharingScreenCoordinator(parameters: params)
|
||||
|
||||
coordinator.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
|
||||
@@ -144,7 +144,7 @@ extension RoomFlowCoordinator {
|
||||
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
||||
case dismissEmojiPicker
|
||||
|
||||
case presentMapNavigator(interactionMode: StaticLocationInteractionMode)
|
||||
case presentMapNavigator(interactionMode: LocationSharingInteractionMode)
|
||||
case dismissMapNavigator
|
||||
|
||||
case presentMessageForwarding(forwardingItem: MessageForwardingItem)
|
||||
|
||||
Reference in New Issue
Block a user