Files
comaps/iphone/Maps/UI/BottomMenu/Menu/BottomMenuInteractor.swift
Kiryl Kaveryn e2efbbe68c [ios] Review fixes
Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-06-17 11:36:04 +02:00

95 lines
2.5 KiB
Swift

protocol BottomMenuInteractorProtocol: AnyObject {
func close()
func addPlace()
func downloadMaps()
func donate()
func openSettings()
func shareLocation(cell: BottomMenuItemCell)
func toggleTrackRecording()
}
@objc protocol BottomMenuDelegate {
func actionDownloadMaps(_ mode: MWMMapDownloaderMode)
func addPlace()
func didFinishAddingPlace()
}
class BottomMenuInteractor {
weak var presenter: BottomMenuPresenterProtocol?
private weak var viewController: UIViewController?
private weak var mapViewController: MapViewController?
private weak var delegate: BottomMenuDelegate?
private weak var controlsManager: MWMMapViewControlsManager?
private let trackRecorder: TrackRecordingManager = .shared
init(viewController: UIViewController,
mapViewController: MapViewController,
controlsManager: MWMMapViewControlsManager,
delegate: BottomMenuDelegate) {
self.viewController = viewController
self.mapViewController = mapViewController
self.delegate = delegate
self.controlsManager = controlsManager
}
}
extension BottomMenuInteractor: BottomMenuInteractorProtocol {
func close() {
guard let controlsManager = controlsManager else {
fatalError()
}
controlsManager.menuState = controlsManager.menuRestoreState
}
func addPlace() {
delegate?.addPlace()
}
func donate() {
close()
guard var url = Settings.donateUrl() else { return }
if url == "https://www.comaps.app/donate/" {
url = L("translated_om_site_url") + "donate/"
}
viewController?.openUrl(url, externally: true)
}
func downloadMaps() {
close()
delegate?.actionDownloadMaps(.downloaded)
}
func openSettings() {
close()
mapViewController?.openSettings()
}
func shareLocation(cell: BottomMenuItemCell) {
guard let coordinates = LocationManager.lastLocation()?.coordinate else {
viewController?.present(UIAlertController.unknownCurrentPosition(), animated: true, completion: nil)
return
}
guard let viewController = viewController else { return }
let vc = ActivityViewController.share(forMyPosition: coordinates)
vc.present(inParentViewController: viewController, anchorView: cell.anchorView)
}
func toggleTrackRecording() {
close()
switch trackRecorder.recordingState {
case .active:
break
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
}
}