mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +00:00
[ios] implement TrackRecording place page
1. add an new screen (layout) 2. add TR icon for the bottom tabbar 3. share current location from the TR PP 4. refactor TR manager to properly handle state updates and pass them to the LiveActivityManager and PlacePage 5. add init/update with TrackInfo/EleInfo methods to the PlacePageData and PlacePagePreviewData to update the PP state Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
This commit is contained in:
committed by
Yannik Bloscheck
parent
5d0b8f1c04
commit
b79724f248
@@ -76,6 +76,7 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
|
||||
@property(nonatomic, readwrite) MWMMapViewControlsManager *controlsManager;
|
||||
@property(nonatomic, readwrite) SearchOnMapManager *searchManager;
|
||||
@property(nonatomic, readwrite) TrackRecordingManager *trackRecordingManager;
|
||||
|
||||
@property(nonatomic) BOOL disableStandbyOnLocationStateMode;
|
||||
|
||||
@@ -116,7 +117,7 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
return [MapsAppDelegate theApp].mapViewController;
|
||||
}
|
||||
|
||||
#pragma mark - Map Navigation
|
||||
#pragma mark - PlacePage
|
||||
|
||||
- (void)showOrUpdatePlacePage:(PlacePageData *)data {
|
||||
if (self.searchManager.isSearching)
|
||||
@@ -124,9 +125,10 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
|
||||
self.controlsManager.trafficButtonHidden = YES;
|
||||
if (self.placePageVC != nil) {
|
||||
[PlacePageBuilder update:(PlacePageViewController *)self.placePageVC with:data];
|
||||
[PlacePageBuilder update:self.placePageVC with:data];
|
||||
return;
|
||||
}
|
||||
|
||||
[self showPlacePageFor:data];
|
||||
}
|
||||
|
||||
@@ -204,6 +206,7 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
}
|
||||
|
||||
- (void)hideRegularPlacePage {
|
||||
[self stopObservingTrackRecordingUpdates];
|
||||
[self.placePageVC closeAnimatedWithCompletion:^{
|
||||
[self.placePageVC.view removeFromSuperview];
|
||||
[self.placePageVC willMoveToParentViewController:nil];
|
||||
@@ -247,6 +250,7 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
return;
|
||||
}
|
||||
PlacePageData * data = [[PlacePageData alloc] initWithLocalizationProvider:[[OpeinigHoursLocalization alloc] init]];
|
||||
[self stopObservingTrackRecordingUpdates];
|
||||
[self showOrUpdatePlacePage:data];
|
||||
}
|
||||
|
||||
@@ -425,6 +429,9 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
// After all users migrate to OAuth2 we can remove next code
|
||||
[self migrateOAuthCredentials];
|
||||
|
||||
if (self.trackRecordingManager.isActive)
|
||||
[self showTrackRecordingPlacePage];
|
||||
|
||||
/// @todo: Uncomment update dialog when will be ready to handle big traffic bursts.
|
||||
/*
|
||||
if (!DeepLinkHandler.shared.isLaunchedByDeeplink)
|
||||
@@ -742,6 +749,12 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
return _searchManager;
|
||||
}
|
||||
|
||||
- (TrackRecordingManager *)trackRecordingManager {
|
||||
if (!_trackRecordingManager)
|
||||
_trackRecordingManager = TrackRecordingManager.shared;
|
||||
return _trackRecordingManager;
|
||||
}
|
||||
|
||||
- (UIView * _Nullable)searchViewAvailableArea {
|
||||
return self.searchManager.viewController.availableAreaView;
|
||||
}
|
||||
@@ -858,6 +871,50 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Track Recording Place Page
|
||||
|
||||
- (void)showTrackRecordingPlacePage {
|
||||
if ([self.trackRecordingManager contains:self]) {
|
||||
[self dismissPlacePage];
|
||||
return;
|
||||
}
|
||||
PlacePageData * placePageData = [[PlacePageData alloc] initWithTrackInfo:self.trackRecordingManager.trackRecordingInfo
|
||||
elevationInfo:self.trackRecordingManager.trackRecordingElevationProfileData];
|
||||
[self.controlsManager setTrackRecordingButtonState:TrackRecordingButtonStateHidden];
|
||||
[self showOrUpdatePlacePage:placePageData];
|
||||
[self startObservingTrackRecordingUpdatesForPlacePageData:placePageData];
|
||||
}
|
||||
|
||||
- (void)startObservingTrackRecordingUpdatesForPlacePageData:(PlacePageData *)placePageData {
|
||||
__weak __typeof(self) weakSelf = self;
|
||||
[self.trackRecordingManager addObserver:self
|
||||
recordingIsActiveDidChangeHandler:^(TrackRecordingState state,
|
||||
TrackInfo * _Nonnull trackInfo,
|
||||
ElevationProfileData * _Nonnull (^ _Nullable elevationData) ()) {
|
||||
__strong __typeof(weakSelf) self = weakSelf;
|
||||
|
||||
switch (state) {
|
||||
case TrackRecordingStateInactive:
|
||||
[self stopObservingTrackRecordingUpdates];
|
||||
[self.controlsManager setTrackRecordingButtonState:TrackRecordingButtonStateClosed];
|
||||
break;
|
||||
case TrackRecordingStateActive:
|
||||
if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive)
|
||||
return;
|
||||
[self.controlsManager setTrackRecordingButtonState:TrackRecordingButtonStateHidden];
|
||||
[placePageData updateWithTrackInfo:trackInfo
|
||||
elevationInfo:elevationData()];
|
||||
break;
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)stopObservingTrackRecordingUpdates {
|
||||
[self.trackRecordingManager removeObserver:self];
|
||||
if (self.trackRecordingManager.isActive)
|
||||
[self.controlsManager setTrackRecordingButtonState:TrackRecordingButtonStateVisible];
|
||||
}
|
||||
|
||||
// MARK: - Handle macOS trackpad gestures
|
||||
|
||||
- (void)handlePan:(UIPanGestureRecognizer *)recognizer API_AVAILABLE(ios(14.0)) {
|
||||
|
||||
Reference in New Issue
Block a user