From e0c579634bc76be0abdbc48ec0f0893c59df6c8f Mon Sep 17 00:00:00 2001 From: Kiryl Kaveryn Date: Tue, 19 Aug 2025 14:37:08 +0400 Subject: [PATCH] [ios] Fix track recording points updates subscribe/unsubscribe Signed-off-by: Kiryl Kaveryn --- iphone/Maps/UI/PlacePage/PlacePageInteractor.swift | 12 ++++++++---- .../Maps/UI/PlacePage/PlacePageViewController.swift | 5 +++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/iphone/Maps/UI/PlacePage/PlacePageInteractor.swift b/iphone/Maps/UI/PlacePage/PlacePageInteractor.swift index 5d78380cf..a0f056fd4 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageInteractor.swift +++ b/iphone/Maps/UI/PlacePage/PlacePageInteractor.swift @@ -1,5 +1,6 @@ protocol PlacePageInteractorProtocol: AnyObject { func viewWillAppear() + func viewWillDisappear() func updateTopBound(_ bound: CGFloat, duration: TimeInterval) } @@ -19,12 +20,11 @@ class PlacePageInteractor: NSObject { self.mapViewController = mapViewController super.init() addToBookmarksManagerObserverList() - subscribeOnTrackActivePointUpdates() + subscribeOnTrackActivePointUpdatesIfNeeded() } deinit { removeFromBookmarksManagerObserverList() - unsubscribeFromTrackActivePointUpdates() } private func updatePlacePageIfNeeded() { @@ -53,7 +53,8 @@ class PlacePageInteractor: NSObject { } } - private func subscribeOnTrackActivePointUpdates() { + private func subscribeOnTrackActivePointUpdatesIfNeeded() { + unsubscribeFromTrackActivePointUpdates() guard placePageData.objectType == .track, let trackData = placePageData.trackData else { return } bookmarksManager.setElevationActivePointChanged(trackData.trackId) { [weak self] distance in self?.trackActivePointPresenter?.updateActivePointDistance(distance) @@ -65,7 +66,6 @@ class PlacePageInteractor: NSObject { } private func unsubscribeFromTrackActivePointUpdates() { - guard placePageData.trackData?.onActivePointChangedHandler != nil else { return } bookmarksManager.resetElevationActivePointChanged() bookmarksManager.resetElevationMyPositionChanged() } @@ -89,6 +89,10 @@ extension PlacePageInteractor: PlacePageInteractorProtocol { updatePlacePageIfNeeded() } + func viewWillDisappear() { + unsubscribeFromTrackActivePointUpdates() + } + func updateTopBound(_ bound: CGFloat, duration: TimeInterval) { mapViewController?.setPlacePageTopBound(bound, duration: duration) } diff --git a/iphone/Maps/UI/PlacePage/PlacePageViewController.swift b/iphone/Maps/UI/PlacePage/PlacePageViewController.swift index e1ed42eca..37965519a 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageViewController.swift +++ b/iphone/Maps/UI/PlacePage/PlacePageViewController.swift @@ -79,6 +79,11 @@ final class PlacePageScrollView: UIScrollView { updatePreviewOffset() } + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + interactor?.viewWillDisappear() + } + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) // Update layout when the device was rotated but skip when the appearance was changed.