diff --git a/iphone/Maps/ActiveMapsVC.h b/iphone/Maps/ActiveMapsVC.h deleted file mode 100644 index b0bc0ce073..0000000000 --- a/iphone/Maps/ActiveMapsVC.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "DownloaderParentVC.h" - -@interface ActiveMapsVC : DownloaderParentVC - -@end diff --git a/iphone/Maps/ActiveMapsVC.mm b/iphone/Maps/ActiveMapsVC.mm deleted file mode 100644 index 3f943c17dd..0000000000 --- a/iphone/Maps/ActiveMapsVC.mm +++ /dev/null @@ -1,420 +0,0 @@ -#import "ActiveMapsVC.h" -#import "BadgeView.h" -#import "Common.h" -#import "MapCell.h" -#import "Statistics.h" -#import "UIColor+MapsMeColor.h" - -extern NSString * const MapsStatusChangedNotification; - -@interface ActiveMapsVC () - -@property (nonatomic) BadgeView * outOfDateBadge; -@property (nonatomic) ActiveMapsLayout::TGroup selectedGroup; - -@end - -@implementation ActiveMapsVC -{ - ActiveMapsObserver * m_mapsObserver; - int m_mapsObserverSlotId; -} - -- (id)init -{ - self = [super init]; - - self.title = L(@"downloader_downloaded_maps"); - - __weak ActiveMapsVC * weakSelf = self; - m_mapsObserver = new ActiveMapsObserver(weakSelf); - m_mapsObserverSlotId = self.mapsLayout.AddListener(m_mapsObserver); - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outOfDateCountriesCountChanged:) name:MapsStatusChangedNotification object:nil]; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - - if (self.isMovingFromParentViewController) - self.mapsLayout.RemoveListener(m_mapsObserverSlotId); -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - [self refreshTopRightButton]; -} - -- (void)outOfDateCountriesCountChanged:(NSNotification *)notification -{ - self.outOfDateBadge.value = [[notification userInfo][@"OutOfDate"] integerValue]; -} - -- (void)refreshTopRightButton -{ - UIBarButtonItem * item; - if (self.mapsLayout.IsDownloadingActive()) - item = [[UIBarButtonItem alloc] initWithTitle:L(@"downloader_cancel_all") style:UIBarButtonItemStylePlain target:self action:@selector(cancelAllMaps:)]; - else if (self.mapsLayout.GetOutOfDateCount() > 0) - item = [[UIBarButtonItem alloc] initWithTitle:L(@"downloader_update_all") style:UIBarButtonItemStylePlain target:self action:@selector(updateAllMaps:)]; - - [self.navigationItem setRightBarButtonItem:item animated:YES]; -} - -- (void)updateAllMaps:(id)sender -{ - self.mapsLayout.UpdateAll(); -} - -- (void)cancelAllMaps:(id)sender -{ - self.mapsLayout.CancelAll(); -} - -#pragma mark - Helpers - -- (ActiveMapsLayout &)mapsLayout -{ - return GetFramework().GetCountryTree().GetActiveMapLayout(); -} - -- (ActiveMapsLayout::TGroup)groupWithSection:(NSInteger)section -{ - ASSERT(section < (NSInteger)ActiveMapsLayout::TGroup::EGroupCount, ()); - return static_cast(section); -} - -- (MapCell *)cellAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group -{ - return (MapCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:position inSection:(NSInteger)group]]; -} - -- (void)markSelectedMapIndexPath:(NSIndexPath *)indexPath -{ - self.selectedPosition = static_cast(indexPath.row); - self.selectedGroup = [self groupWithSection:indexPath.section]; -} - -- (void)configureSizeLabelOfMapCell:(MapCell *)cell position:(int)position group:(ActiveMapsLayout::TGroup const &)group status:(TStatus const &)status options:(MapOptions const &)options -{ - if (status == TStatus::ENotDownloaded) - { - LocalAndRemoteSizeT const size = self.mapsLayout.GetRemoteCountrySizes(group, position); - - cell.sizeLabel.text = formattedSize(size.first); - } - else if (status == TStatus::EOnDisk || status == TStatus::EOnDiskOutOfDate) - cell.sizeLabel.text = formattedSize(self.mapsLayout.GetCountrySize(group, position, options).second); - else if (status == TStatus::EOutOfMemFailed || status == TStatus::EDownloadFailed || status == TStatus::EDownloading || status == TStatus::EInQueue) - cell.sizeLabel.text = formattedSize(self.mapsLayout.GetDownloadableCountrySize(group, position).second); -} - -#pragma mark - DownloaderParentVC virtual methods implementation - -- (NSString *)parentTitle -{ - return nil; -} - -- (NSString *)selectedMapName -{ - return @(self.mapsLayout.GetCountryName(self.selectedGroup, self.selectedPosition).c_str()); -} - -- (uint64_t)selectedMapSizeWithOptions:(MapOptions)options -{ - return self.mapsLayout.GetCountrySize(self.selectedGroup, self.selectedPosition, options).second; -} - -- (TStatus)selectedMapStatus -{ - return self.mapsLayout.GetCountryStatus(self.selectedGroup, self.selectedPosition); -} - -- (MapOptions)selectedMapOptions -{ - return self.mapsLayout.GetCountryOptions(self.selectedGroup, self.selectedPosition); -} - -- (void)performAction:(DownloaderAction)action withSizeCheck:(BOOL)check -{ - switch (action) - { - case DownloaderActionDownloadMap: - if (check == NO || [self canDownloadSelectedMap]) - self.mapsLayout.DownloadMap(self.selectedGroup, self.selectedPosition, self.selectedInActionSheetOptions); - break; - - case DownloaderActionDeleteMap: - self.mapsLayout.DeleteMap(self.selectedGroup, self.selectedPosition, self.selectedInActionSheetOptions); - break; - - case DownloaderActionCancelDownloading: - self.mapsLayout.CancelDownloading(self.selectedGroup, self.selectedPosition); - break; - - case DownloaderActionZoomToCountry: - self.mapsLayout.ShowMap(self.selectedGroup, self.selectedPosition); - [[Statistics instance] logEvent:@"Show Map From Download Countries Screen"]; - [self.navigationController popToRootViewControllerAnimated:YES]; - break; - } -} - -#pragma mark - TableView - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section -{ - ActiveMapsLayout::TGroup const group = [self groupWithSection:section]; - - if (group == ActiveMapsLayout::TGroup::ENewMap) - return nil; - - UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)]; - view.clipsToBounds = YES; - UILabel * label = [[UILabel alloc] initWithFrame:view.bounds]; - label.font = [UIFont fontWithName:@"HelveticaNeue" size:13]; - label.backgroundColor = [UIColor clearColor]; - label.textColor = [UIColor blackPrimaryText]; - - if (group == ActiveMapsLayout::TGroup::EOutOfDate) - label.text = L(@"downloader_outdated_maps").uppercaseString; - else if (group == ActiveMapsLayout::TGroup::EUpToDate) - label.text = L(@"downloader_uptodate_maps").uppercaseString; - - [label sizeToIntegralFit]; - [view addSubview:label]; - label.minX = 13; - label.maxY = view.height - 5; - if (group == ActiveMapsLayout::TGroup::EOutOfDate) - { - BadgeView * badge = [[BadgeView alloc] init]; - badge.value = self.mapsLayout.GetOutOfDateCount(); - badge.center = CGPointMake(label.maxX + badge.width - 3, label.midY - 1.0 / [UIScreen mainScreen].scale); - [view addSubview:badge]; - self.outOfDateBadge = badge; - } - return view; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section -{ - ActiveMapsLayout::TGroup const group = [self groupWithSection:section]; - if (group == ActiveMapsLayout::TGroup::EOutOfDate || group == ActiveMapsLayout::TGroup::EUpToDate) - return self.mapsLayout.GetCountInGroup(group) == 0 ? 0.001 : 42; - else - return 0.001; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section -{ - return 0.001; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return (NSInteger)ActiveMapsLayout::TGroup::EGroupCount; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.mapsLayout.GetCountInGroup([self groupWithSection:section]); -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MapCell * cell = [tableView dequeueReusableCellWithIdentifier:[MapCell className]]; - if (!cell) - cell = [[MapCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[MapCell className]]; - - int const position = static_cast(indexPath.row); - ActiveMapsLayout::TGroup const group = [self groupWithSection:indexPath.section]; - TStatus const status = self.mapsLayout.GetCountryStatus(group, position); - MapOptions const options = self.mapsLayout.GetCountryOptions(group, position); - - NSInteger const numberOfRows = [self tableView:tableView numberOfRowsInSection:indexPath.section]; - BOOL const isLast = (indexPath.row == numberOfRows - 1); - BOOL const isFirst = (indexPath.row == 0); - - cell.titleLabel.text = @(self.mapsLayout.GetCountryName(group, position).c_str()); - cell.parentMode = NO; - cell.status = status; - cell.options = options; - cell.delegate = self; - cell.badgeView.value = 0; - cell.separatorTop.hidden = !isFirst; - cell.separatorBottom.hidden = !isLast; - cell.separator.hidden = isLast; - - if (status == TStatus::EOutOfMemFailed || status == TStatus::EDownloadFailed || status == TStatus::EDownloading || status == TStatus::EInQueue) - { - LocalAndRemoteSizeT const size = self.mapsLayout.GetDownloadableCountrySize(group, position); - cell.downloadProgress = (double)size.first / size.second; - } - [self configureSizeLabelOfMapCell:cell position:position group:group status:status options:options]; - - return cell; -} - -- (void)updateAllCellsSeprators -{ - NSInteger numberOfSection = [self numberOfSectionsInTableView:self.tableView]; - for (NSInteger section = 0; section < numberOfSection; section++) - { - NSInteger numberOfRows = [self tableView:self.tableView numberOfRowsInSection:section]; - for (NSInteger row = 0; row < numberOfRows; row++) - { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - [self updateSeparatorsForCellAtIndexPath:indexPath]; - } - } -} - -- (void)updateSeparatorsForCellAtIndexPath:(NSIndexPath *)indexPath -{ - MapCell * cell = (MapCell *)[self.tableView cellForRowAtIndexPath:indexPath]; - NSInteger const numberOfRows = [self tableView:self.tableView numberOfRowsInSection:indexPath.section]; - BOOL const isLast = (indexPath.row == numberOfRows - 1); - BOOL const isFirst = (indexPath.row == 0); - cell.separatorTop.hidden = !isFirst; - cell.separatorBottom.hidden = !isLast; - cell.separator.hidden = isLast; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - TStatus const status = self.mapsLayout.GetCountryStatus([self groupWithSection:indexPath.section], static_cast(indexPath.row)); - return status == TStatus::EOnDisk || status == TStatus::EOnDiskOutOfDate; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) - { - int const position = static_cast(indexPath.row); - ActiveMapsLayout::TGroup const group = [self groupWithSection:indexPath.section]; - MapOptions const options = self.mapsLayout.GetCountryOptions(group, position); - self.mapsLayout.DeleteMap(group, position, options); - [tableView setEditing:NO animated:YES]; - [self updateAllCellsSeprators]; - } -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - [self markSelectedMapIndexPath:indexPath]; - - switch ([self selectedMapStatus]) - { - case TStatus::ENotDownloaded: - case TStatus::EDownloadFailed: - case TStatus::EOutOfMemFailed: - [self performAction:DownloaderActionDownloadMap withSizeCheck:NO]; - break; - case TStatus::EDownloading: - case TStatus::EInQueue: - [self performAction:DownloaderActionCancelDownloading withSizeCheck:NO]; - break; - default: - { - MapCell * cell = [self cellAtPosition:self.selectedPosition inGroup:self.selectedGroup]; - UIActionSheet * actionSheet = [self actionSheetToPerformActionOnSelectedMap]; - [actionSheet showFromRect:cell.frame inView:cell.superview animated:YES]; - break; - } - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [MapCell cellHeight]; -} - -#pragma mark - MapCellDelegate - -- (void)mapCellDidStartDownloading:(MapCell *)cell -{ - [self markSelectedMapIndexPath:[self.tableView indexPathForCell:cell]]; - TStatus const status = [self selectedMapStatus]; - if (status == TStatus::EDownloadFailed || status == TStatus::EOutOfMemFailed) - if ([self canDownloadSelectedMap]) - self.mapsLayout.RetryDownloading(self.selectedGroup, self.selectedPosition); -} - -- (void)mapCellDidCancelDownloading:(MapCell *)cell -{ - NSIndexPath * indexPath = [self.tableView indexPathForCell:cell]; - self.selectedPosition = static_cast(indexPath.row); - self.selectedGroup = [self groupWithSection:indexPath.section]; - - [[self actionSheetToCancelDownloadingSelectedMap] showFromRect:cell.frame inView:cell.superview animated:YES]; -} - -#pragma mark - ActiveMaps core callbacks - -- (void)countryStatusChangedAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group -{ - [self refreshTopRightButton]; - - MapCell * cell = [self cellAtPosition:position inGroup:group]; - - TStatus const status = self.mapsLayout.GetCountryStatus(group, position); - MapOptions const options = self.mapsLayout.GetCountryOptions(group, position); - [self configureSizeLabelOfMapCell:cell position:position group:group status:status options:options]; - [cell setStatus:self.mapsLayout.GetCountryStatus(group, position) options:self.mapsLayout.GetCountryOptions(group, position) animated:YES]; - - self.outOfDateBadge.value = self.mapsLayout.GetOutOfDateCount(); -} - -- (void)countryOptionsChangedAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group -{ - MapCell * cell = [self cellAtPosition:position inGroup:group]; - - TStatus const status = self.mapsLayout.GetCountryStatus(group, position); - MapOptions const options = self.mapsLayout.GetCountryOptions(group, position); - [self configureSizeLabelOfMapCell:cell position:position group:group status:status options:options]; - [cell setStatus:self.mapsLayout.GetCountryStatus(group, position) options:self.mapsLayout.GetCountryOptions(group, position) animated:YES]; -} - -- (void)countryGroupChangedFromPosition:(int)oldPosition inGroup:(ActiveMapsLayout::TGroup const &)oldGroup toPosition:(int)newPosition inGroup:(ActiveMapsLayout::TGroup const &)newGroup -{ - if (oldGroup == newGroup && oldPosition == -1) - { - NSIndexPath * indexPath = [NSIndexPath indexPathForRow:newPosition inSection:(NSInteger)newGroup]; - [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; - } - else if (oldGroup == newGroup && newPosition == -1) - { - NSIndexPath * indexPath = [NSIndexPath indexPathForRow:oldPosition inSection:(NSInteger)oldGroup]; - [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; - } - else if (oldGroup != newGroup && oldPosition >= 0 && newPosition >= 0) - { - NSIndexPath * oldIndexPath = [NSIndexPath indexPathForRow:oldPosition inSection:(NSInteger)oldGroup]; - NSIndexPath * newIndexPath = [NSIndexPath indexPathForRow:newPosition inSection:(NSInteger)newGroup]; - [self.tableView moveRowAtIndexPath:oldIndexPath toIndexPath:newIndexPath]; - } - [self updateAllCellsSeprators]; -} - -- (void)countryDownloadingProgressChanged:(LocalAndRemoteSizeT const &)progress atPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group -{ - MapCell * cell = [self cellAtPosition:position inGroup:group]; - [cell setDownloadProgress:((double)progress.first / progress.second) animated:YES]; -} - -@end diff --git a/iphone/Maps/Categories/UIKitCategories.h b/iphone/Maps/Categories/UIKitCategories.h index 5c758b6c84..d0603f2a96 100644 --- a/iphone/Maps/Categories/UIKitCategories.h +++ b/iphone/Maps/Categories/UIKitCategories.h @@ -34,7 +34,6 @@ static inline CGFloat LengthCGPoint(CGPoint point) + (UIColor *)applicationColor; + (UIColor *)navigationBarColor; - @end @interface UIView (Coordinates) diff --git a/iphone/Maps/Categories/UIKitCategories.mm b/iphone/Maps/Categories/UIKitCategories.mm index 59e9da8001..c9c5cc0fa8 100644 --- a/iphone/Maps/Categories/UIKitCategories.mm +++ b/iphone/Maps/Categories/UIKitCategories.mm @@ -321,193 +321,6 @@ @end -#import - -static const void * UIAlertViewOriginalDelegateKey = & UIAlertViewOriginalDelegateKey; - -static const void * UIAlertViewTapBlockKey = & UIAlertViewTapBlockKey; -static const void * UIAlertViewWillPresentBlockKey = & UIAlertViewWillPresentBlockKey; -static const void * UIAlertViewDidPresentBlockKey = & UIAlertViewDidPresentBlockKey; -static const void * UIAlertViewWillDismissBlockKey = & UIAlertViewWillDismissBlockKey; -static const void * UIAlertViewDidDismissBlockKey = & UIAlertViewDidDismissBlockKey; -static const void * UIAlertViewCancelBlockKey = & UIAlertViewCancelBlockKey; -static const void * UIAlertViewShouldEnableFirstOtherButtonBlockKey = & UIAlertViewShouldEnableFirstOtherButtonBlockKey; - -@implementation UIAlertView (Blocks) - -- (void)_checkAlertViewDelegate -{ - if (self.delegate != (id)self) - { - objc_setAssociatedObject(self, UIAlertViewOriginalDelegateKey, self.delegate, OBJC_ASSOCIATION_ASSIGN); - self.delegate = (id )self; - } -} - -- (MWMAlertViewCompletionBlock)tapBlock -{ - return objc_getAssociatedObject(self, UIAlertViewTapBlockKey); -} - -- (void)setTapBlock:(MWMAlertViewCompletionBlock)tapBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewTapBlockKey, tapBlock, OBJC_ASSOCIATION_COPY); -} - -- (MWMAlertViewCompletionBlock)willDismissBlock -{ - return objc_getAssociatedObject(self, UIAlertViewWillDismissBlockKey); -} - -- (void)setWillDismissBlock:(MWMAlertViewCompletionBlock)willDismissBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewWillDismissBlockKey, willDismissBlock, OBJC_ASSOCIATION_COPY); -} - -- (MWMAlertViewCompletionBlock)didDismissBlock -{ - return objc_getAssociatedObject(self, UIAlertViewDidDismissBlockKey); -} - -- (void)setDidDismissBlock:(MWMAlertViewCompletionBlock)didDismissBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewDidDismissBlockKey, didDismissBlock, OBJC_ASSOCIATION_COPY); -} - -- (MWMAlertViewBlock)willPresentBlock -{ - return objc_getAssociatedObject(self, UIAlertViewWillPresentBlockKey); -} - -- (void)setWillPresentBlock:(MWMAlertViewBlock)willPresentBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewWillPresentBlockKey, willPresentBlock, OBJC_ASSOCIATION_COPY); -} - -- (MWMAlertViewBlock)didPresentBlock -{ - return objc_getAssociatedObject(self, UIAlertViewDidPresentBlockKey); -} - -- (void)setDidPresentBlock:(MWMAlertViewBlock)didPresentBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewDidPresentBlockKey, didPresentBlock, OBJC_ASSOCIATION_COPY); -} - -- (MWMAlertViewBlock)cancelBlock -{ - return objc_getAssociatedObject(self, UIAlertViewCancelBlockKey); -} - -- (void)setCancelBlock:(MWMAlertViewBlock)cancelBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewCancelBlockKey, cancelBlock, OBJC_ASSOCIATION_COPY); -} - -- (void)setShouldEnableFirstOtherButtonBlock:(BOOL(^)(UIAlertView * alertView))shouldEnableFirstOtherButtonBlock -{ - [self _checkAlertViewDelegate]; - objc_setAssociatedObject(self, UIAlertViewShouldEnableFirstOtherButtonBlockKey, shouldEnableFirstOtherButtonBlock, OBJC_ASSOCIATION_COPY); -} - -- (BOOL(^)(UIAlertView * alertView))shouldEnableFirstOtherButtonBlock -{ - return objc_getAssociatedObject(self, UIAlertViewShouldEnableFirstOtherButtonBlockKey); -} - -#pragma mark - UIAlertViewDelegate - -- (void)willPresentAlertView:(UIAlertView *)alertView -{ - MWMAlertViewBlock block = alertView.willPresentBlock; - - if (block) - block(alertView); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(willPresentAlertView:)]) - [originalDelegate willPresentAlertView:alertView]; -} - -- (void)didPresentAlertView:(UIAlertView *)alertView -{ - MWMAlertViewBlock block = alertView.didPresentBlock; - - if (block) - block(alertView); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(didPresentAlertView:)]) - [originalDelegate didPresentAlertView:alertView]; -} - -- (void)alertViewCancel:(UIAlertView *)alertView { - MWMAlertViewBlock block = alertView.cancelBlock; - - if (block) - block(alertView); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertViewCancel:)]) - [originalDelegate alertViewCancel:alertView]; -} - -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { - MWMAlertViewCompletionBlock completion = alertView.tapBlock; - - if (completion) - completion(alertView, buttonIndex); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) - [originalDelegate alertView:alertView clickedButtonAtIndex:buttonIndex]; -} - -- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { - MWMAlertViewCompletionBlock completion = alertView.willDismissBlock; - - if (completion) - completion(alertView, buttonIndex); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:willDismissWithButtonIndex:)]) - [originalDelegate alertView:alertView willDismissWithButtonIndex:buttonIndex]; -} - -- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex -{ - MWMAlertViewCompletionBlock completion = alertView.didDismissBlock; - - if (completion) - completion(alertView, buttonIndex); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertView:didDismissWithButtonIndex:)]) - [originalDelegate alertView:alertView didDismissWithButtonIndex:buttonIndex]; -} - -- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView -{ - BOOL(^shouldEnableFirstOtherButtonBlock)(UIAlertView * alertView) = alertView.shouldEnableFirstOtherButtonBlock; - - if (shouldEnableFirstOtherButtonBlock) - return shouldEnableFirstOtherButtonBlock(alertView); - - id originalDelegate = objc_getAssociatedObject(self, UIAlertViewOriginalDelegateKey); - if (originalDelegate && [originalDelegate respondsToSelector:@selector(alertViewShouldEnableFirstOtherButton:)]) - return [originalDelegate alertViewShouldEnableFirstOtherButton:alertView]; - - return YES; -} - -@end - @implementation UINavigationController (Autorotate) - (BOOL)shouldAutorotate diff --git a/iphone/Maps/Classes/BadgeView.h b/iphone/Maps/Classes/BadgeView.h deleted file mode 100644 index 9cc078e4e4..0000000000 --- a/iphone/Maps/Classes/BadgeView.h +++ /dev/null @@ -1,8 +0,0 @@ - -#import - -@interface BadgeView : UIImageView - -@property (nonatomic) NSInteger value; - -@end diff --git a/iphone/Maps/Classes/BadgeView.mm b/iphone/Maps/Classes/BadgeView.mm deleted file mode 100644 index 8dae6300ba..0000000000 --- a/iphone/Maps/Classes/BadgeView.mm +++ /dev/null @@ -1,33 +0,0 @@ -#import "BadgeView.h" -#import "UIColor+MapsMeColor.h" -#import "UIFont+MapsMeFonts.h" - -@implementation BadgeView - -- (void)setValue:(NSInteger)value -{ - [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; - self.hidden = value == 0; - - UIFont * font = [UIFont regular10]; - UIImage * image = [UIImage imageNamed:@"Badge"]; - CGFloat const textWidth = [@(value).stringValue sizeWithDrawSize:CGSizeMake(100, 20) font:font].width; - CGFloat const offset = 4; - CGFloat const imageDiameter = image.size.width; - - self.size = CGSizeMake(MAX(textWidth + 2 * offset, imageDiameter), imageDiameter); - self.image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(imageDiameter / 2, imageDiameter / 2, imageDiameter / 2, imageDiameter / 2)]; - - UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(offset, 0, textWidth, self.height)]; - label.backgroundColor = [UIColor clearColor]; - label.textAlignment = NSTextAlignmentCenter; - label.textColor = [UIColor white]; - label.font = font; - label.text = @(value).stringValue; - label.center = CGPointMake(self.width / 2, self.height / 2); - [self addSubview:label]; - - _value = value; -} - -@end diff --git a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.h b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.h index 51c7775286..8c6298f115 100644 --- a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.h +++ b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.h @@ -10,14 +10,14 @@ - (nonnull instancetype)initWithViewController:(nonnull UIViewController *)viewController; - (void)presentAlert:(routing::IRouter::ResultCode)type; -- (void)presentDownloaderAlertWithCountries:(vector const &)countries - routes:(vector const &)routes +- (void)presentDownloaderAlertWithCountries:(storage::TCountriesVec const &)countries + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(nonnull TMWMVoidBlock)block; - (void)presentRateAlert; - (void)presentFacebookAlert; - (void)presentPoint2PointAlertWithOkBlock:(nonnull TMWMVoidBlock)block needToRebuild:(BOOL)needToRebuild; -- (void)presentNeedMigrationAlertWithOkBlock:(nonnull TMWMVoidBlock)block; +- (void)presentUpdateMapsAlertWithOkBlock:(nonnull TMWMVoidBlock)block; - (void)presentRoutingDisclaimerAlert; - (void)presentDisabledLocationAlert; - (void)presentLocationAlert; diff --git a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm index a6322c9711..c0690f1de5 100644 --- a/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm +++ b/iphone/Maps/Classes/CustomAlert/AlertController/MWMAlertViewController.mm @@ -66,11 +66,6 @@ static NSString * const kAlertControllerNibIdentifier = @"MWMAlertViewController [self displayAlert:[MWMAlert point2PointAlertWithOkBlock:block needToRebuild:needToRebuild]]; } -- (void)presentNeedMigrationAlertWithOkBlock:(nonnull TMWMVoidBlock)block -{ - [self displayAlert:[MWMAlert needMigrationAlertWithOkBlock:block]]; -} - - (void)presentFacebookAlert { [self displayAlert:MWMAlert.facebookAlert]; @@ -106,8 +101,13 @@ static NSString * const kAlertControllerNibIdentifier = @"MWMAlertViewController [self displayAlert:[MWMAlert invalidUserNameOrPasswordAlert]]; } -- (void)presentDownloaderAlertWithCountries:(vector const &)countries - routes:(vector const &)routes +- (void)presentUpdateMapsAlertWithOkBlock:(nonnull TMWMVoidBlock)block +{ + [self displayAlert:[MWMAlert updateMapsAlertWithOkBlock:block]]; +} + +- (void)presentDownloaderAlertWithCountries:(storage::TCountriesVec const &)countries + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(TMWMVoidBlock)block { diff --git a/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.h b/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.h index 92dc4eba17..b51e61d004 100644 --- a/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.h +++ b/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.h @@ -7,8 +7,8 @@ @property (weak, nonatomic) MWMAlertViewController * alertController; + (MWMAlert *)alert:(routing::IRouter::ResultCode)type; -+ (MWMAlert *)downloaderAlertWithAbsentCountries:(vector const &)countries - routes:(vector const &)routes ++ (MWMAlert *)downloaderAlertWithAbsentCountries:(storage::TCountriesVec const &)countries + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(TMWMVoidBlock)block; + (MWMAlert *)rateAlert; @@ -23,7 +23,7 @@ + (MWMAlert *)internalErrorAlert; + (MWMAlert *)invalidUserNameOrPasswordAlert; + (MWMAlert *)point2PointAlertWithOkBlock:(TMWMVoidBlock)block needToRebuild:(BOOL)needToRebuild; -+ (MWMAlert *)needMigrationAlertWithOkBlock:(TMWMVoidBlock)block; ++ (MWMAlert *)updateMapsAlertWithOkBlock:(TMWMVoidBlock)block; - (void)close; - (void)setNeedsCloseAlertAfterEnterBackground; diff --git a/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.mm b/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.mm index dec8504384..859f51fb57 100644 --- a/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.mm +++ b/iphone/Maps/Classes/CustomAlert/BaseAlert/MWMAlert.mm @@ -8,6 +8,7 @@ #import "MWMPedestrianShareAlert.h" #import "MWMRateAlert.h" #import "MWMRoutingDisclaimerAlert.h" +#import "MWMUpdateMapsAlert.h" @implementation MWMAlert @@ -31,11 +32,6 @@ return [MWMDefaultAlert point2PointAlertWithOkBlock:block needToRebuild:needToRebuild]; } -+ (MWMAlert *)needMigrationAlertWithOkBlock:(TMWMVoidBlock)block -{ - return [MWMDefaultAlert needMigrationAlertWithOkBlock:block]; -} - + (MWMAlert *)routingDisclaimerAlertWithInitialOrientation:(UIInterfaceOrientation)orientation { return [MWMRoutingDisclaimerAlert alertWithInitialOrientation:orientation]; @@ -61,8 +57,8 @@ return [MWMDefaultAlert locationServiceNotSupportedAlert]; } -+ (MWMAlert *)downloaderAlertWithAbsentCountries:(vector const &)countries - routes:(vector const &)routes ++ (MWMAlert *)downloaderAlertWithAbsentCountries:(storage::TCountriesVec const &)countries + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(TMWMVoidBlock)block { diff --git a/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.h b/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.h index 929c5422b3..a08025d1d8 100644 --- a/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.h +++ b/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.h @@ -16,6 +16,5 @@ + (instancetype)noConnectionAlert; + (instancetype)locationServiceNotSupportedAlert; + (instancetype)point2PointAlertWithOkBlock:(TMWMVoidBlock)block needToRebuild:(BOOL)needToRebuild; -+ (instancetype)needMigrationAlertWithOkBlock:(TMWMVoidBlock)block; @end diff --git a/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.mm b/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.mm index 33acdee084..965c6e825a 100644 --- a/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.mm +++ b/iphone/Maps/Classes/CustomAlert/DefaultAlert/MWMDefaultAlert.mm @@ -136,15 +136,6 @@ static NSString * const kDefaultAlertNibName = @"MWMDefaultAlert"; } } -+ (instancetype)needMigrationAlertWithOkBlock:(TMWMVoidBlock)block -{ - return [self defaultAlertWithTitle:@"youve_been_asking" - message:@"migrate_and_split_mwms_message" - rightButtonTitle:@"delete_all" - leftButtonTitle:@"not_now" - rightButtonAction:block]; -} - + (instancetype)defaultAlertWithTitle:(nonnull NSString *)title message:(nullable NSString *)message rightButtonTitle:(nonnull NSString *)rightButtonTitle leftButtonTitle:(nullable NSString *)leftButtonTitle rightButtonAction:(nullable TMWMVoidBlock)action { [[Statistics instance] logEvent:kStatisticsEvent withParameters:@{kStatAction : kStatOpen}]; diff --git a/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.h b/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.h index a12b4c68c0..594c0c3c6a 100644 --- a/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.h +++ b/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.h @@ -5,8 +5,8 @@ @interface MWMDownloadTransitMapAlert : MWMAlert -+ (instancetype)downloaderAlertWithMaps:(vector const &)maps - routes:(vector const &)routes ++ (instancetype)downloaderAlertWithMaps:(storage::TCountriesVec const &)maps + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(TMWMVoidBlock)block; - (void)showDownloadDetail:(UIButton *)sender; diff --git a/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.mm b/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.mm index c11114d57c..fdb2dfce9a 100644 --- a/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.mm +++ b/iphone/Maps/Classes/CustomAlert/DownloadTransitMapsAlert/MWMDownloadTransitMapAlert.mm @@ -1,4 +1,3 @@ -#import "ActiveMapsVC.h" #import "Common.h" #import "MWMAlertViewController.h" #import "MWMDownloaderDialogCell.h" @@ -8,30 +7,34 @@ #import "UIColor+MapsMeColor.h" #import "UILabel+RuntimeAttributes.h" +#include "Framework.h" + @interface MWMDownloaderEntity : NSObject @property (copy, nonatomic) NSArray * titles; @property (copy, nonatomic) NSString * size; @property (nonatomic) BOOL isMapsFiles; -- (instancetype)initWithIndexes:(vector const &)indexes isMaps:(BOOL)isMaps; +- (instancetype)initWithIndexes:(storage::TCountriesVec const &)countriesVec isMaps:(BOOL)isMaps; @end @implementation MWMDownloaderEntity -- (instancetype)initWithIndexes:(vector const &)indexes isMaps:(BOOL)isMaps +- (instancetype)initWithIndexes:(storage::TCountriesVec const &)countriesVec isMaps:(BOOL)isMaps { self = [super init]; if (self) { - auto & a = GetFramework().GetCountryTree().GetActiveMapLayout(); NSMutableArray * titles = [@[] mutableCopy]; - uint64_t totalRoutingSize = 0; - for (auto const & i : indexes) + size_t totalRoutingSize = 0; + auto & s = GetFramework().Storage(); + for (auto const & countryId : countriesVec) { - [titles addObject:@(a.GetCountryName(i).c_str())]; - totalRoutingSize += a.GetCountrySize(i, isMaps ? MapOptions::MapWithCarRouting : MapOptions::CarRouting).second; + storage::NodeAttrs attrs; + s.GetNodeAttrs(countryId, attrs); + [titles addObject:@(attrs.m_nodeLocalName.c_str())]; + totalRoutingSize += attrs.m_mwmSize; } self.isMapsFiles = isMaps; self.titles = titles; @@ -61,8 +64,8 @@ static NSString * const kStatisticsEvent = @"Map download Alert"; @interface MWMDownloadTransitMapAlert () { - vector maps; - vector routes; + storage::TCountriesVec maps; + storage::TCountriesVec routes; } @property (weak, nonatomic) IBOutlet UILabel * titleLabel; @@ -83,8 +86,8 @@ static NSString * const kStatisticsEvent = @"Map download Alert"; @implementation MWMDownloadTransitMapAlert -+ (instancetype)downloaderAlertWithMaps:(vector const &)maps - routes:(vector const &)routes ++ (instancetype)downloaderAlertWithMaps:(storage::TCountriesVec const &)maps + routes:(storage::TCountriesVec const &)routes code:(routing::IRouter::ResultCode)code block:(TMWMVoidBlock)block { @@ -114,7 +117,7 @@ static NSString * const kStatisticsEvent = @"Map download Alert"; return alert; } -+ (instancetype)alertWithMaps:(vector const &)maps routes:(vector const &)routes ++ (instancetype)alertWithMaps:(storage::TCountriesVec const &)maps routes:(storage::TCountriesVec const &)routes { MWMDownloadTransitMapAlert * alert = [[[NSBundle mainBundle] loadNibNamed:kDownloadTransitMapAlertNibName owner:nil options:nil] firstObject]; NSMutableArray * missedFiles = [@[] mutableCopy]; @@ -160,8 +163,6 @@ static NSString * const kStatisticsEvent = @"Map download Alert"; { self.downloaderBlock(); [self close]; - ActiveMapsVC * activeMapsViewController = [[ActiveMapsVC alloc] init]; - [self.alertController.ownerViewController.navigationController pushViewController:activeMapsViewController animated:YES]; } - (void)showDownloadDetail:(UIButton *)sender diff --git a/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.h b/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.h new file mode 100644 index 0000000000..9a15bf7b36 --- /dev/null +++ b/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.h @@ -0,0 +1,7 @@ +#import "MWMAlert.h" + +@interface MWMUpdateMapsAlert : MWMAlert + ++ (instancetype)alertWithOkBlock:(TMWMVoidBlock)block; + +@end diff --git a/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.mm b/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.mm new file mode 100644 index 0000000000..8b1f739e5d --- /dev/null +++ b/iphone/Maps/Classes/CustomAlert/MWMUpdateAlert/MWMUpdateMapsAlert.mm @@ -0,0 +1,93 @@ +#import "Common.h" +#import "MWMUpdateMapsAlert.h" +#import "Statistics.h" + +static NSString * const kUpdateMapsAlertEventName = @"updateMapsAlertEvent"; +static NSString * const kUpdateMapsAlertNibName = @"MWMUpdateMapsAlert"; + +@interface MWMUpdateMapsAlert () + +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * containerWidth; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * containerHeight; + +@property (weak, nonatomic) IBOutlet UIImageView * image; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * imageMinHeight; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * imageHeight; + +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * titleTopOffset; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * titleImageOffset; + +@property (copy, nonatomic) TMWMVoidBlock okButtonAction; + +@end + +@implementation MWMUpdateMapsAlert + ++ (instancetype)alertWithOkBlock:(TMWMVoidBlock)block +{ + [Statistics.instance + logEvent:[NSString stringWithFormat:@"%@ - %@", kUpdateMapsAlertEventName, @"open"]]; + MWMUpdateMapsAlert * alert = [[[NSBundle mainBundle] loadNibNamed:kUpdateMapsAlertNibName + owner:self + options:nil] firstObject]; + alert.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + alert.okButtonAction = block; + return alert; +} + +- (void)setFrame:(CGRect)frame +{ + if (!isIOSVersionLessThan(8)) + [self updateForSize:frame.size]; + super.frame = frame; +} + +- (void)updateForSize:(CGSize)size +{ + CGSize const iPadSize = {520.0, 600.0}; + CGSize const newSize = IPAD ? iPadSize : size; + CGFloat const width = newSize.width; + CGFloat const height = newSize.height; + BOOL const hideImage = (self.imageHeight.multiplier * height <= self.imageMinHeight.constant); + self.titleImageOffset.priority = + hideImage ? UILayoutPriorityDefaultLow : UILayoutPriorityDefaultHigh; + self.image.hidden = hideImage; + self.containerWidth.constant = width; + self.containerHeight.constant = height; +} + +#pragma mark - Actions + +- (IBAction)updateAllMapsAcrion +{ + if (self.okButtonAction) + self.okButtonAction(); + [self close]; +} + +- (IBAction)notNowAction +{ + [self close]; +} + +#pragma mark - iOS 7 support methods + +- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation +{ + UIView * superview = self.superview ? self.superview : UIApplication.sharedApplication.keyWindow; + BOOL const isLandscape = UIInterfaceOrientationIsLandscape(orientation); + CGFloat const minDim = MIN(superview.width, superview.height); + CGFloat const maxDim = MAX(superview.width, superview.height); + CGFloat const height = isLandscape ? minDim : maxDim; + CGFloat const width = isLandscape ? maxDim : minDim; + self.bounds = {{}, {width, height}}; +} + +- (void)setBounds:(CGRect)bounds +{ + if (isIOSVersionLessThan(8)) + [self updateForSize:bounds.size]; + super.bounds = bounds; +} + +@end diff --git a/iphone/Maps/Classes/CustomViews/CircularProgress/MWMCircularProgressView.mm b/iphone/Maps/Classes/CustomViews/CircularProgress/MWMCircularProgressView.mm index 113dbced89..1fb46dc8e9 100644 --- a/iphone/Maps/Classes/CustomViews/CircularProgress/MWMCircularProgressView.mm +++ b/iphone/Maps/Classes/CustomViews/CircularProgress/MWMCircularProgressView.mm @@ -18,8 +18,8 @@ static inline CGFloat angleWithProgress(CGFloat progress) @property (nonatomic) CAShapeLayer * backgroundLayer; @property (nonatomic) CAShapeLayer * progressLayer; -@property (nonatomic, readonly) CGColorRef backgroundColor; -@property (nonatomic, readonly) CGColorRef progressColor; +@property (nonatomic, readonly) CGColorRef backgroundLayerColor; +@property (nonatomic, readonly) CGColorRef progressLayerColor; @property (nonatomic) NSMutableDictionary * images; @property (nonatomic) NSMutableDictionary * colors; @@ -93,8 +93,8 @@ static inline CGFloat angleWithProgress(CGFloat progress) { self.backgroundLayer.fillColor = self.progressLayer.fillColor = UIColor.clearColor.CGColor; self.backgroundLayer.lineWidth = self.progressLayer.lineWidth = kLineWidth; - self.backgroundLayer.strokeColor = self.backgroundColor; - self.progressLayer.strokeColor = self.progressColor; + self.backgroundLayer.strokeColor = self.backgroundLayerColor; + self.progressLayer.strokeColor = self.progressLayerColor; CGRect rect = CGRectInset(self.bounds, kLineWidth, kLineWidth); self.backgroundLayer.path = [UIBezierPath bezierPathWithOvalInRect:rect].CGPath; UIImage * normalImage = nil; @@ -203,7 +203,7 @@ static inline CGFloat angleWithProgress(CGFloat progress) [self refreshProgress]; } -- (CGColorRef)backgroundColor +- (CGColorRef)backgroundLayerColor { switch (self.state) { @@ -214,7 +214,7 @@ static inline CGFloat angleWithProgress(CGFloat progress) } } -- (CGColorRef)progressColor +- (CGColorRef)progressLayerColor { UIColor * color = self.colors[@(self.state)]; return color.CGColor; diff --git a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.h b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.h index 0c3c35894b..fa8feb0d66 100644 --- a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.h +++ b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.h @@ -1,3 +1,5 @@ +#import "MWMAlertViewController.h" + typedef NS_ENUM(NSUInteger, MWMDownloadMapRequestState) { MWMDownloadMapRequestStateDownload, @@ -5,7 +7,9 @@ typedef NS_ENUM(NSUInteger, MWMDownloadMapRequestState) MWMDownloadMapRequestStateRequestUnknownLocation }; -@protocol MWMDownloadMapRequestDelegate +@protocol MWMDownloadMapRequestProtocol + +@property (nonnull, nonatomic, readonly) MWMAlertViewController * alertController; - (void)stateUpdated:(enum MWMDownloadMapRequestState)state; - (void)selectMapsAction; @@ -16,7 +20,7 @@ typedef NS_ENUM(NSUInteger, MWMDownloadMapRequestState) - (nonnull instancetype)init __attribute__((unavailable("init is not available"))); - (nonnull instancetype)initWithParentView:(nonnull UIView *)parentView - delegate:(nonnull id )delegate; + delegate:(nonnull id )delegate; - (void)showRequest; diff --git a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.mm b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.mm index 18b5a20482..d7e671a4da 100644 --- a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.mm +++ b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequest.mm @@ -7,6 +7,8 @@ #import "Statistics.h" #include "Framework.h" + +#include "storage/country_info_getter.hpp" #include "storage/index.hpp" @interface MWMDownloadMapRequest () @@ -14,23 +16,24 @@ @property (nonatomic) IBOutlet MWMDownloadMapRequestView * rootView; @property (nonatomic) IBOutlet UILabel * mapTitleLabel; @property (nonatomic) IBOutlet UIButton * downloadMapButton; +@property (nonatomic) IBOutlet UIButton * downloadRoutesButton; @property (nonatomic) IBOutlet UIView * progressViewWrapper; @property (nonatomic) MWMCircularProgress * progressView; -@property (copy, nonatomic) NSString * mapSize; @property (copy, nonatomic) NSString * mapAndRouteSize; -@property (weak, nonatomic) id delegate; - -@property (nonatomic) storage::TIndex currentCountryIndex; +@property (weak, nonatomic) id delegate; @end @implementation MWMDownloadMapRequest +{ + storage::TCountryId m_countryId; +} - (nonnull instancetype)initWithParentView:(nonnull UIView *)parentView - delegate:(nonnull id )delegate + delegate:(nonnull id )delegate { self = [super init]; if (self) @@ -63,26 +66,29 @@ - (void)showRequest { auto & f = GetFramework(); - auto & activeMapLayout = f.GetCountryTree().GetActiveMapLayout(); - if (activeMapLayout.IsDownloadingActive()) + auto & s = f.Storage(); + if (s.IsDownloadInProgress()) { - self.currentCountryIndex = activeMapLayout.GetCurrentDownloadingCountryIndex(); + m_countryId = s.GetCurrentDownloadingCountryId(); self.progressView.state = MWMCircularProgressStateProgress; [self updateState:MWMDownloadMapRequestStateDownload]; } else { - self.currentCountryIndex = storage::TIndex(); - double lat, lon; - if ([[MapsAppDelegate theApp].m_locationManager getLat:lat Lon:lon]) - self.currentCountryIndex = f.GetCountryIndex(MercatorBounds::FromLatLon(lat, lon)); + // TODO (igrechuhin) Replace with invalid country id + m_countryId = storage::TCountryId(); + auto const & countryInfoGetter = f.CountryInfoGetter(); + LocationManager * locationManager = [MapsAppDelegate theApp].m_locationManager; + if (locationManager.lastLocationIsValid) + m_countryId = countryInfoGetter.GetRegionCountryId(locationManager.lastLocation.mercator); - if (self.currentCountryIndex.IsValid()) + // TODO (igrechuhin) Replace with real check + if (!m_countryId.empty()) { - self.mapTitleLabel.text = @(activeMapLayout.GetFormatedCountryName(self.currentCountryIndex).c_str()); - LocalAndRemoteSizeT const sizes = activeMapLayout.GetRemoteCountrySizes(self.currentCountryIndex); - self.mapSize = formattedSize(sizes.first); - self.mapAndRouteSize = formattedSize(sizes.first + sizes.second); + storage::NodeAttrs attrs; + s.GetNodeAttrs(m_countryId, attrs); + self.mapTitleLabel.text = @(attrs.m_nodeLocalName.c_str()); + self.mapAndRouteSize = @(attrs.m_downloadingMwmSize).stringValue; [self.downloadMapButton setTitle:[NSString stringWithFormat:@"%@ (%@)", L(@"downloader_download_map"), self.mapAndRouteSize] forState:UIControlStateNormal]; @@ -117,15 +123,15 @@ { [[Statistics instance] logEvent:kStatEventName(kStatDownloadRequest, kStatButton) withParameters:@{kStatValue : kStatProgress}]; - auto & activeMapLayout = GetFramework().GetCountryTree().GetActiveMapLayout(); + auto & s = GetFramework().Storage(); if (progress.state == MWMCircularProgressStateFailed) { - activeMapLayout.RetryDownloading(self.currentCountryIndex); + s.RetryDownloadNode(m_countryId); [self.progressView startSpinner:NO]; } else { - activeMapLayout.CancelDownloading(self.currentCountryIndex); + s.CancelDownloadNode(m_countryId); } [self showRequest]; } @@ -135,10 +141,21 @@ - (IBAction)downloadMapTouchUpInside:(nonnull UIButton *)sender { [[Statistics instance] logEvent:kStatEventName(kStatDownloadRequest, kStatDownloadMap)]; - GetFramework().GetCountryTree().GetActiveMapLayout().DownloadMap(self.currentCountryIndex, MapOptions::MapWithCarRouting); - self.progressView.progress = 0.0; - [self showRequest]; - [self.progressView startSpinner:NO]; + [MapsAppDelegate downloadCountry:m_countryId alertController:self.delegate.alertController onDownload:^ + { + self.progressView.progress = 0.0; + [self showRequest]; + [self.progressView startSpinner:NO]; + }]; +} + +- (IBAction)downloadRoutesTouchUpInside:(nonnull UIButton *)sender +{ + [[Statistics instance] logEvent:kStatEventName(kStatDownloadRequest, kStatDownloadRoute)]; + sender.selected = !sender.selected; + [self.downloadMapButton setTitle:[NSString stringWithFormat:@"%@ (%@)", + L(@"downloader_download_map"), self.mapAndRouteSize] + forState:UIControlStateNormal]; } - (IBAction)selectMapTouchUpInside:(nonnull UIButton *)sender diff --git a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequestView.mm b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequestView.mm index e99dceacc1..9c7730bb2d 100644 --- a/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequestView.mm +++ b/iphone/Maps/Classes/CustomViews/DownloadMapRequest/MWMDownloadMapRequestView.mm @@ -5,9 +5,12 @@ @interface MWMDownloadMapRequestView () @property (weak, nonatomic) IBOutlet UILabel * mapTitleLabel; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * verticalFreeSpace; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * bottomSpacing; @property (weak, nonatomic) IBOutlet NSLayoutConstraint * unknownPositionLabelBottomOffset; @property (weak, nonatomic) IBOutlet UIButton * downloadMapButton; +@property (weak, nonatomic) IBOutlet UIButton * downloadRoutesButton; @property (weak, nonatomic) IBOutlet UILabel * undefinedLocationLabel; @property (weak, nonatomic) IBOutlet UIButton * selectAnotherMapButton; @property (weak, nonatomic) IBOutlet UIView * progressViewWrapper; @@ -31,10 +34,14 @@ BOOL const isLandscape = superview.height > superview.width; if (IPAD || isLandscape) { + self.verticalFreeSpace.constant = 44.0; + self.bottomSpacing.constant = 24.0; self.unknownPositionLabelBottomOffset.constant = 22.0; } else { + self.verticalFreeSpace.constant = 20.0; + self.bottomSpacing.constant = 8.0; self.unknownPositionLabelBottomOffset.constant = 18.0; CGFloat const iPhone6LandscapeHeight = 375.0; if (self.width < iPhone6LandscapeHeight) @@ -62,6 +69,7 @@ self.progressViewWrapper.hidden = NO; self.mapTitleLabel.hidden = NO; self.downloadMapButton.hidden = YES; + self.downloadRoutesButton.hidden = YES; self.undefinedLocationLabel.hidden = YES; self.selectAnotherMapButton.hidden = YES; break; @@ -69,6 +77,7 @@ self.progressViewWrapper.hidden = YES; self.mapTitleLabel.hidden = NO; self.downloadMapButton.hidden = NO; + self.downloadRoutesButton.hidden = NO; self.undefinedLocationLabel.hidden = YES; self.selectAnotherMapButton.hidden = NO; [self.selectAnotherMapButton setTitle:L(@"search_select_other_map") forState:UIControlStateNormal]; @@ -81,6 +90,7 @@ self.progressViewWrapper.hidden = YES; self.mapTitleLabel.hidden = YES; self.downloadMapButton.hidden = YES; + self.downloadRoutesButton.hidden = YES; self.undefinedLocationLabel.hidden = NO; self.selectAnotherMapButton.hidden = NO; [self.selectAnotherMapButton setTitle:L(@"search_select_map") forState:UIControlStateNormal]; diff --git a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm index 28d5e1f90a..c5d3d3e66f 100644 --- a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm +++ b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm @@ -8,6 +8,12 @@ #include "editor/server_api.hpp" +#include "indexer/osm_editor.hpp" + +#include "platform/platform.hpp" + +#include "base/logging.hpp" + namespace { NSString * const kWebViewAuthSegue = @"Authorization2WebViewAuthorizationSegue"; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm index 9438097d7b..441c13d688 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm @@ -309,7 +309,10 @@ - (void)updateBadge { - self.downloadBadge.hidden = GetFramework().GetCountryTree().GetActiveMapLayout().GetOutOfDateCount() == 0; + auto & s = GetFramework().Storage(); + storage::Storage::UpdateInfo updateInfo{}; + s.GetUpdateInfo(s.GetRootId(), updateInfo); + self.downloadBadge.hidden = (updateInfo.m_numberOfMwmFilesToUpdate == 0); } #pragma mark - Properties @@ -326,51 +329,51 @@ if (_state == state) return; [self refreshLayout]; + BOOL updateMenuButton = YES; switch (state) { - case MWMBottomMenuStateHidden: - break; - case MWMBottomMenuStateInactive: - if (MapsAppDelegate.theApp.routingPlaneMode == MWMRoutingPlaneModeNone) - _leftBound = 0.0; - [self updateBadge]; - self.p2pButton.hidden = self.searchButton.hidden = self.bookmarksButton.hidden = NO; - self.layoutDuration = - (_state == MWMBottomMenuStateCompact && !IPAD) ? 0.0 : kDefaultAnimationDuration; - if (_state != MWMBottomMenuStateGo && _state != MWMBottomMenuStatePlanning && - _state != MWMBottomMenuStateText) + case MWMBottomMenuStateHidden: + updateMenuButton = NO; + break; + case MWMBottomMenuStateInactive: + { + if (MapsAppDelegate.theApp.routingPlaneMode == MWMRoutingPlaneModeNone) + _leftBound = 0.0; + [self updateBadge]; + self.p2pButton.hidden = self.searchButton.hidden = self.bookmarksButton.hidden = NO; + self.layoutDuration = (_state == MWMBottomMenuStateCompact && !IPAD) ? 0.0 : kDefaultAnimationDuration; + updateMenuButton = (_state != MWMBottomMenuStateGo && _state != MWMBottomMenuStatePlanning && + _state != MWMBottomMenuStateText); + break; + } + case MWMBottomMenuStateActive: + self.restoreState = _state; [self updateMenuButtonFromState:_state toState:state]; - break; - case MWMBottomMenuStateActive: - self.restoreState = _state; - [self updateMenuButtonFromState:_state toState:state]; - self.additionalButtons.hidden = NO; - self.bookmarksButton.hidden = NO; - self.p2pButton.hidden = NO; - self.searchButton.hidden = NO; - self.separator.hidden = NO; - break; - case MWMBottomMenuStateCompact: - self.layoutDuration = IPAD ? kDefaultAnimationDuration : 0.0; - [self updateMenuButtonFromState:_state toState:state]; - break; - case MWMBottomMenuStatePlanning: - self.goButton.enabled = NO; - self.goButton.hidden = NO; - [self updateMenuButtonFromState:_state toState:state]; - break; - case MWMBottomMenuStateGo: - self.goButton.enabled = YES; - self.goButton.hidden = NO; - [self updateMenuButtonFromState:_state toState:state]; - break; - case MWMBottomMenuStateText: - self.streetLabel.font = [UIFont medium16]; - self.streetLabel.hidden = NO; - self.streetLabel.textColor = [UIColor blackSecondaryText]; - [self updateMenuButtonFromState:_state toState:state]; - break; + self.additionalButtons.hidden = NO; + self.bookmarksButton.hidden = NO; + self.p2pButton.hidden = NO; + self.searchButton.hidden = NO; + self.separator.hidden = NO; + break; + case MWMBottomMenuStateCompact: + self.layoutDuration = IPAD ? kDefaultAnimationDuration : 0.0; + break; + case MWMBottomMenuStatePlanning: + self.goButton.enabled = NO; + self.goButton.hidden = NO; + break; + case MWMBottomMenuStateGo: + self.goButton.enabled = YES; + self.goButton.hidden = NO; + break; + case MWMBottomMenuStateText: + self.streetLabel.font = [UIFont medium16]; + self.streetLabel.hidden = NO; + self.streetLabel.textColor = [UIColor blackSecondaryText]; + break; } + if (updateMenuButton) + [self updateMenuButtonFromState:_state toState:state]; _state = state; } diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm index 1ca06080b5..01538cc962 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm @@ -38,7 +38,7 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) MWMBottomMenuViewCellCount }; -@interface MWMBottomMenuViewController () +@interface MWMBottomMenuViewController () @property (weak, nonatomic) MapViewController * controller; @property (weak, nonatomic) IBOutlet UICollectionView * buttonsCollectionView; @@ -77,6 +77,7 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) selector:@selector(searchStateWillChange:) name:kSearchStateWillChangeNotification object:nil]; + [[MWMFrameworkListener listener] addObserver:self]; } return self; } @@ -163,14 +164,14 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) self.state = MWMBottomMenuStateGo; } -#pragma mark - Location button +#pragma mark - MWMFrameworkMyPositionObserver -- (void)onLocationStateModeChanged:(location::EMyPositionMode)state +- (void)processMyPositionStateModeChange:(location::EMyPositionMode)mode { UIButton * locBtn = self.locationButton; [locBtn.imageView stopAnimating]; [locBtn.imageView.layer removeAllAnimations]; - switch (state) + switch (mode) { case location::MODE_UNKNOWN_POSITION: case location::MODE_NOT_FOLLOW: @@ -206,9 +207,11 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) break; } } - [self refreshLocationButtonState:state]; + [self refreshLocationButtonState:mode]; } +#pragma mark - Location button + - (void)refreshLocationButtonState:(location::EMyPositionMode)state { dispatch_async(dispatch_get_main_queue(), ^ @@ -275,11 +278,12 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) { case MWMBottomMenuViewCellDownload: { - NSUInteger const badgeCount = - GetFramework().GetCountryTree().GetActiveMapLayout().GetOutOfDateCount(); + auto & s = GetFramework().Storage(); + storage::Storage::UpdateInfo updateInfo{}; + s.GetUpdateInfo(s.GetRootId(), updateInfo); [cell configureWithImageName:@"ic_menu_download" label:L(@"download_maps") - badgeCount:badgeCount]; + badgeCount:updateInfo.m_numberOfMwmFilesToUpdate]; } break; case MWMBottomMenuViewCellSettings: diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.h b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.h index c08ec03a29..fcc1b7f9d1 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.h @@ -14,7 +14,6 @@ @property (nonatomic) MWMBottomMenuState menuState; @property (nonatomic, readonly) MWMNavigationDashboardState navigationState; @property (nonatomic) BOOL searchHidden; -@property (nonatomic) location::EMyPositionMode myPositionMode; - (instancetype)init __attribute__((unavailable("init is not available"))); - (instancetype)initWithParentController:(MapViewController *)controller; @@ -34,7 +33,7 @@ @property (nonatomic, readonly) BOOL isDirectionViewShown; - (void)dismissPlacePage; -- (void)showPlacePageWithUserMark:(unique_ptr)userMark; +- (void)showPlacePage; - (void)reloadPlacePage; #pragma mark - MWMNavigationDashboardManager @@ -46,6 +45,5 @@ - (void)routingPrepare; - (void)routingNavigation; - (void)handleRoutingError; -- (void)setRouteBuildingProgress:(CGFloat)progress; @end diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm index 09e54492cf..227face609 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm @@ -1,11 +1,9 @@ #import "Common.h" -#import "CountryTreeVC.h" #import "EAGLView.h" -#import "MapsAppDelegate.h" -#import "MapViewController.h" -#import "MWMAlertViewController.h" #import "MWMAPIBar.h" +#import "MWMAlertViewController.h" #import "MWMBottomMenuViewController.h" +#import "MWMButton.h" #import "MWMMapViewControlsManager.h" #import "MWMPlacePageViewManager.h" #import "MWMPlacePageViewManagerDelegate.h" @@ -13,6 +11,8 @@ #import "MWMSearchManager.h" #import "MWMSearchView.h" #import "MWMZoomButtons.h" +#import "MapViewController.h" +#import "MapsAppDelegate.h" #import "RouteState.h" #import "Statistics.h" @@ -24,7 +24,8 @@ extern NSString * const kAlohalyticsTapEventKey; @interface MWMMapViewControlsManager ()< MWMPlacePageViewManagerProtocol, MWMNavigationDashboardManagerProtocol, - MWMSearchManagerProtocol, MWMSearchViewProtocol, MWMBottomMenuControllerProtocol, MWMRoutePreviewDataSource> + MWMSearchManagerProtocol, MWMSearchViewProtocol, MWMBottomMenuControllerProtocol, + MWMRoutePreviewDataSource, MWMFrameworkRouteBuilderObserver> @property (nonatomic) MWMZoomButtons * zoomButtons; @property (nonatomic) MWMBottomMenuViewController * menuController; @@ -45,12 +46,6 @@ extern NSString * const kAlohalyticsTapEventKey; @implementation MWMMapViewControlsManager -- (void)setMyPositionMode:(location::EMyPositionMode)mode -{ - _myPositionMode = mode; - [self.menuController onLocationStateModeChanged:mode]; -} - - (instancetype)initWithParentController:(MapViewController *)controller { if (!controller) @@ -71,9 +66,38 @@ extern NSString * const kAlohalyticsTapEventKey; self.routeSource = m.lastLocationIsValid ? MWMRoutePoint(m.lastLocation.mercator) : MWMRoutePoint::MWMRoutePointZero(); self.routeDestination = MWMRoutePoint::MWMRoutePointZero(); + + [[MWMFrameworkListener listener] addObserver:self]; return self; } +#pragma mark - MWMFrameworkRouteBuilderObserver + +- (void)processRouteBuilderEvent:(routing::IRouter::ResultCode)code + countries:(storage::TCountriesVec const &)absentCountries + routes:(storage::TCountriesVec const &)absentRoutes +{ + switch (code) + { + case routing::IRouter::ResultCode::NoError: + { + [self.navigationManager setRouteBuilderProgress:100]; + self.searchHidden = YES; + break; + } + case routing::IRouter::Cancelled: + break; + default: + [self handleRoutingError]; + break; + } +} + +- (void)processRouteBuilderProgress:(CGFloat)progress +{ + [self.navigationManager setRouteBuilderProgress:progress]; +} + #pragma mark - Layout - (void)refreshLayout @@ -127,9 +151,9 @@ extern NSString * const kAlohalyticsTapEventKey; [self.placePageManager hidePlacePage]; } -- (void)showPlacePageWithUserMark:(unique_ptr)userMark +- (void)showPlacePage { - [self.placePageManager showPlacePageWithUserMark:move(userMark)]; + [self.placePageManager showPlacePage]; [self refreshHelperPanels:UIInterfaceOrientationIsLandscape(self.ownerController.interfaceOrientation)]; } @@ -145,6 +169,11 @@ extern NSString * const kAlohalyticsTapEventKey; #pragma mark - MWMSearchManagerProtocol +- (MWMAlertViewController *)alertController +{ + return self.ownerController.alertController; +} + - (void)searchViewDidEnterState:(MWMSearchManagerState)state { if (state == MWMSearchManagerStateHidden) @@ -189,7 +218,7 @@ extern NSString * const kAlohalyticsTapEventKey; [self.navigationManager.routePreview removeFromSuperview]; [self didCancelRouting]; self.navigationManager.state = MWMNavigationDashboardStateHidden; - static_cast(self.menuController.p2pButton).selected = NO; + self.menuController.p2pButton.selected = NO; }]; } } @@ -207,7 +236,7 @@ extern NSString * const kAlohalyticsTapEventKey; - (void)actionDownloadMaps { - [self.ownerController downloadMaps]; + [self.ownerController openMapsDownloader]; } #pragma mark - MWMBottomMenuControllerProtocol @@ -285,7 +314,7 @@ extern NSString * const kAlohalyticsTapEventKey; - (void)buildRouteFrom:(MWMRoutePoint const &)from to:(MWMRoutePoint const &)to { - static_cast(self.menuController.p2pButton).selected = YES; + self.menuController.p2pButton.selected = YES; self.navigationManager.routePreview.extendButton.selected = NO; MapsAppDelegate.theApp.routingPlaneMode = MWMRoutingPlaneModePlacePage; if (from == MWMRoutePoint::MWMRoutePointZero()) @@ -413,7 +442,7 @@ extern NSString * const kAlohalyticsTapEventKey; self.navigationManager.state = MWMNavigationDashboardStatePlanning; [self.menuController setPlanning]; GetFramework().BuildRoute(self.routeSource.Point(), self.routeDestination.Point(), 0 /* timeoutSec */); - [self.navigationManager setRouteBuildingProgress:0.]; + [self.navigationManager setRouteBuilderProgress:0.]; } - (BOOL)isPossibleToBuildRoute @@ -448,14 +477,13 @@ extern NSString * const kAlohalyticsTapEventKey; { MWMAlertViewController * controller = [[MWMAlertViewController alloc] initWithViewController:self.ownerController]; LocationManager * manager = MapsAppDelegate.theApp.m_locationManager; - auto const m = self.myPositionMode; + auto const m = [MWMFrameworkListener listener].myPositionMode; BOOL const needToRebuild = manager.lastLocationIsValid && m != location::MODE_PENDING_POSITION && - m != location::MODE_UNKNOWN_POSITION && - !isDestinationMyPosition; + m != location::MODE_UNKNOWN_POSITION && !isDestinationMyPosition; + m2::PointD const locationPoint = manager.lastLocation.mercator; [controller presentPoint2PointAlertWithOkBlock:^ { - m2::PointD const locationPoint = manager.lastLocation.mercator; self.routeSource = MWMRoutePoint(locationPoint); [self buildRoute]; } needToRebuild:needToRebuild]; @@ -568,11 +596,6 @@ extern NSString * const kAlohalyticsTapEventKey; [[MapsAppDelegate theApp] enableStandby]; } -- (void)setRouteBuildingProgress:(CGFloat)progress -{ - [self.navigationManager setRouteBuildingProgress:progress]; -} - #pragma mark - MWMRoutePreviewDataSource - (NSString *)source diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.h b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.h index 074506e856..4ce982e800 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.h @@ -2,6 +2,8 @@ @protocol MWMSearchDownloadProtocol +@property (nonnull, nonatomic, readonly) MWMAlertViewController * alertController; + - (void)selectMapsAction; @end diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.mm index 879c3fec51..7e79d575af 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/DownloadView/MWMSearchDownloadViewController.mm @@ -2,7 +2,7 @@ #import "MWMSearchDownloadView.h" #import "MWMSearchDownloadViewController.h" -@interface MWMSearchDownloadViewController () +@interface MWMSearchDownloadViewController () @property (nonatomic) IBOutlet UIView * downloadRequestHolder; @@ -101,7 +101,12 @@ [UIApplication.sharedApplication.keyWindow endEditing:YES]; } -#pragma mark - MWMDownloadMapRequestDelegate +#pragma mark - MWMDownloadMapRequestProtocol + +- (MWMAlertViewController *)alertController +{ + return self.delegate.alertController; +} - (void)stateUpdated:(enum MWMDownloadMapRequestState)state { diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.h b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.h index a47515718c..69276deee9 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.h @@ -1,3 +1,4 @@ +#import "MWMAlertViewController.h" #import "MWMSearchTextField.h" #import "MWMSearchView.h" @@ -11,6 +12,8 @@ typedef NS_ENUM(NSUInteger, MWMSearchManagerState) @protocol MWMSearchManagerProtocol +@property (nonnull, nonatomic, readonly) MWMAlertViewController * alertController; + - (void)searchViewDidEnterState:(MWMSearchManagerState)state; - (void)actionDownloadMaps; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.mm index 652d6f61bc..07b6cf2cf7 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/MWMSearchManager.mm @@ -1,7 +1,7 @@ #import "LocationManager.h" #import "MapsAppDelegate.h" -#import "MapsObservers.h" #import "MWMConsole.h" +#import "MWMFrameworkListener.h" #import "MWMRoutingProtocol.h" #import "MWMSearchDownloadViewController.h" #import "MWMSearchManager.h" @@ -12,16 +12,17 @@ #import "3party/Alohalytics/src/alohalytics_objc.h" +#include "storage/storage_helpers.hpp" + #include "Framework.h" -#include "map/active_maps_layout.hpp" extern NSString * const kAlohalyticsTapEventKey; extern NSString * const kSearchStateWillChangeNotification = @"SearchStateWillChangeNotification"; extern NSString * const kSearchStateKey = @"SearchStateKey"; @interface MWMSearchManager () + MWMSearchTabbedViewProtocol, MWMSearchTabButtonsViewProtocol, + UITextFieldDelegate, MWMFrameworkStorageObserver> @property (weak, nonatomic) UIView * parentView; @property (nonatomic) IBOutlet MWMSearchView * rootView; @@ -40,7 +41,6 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; @implementation MWMSearchManager { - unique_ptr m_mapsObserver; int m_mapsObserverSlotId; } @@ -55,6 +55,7 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; self.rootView.delegate = delegate; self.parentView = view; self.state = MWMSearchManagerStateHidden; + [[MWMFrameworkListener listener] addObserver:self]; } return self; } @@ -200,24 +201,17 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; self.state = MWMSearchManagerStateHidden; } -#pragma mark - MWMSearchDownloadMapRequest +#pragma mark - MWMFrameworkStorageObserver -- (void)selectMapsAction +- (void)processCountryEvent:(storage::TCountryId const &)countryId { - [self.delegate actionDownloadMaps]; -} - -#pragma mark - ActiveMapsObserverProtocol - -- (void)countryStatusChangedAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group -{ - auto const status = - GetFramework().GetCountryTree().GetActiveMapLayout().GetCountryStatus(group, position); + using namespace storage; [self updateTopController]; - if (status == TStatus::EDownloadFailed) + NodeAttrs attrs; + GetFramework().Storage().GetNodeAttrs(countryId, attrs); + if (IsDownloadFailed(attrs.m_status)) [self.downloadController setDownloadFailed]; - if (self.state == MWMSearchManagerStateTableSearch || - self.state == MWMSearchManagerStateMapSearch) + if (self.state == MWMSearchManagerStateTableSearch || self.state == MWMSearchManagerStateMapSearch) { NSString * text = self.searchTextField.text; if (text.length > 0) @@ -226,18 +220,28 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; } } -- (void)countryDownloadingProgressChanged:(LocalAndRemoteSizeT const &)progress - atPosition:(int)position - inGroup:(ActiveMapsLayout::TGroup const &)group +- (void)processCountry:(storage::TCountryId const &)countryId progress:(storage::LocalAndRemoteSizeT const &)progress { + using namespace storage; CGFloat const normProgress = (CGFloat)progress.first / progress.second; - ActiveMapsLayout & activeMapLayout = GetFramework().GetCountryTree().GetActiveMapLayout(); - NSString * countryName = - @(activeMapLayout.GetFormatedCountryName(activeMapLayout.GetCoreIndex(group, position)) - .c_str()); + NodeAttrs attrs; + GetFramework().Storage().GetNodeAttrs(countryId, attrs); + NSString * countryName = @(attrs.m_nodeLocalName.c_str()); [self.downloadController downloadProgress:normProgress countryName:countryName]; } +#pragma mark - MWMSearchDownloadProtocol + +- (MWMAlertViewController *)alertController +{ + return self.delegate.alertController; +} + +- (void)selectMapsAction +{ + [self.delegate actionDownloadMaps]; +} + #pragma mark - State changes - (void)updateTopController @@ -252,17 +256,9 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; [self.navigationController setViewControllers:viewControllers animated:NO]; } -- (void)changeFromHiddenState -{ - __weak auto weakSelf = self; - m_mapsObserver.reset(new ActiveMapsObserver(weakSelf)); - m_mapsObserverSlotId = GetFramework().GetCountryTree().GetActiveMapLayout().AddListener(m_mapsObserver.get()); -} - - (void)changeToHiddenState { [self endSearch]; - GetFramework().GetCountryTree().GetActiveMapLayout().RemoveListener(m_mapsObserverSlotId); [self.tabbedController resetSelectedTab]; self.tableViewController = nil; self.downloadController = nil; @@ -290,7 +286,7 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; - (void)changeToMapSearchState { - Framework & f = GetFramework(); + auto & f = GetFramework(); UITextField * textField = self.searchTextField; string const locale = textField.textInputMode.primaryLanguage ? @@ -318,11 +314,11 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; - (UIViewController *)topController { - auto & f = GetFramework(); - auto & activeMapLayout = f.GetCountryTree().GetActiveMapLayout(); - int const outOfDate = activeMapLayout.GetCountInGroup(storage::ActiveMapsLayout::TGroup::EOutOfDate); - int const upToDate = activeMapLayout.GetCountInGroup(storage::ActiveMapsLayout::TGroup::EUpToDate); - BOOL const haveMap = outOfDate > 0 || upToDate > 0; + using namespace storage; + auto & s = GetFramework().Storage(); + TCountriesVec downloadedCountries; + s.GetDownloadedChildren(s.GetRootId(), downloadedCountries); + BOOL const haveMap = (downloadedCountries.size() != 0); return haveMap ? self.tabbedController : self.downloadController; } @@ -377,8 +373,6 @@ extern NSString * const kSearchStateKey = @"SearchStateKey"; userInfo:@{ kSearchStateKey : @(state) }]; - if (_state == MWMSearchManagerStateHidden) - [self changeFromHiddenState]; _state = state; switch (state) { diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm index 2832249974..67ee74c947 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchCommonCell.mm @@ -5,6 +5,8 @@ #import "UIColor+MapsMeColor.h" #import "UIFont+MapsMeFonts.h" +#include "Framework.h" + #include "geometry/mercator.hpp" #include "platform/measurement_utils.hpp" diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.h b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.h index acab3cf193..360acecb55 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.h @@ -3,6 +3,13 @@ #import "MWMSearchTextField.h" #import "MWMViewController.h" +#include "Framework.h" + +namespace search +{ + class Result; +} + @protocol MWMSearchTableViewProtocol @property (weak, nonatomic) MWMSearchTextField * searchTextField; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.mm index a4f345c4fd..34b204925e 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/TableView/MWMSearchTableViewController.mm @@ -9,7 +9,7 @@ #import "Statistics.h" #import "ToastView.h" -#include "std/vector.hpp" +#include "search/params.hpp" static NSString * const kTableShowOnMapCell = @"MWMSearchShowOnMapCell"; static NSString * const kTableSuggestionCell = @"MWMSearchSuggestionCell"; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h index d6a46e8ffd..74a442b7df 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h @@ -46,7 +46,7 @@ typedef NS_ENUM(NSUInteger, MWMNavigationDashboardState) - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation; - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator; -- (void)setRouteBuildingProgress:(CGFloat)progress; +- (void)setRouteBuilderProgress:(CGFloat)progress; - (void)showHelperPanels; - (void)hideHelperPanels; - (void)setupActualRoute; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm index 727220b5a7..43c6468a13 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm @@ -271,7 +271,7 @@ extern NSString * const kTTSStatusWasChangedNotification; #pragma mark - MWMRoutePreview -- (void)setRouteBuildingProgress:(CGFloat)progress +- (void)setRouteBuilderProgress:(CGFloat)progress { [self.activeRouteTypeButton setProgress:progress / 100.]; } diff --git a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.h b/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.h deleted file mode 100644 index b7152e4b97..0000000000 --- a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.h +++ /dev/null @@ -1,15 +0,0 @@ -@protocol MWMSearchDownloadMapRequest - -- (void)selectMapsAction; - -@end - -@interface MWMSearchDownloadMapRequest : NSObject - -- (nonnull instancetype)init __attribute__((unavailable("init is not available"))); -- (nonnull instancetype)initWithParentView:(nonnull UIView *)parentView delegate:(nonnull id )delegate; - -- (void)downloadProgress:(CGFloat)progress countryName:(nonnull NSString *)countryName; -- (void)setDownloadFailed; - -@end diff --git a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.mm b/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.mm deleted file mode 100644 index 85475b78d9..0000000000 --- a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.mm +++ /dev/null @@ -1,98 +0,0 @@ -#import "MWMDownloadMapRequest.h" -#import "MWMSearchDownloadMapRequest.h" -#import "MWMSearchDownloadMapRequestView.h" - -@interface MWMSearchDownloadMapRequest () - -@property (nonatomic) IBOutlet MWMSearchDownloadMapRequestView * rootView; -@property (nonatomic) IBOutlet UIView * downloadRequestHolder; - -@property (nonatomic) MWMDownloadMapRequest * downloadRequest; -@property (strong, nonatomic) IBOutlet UIButton * dimButton; - -@property (weak, nonatomic) id delegate; - -@end - -@implementation MWMSearchDownloadMapRequest - -- (nonnull instancetype)initWithParentView:(nonnull UIView *)parentView delegate:(nonnull id )delegate -{ - self = [super init]; - if (self) - { - [[NSBundle mainBundle] loadNibNamed:self.class.className owner:self options:nil]; - self.delegate = delegate; - [parentView addSubview:self.rootView]; - self.downloadRequest = [[MWMDownloadMapRequest alloc] initWithParentView:self.downloadRequestHolder delegate:self]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillhide:) name:UIKeyboardWillHideNotification object:nil]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self.rootView removeFromSuperview]; -} - -- (void)keyboardWillShow:(nonnull NSNotification *)aNotification -{ - UIButton * dim = self.dimButton; - dim.hidden = NO; - dim.alpha = 0.0; - NSNumber * duration = aNotification.userInfo[UIKeyboardAnimationDurationUserInfoKey]; - [UIView animateWithDuration:duration.floatValue animations:^ - { - dim.alpha = 1.0; - }]; -} - -- (void)keyboardWillhide:(nonnull NSNotification *)aNotification -{ - UIButton * dim = self.dimButton; - dim.alpha = 1.0; - NSNumber * duration = aNotification.userInfo[UIKeyboardAnimationDurationUserInfoKey]; - [UIView animateWithDuration:duration.floatValue animations:^ - { - dim.alpha = 0.0; - } - completion:^(BOOL finished) - { - dim.hidden = YES; - }]; -} - -#pragma mark - Process control - -- (void)downloadProgress:(CGFloat)progress countryName:(nonnull NSString *)countryName -{ - [self.downloadRequest downloadProgress:progress countryName:countryName]; -} - -- (void)setDownloadFailed -{ - [self.downloadRequest setDownloadFailed]; -} - -#pragma mark - Actions - -- (IBAction)dimTouchUpInside:(nonnull UIButton *)sender -{ - [UIApplication.sharedApplication.keyWindow endEditing:YES]; -} - -#pragma mark - MWMDownloadMapRequestDelegate - -- (void)stateUpdated:(enum MWMDownloadMapRequestState)state -{ - [self.rootView show:state == MWMDownloadMapRequestStateDownload ? MWMSearchDownloadMapRequestViewStateProgress : MWMSearchDownloadMapRequestViewStateRequest]; -} - -- (void)selectMapsAction -{ - [self.delegate selectMapsAction]; -} - -@end diff --git a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.xib b/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.xib deleted file mode 100644 index 97dee6d0bd..0000000000 --- a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequest.xib +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.h b/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.h deleted file mode 100644 index db1a861d8f..0000000000 --- a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.h +++ /dev/null @@ -1,15 +0,0 @@ - -typedef NS_ENUM(NSUInteger, MWMSearchDownloadMapRequestViewState) -{ - MWMSearchDownloadMapRequestViewStateProgress, - MWMSearchDownloadMapRequestViewStateRequest -}; - -@interface MWMSearchDownloadMapRequestView : SolidTouchView - -- (instancetype)initWithFrame:(CGRect)frame __attribute__((unavailable("initWithFrame is not available"))); -- (instancetype)init __attribute__((unavailable("init is not available"))); - -- (void)show:(enum MWMSearchDownloadMapRequestViewState)state; - -@end diff --git a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.mm b/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.mm deleted file mode 100644 index 1ee638f74e..0000000000 --- a/iphone/Maps/Classes/CustomViews/SearchDownloadMapRequest/MWMSearchDownloadMapRequestView.mm +++ /dev/null @@ -1,66 +0,0 @@ -#import "Common.h" -#import "MWMSearchDownloadMapRequest.h" -#import "MWMSearchDownloadMapRequestView.h" - -@interface MWMSearchDownloadMapRequestView () - -@property (weak, nonatomic) IBOutlet UILabel * hint; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint * hintTopOffset; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint * downloadRequestWrapperBottomOffset; -@property (weak, nonatomic) IBOutlet UIView * downloadRequestWrapper; -@property (weak, nonatomic) IBOutlet MWMSearchDownloadMapRequest * owner; - -@property (nonatomic) enum MWMSearchDownloadMapRequestViewState state; - -@end - -@implementation MWMSearchDownloadMapRequestView - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) - { - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - } - return self; -} - -- (void)show:(enum MWMSearchDownloadMapRequestViewState)state -{ - [self layoutIfNeeded]; - self.state = state; - [self update]; - [UIView animateWithDuration:kDefaultAnimationDuration animations:^{ [self layoutIfNeeded]; }]; -} - -- (void)layoutSubviews -{ - UIView * superview = self.superview; - self.frame = superview.bounds; - [self update]; - [super layoutSubviews]; -} - -- (void)update -{ - UIView * superview = self.superview; - BOOL const isPortrait = superview.width < superview.height; - if (self.state == MWMSearchDownloadMapRequestViewStateProgress) - { - self.hint.alpha = 0.0; - CGFloat const offset = 0.5 * self.height - self.downloadRequestWrapper.height; - self.downloadRequestWrapperBottomOffset.constant = offset; - } - else - { - self.hint.alpha = 1.0; - self.downloadRequestWrapperBottomOffset.constant = 0.0; - } - CGFloat const topOffset = (IPAD || isPortrait ? 40.0 : 12.0); - // @TODO Remove on new search! - CGFloat const someCrazyTopOfsetForCurrentSearchViewImplementation = 64.0; - self.hintTopOffset.constant = someCrazyTopOfsetForCurrentSearchViewImplementation + topOffset; -} - -@end diff --git a/iphone/Maps/Classes/Framework.cpp b/iphone/Maps/Classes/Framework/Framework.cpp similarity index 100% rename from iphone/Maps/Classes/Framework.cpp rename to iphone/Maps/Classes/Framework/Framework.cpp diff --git a/iphone/Maps/Classes/Framework.h b/iphone/Maps/Classes/Framework/Framework.h similarity index 100% rename from iphone/Maps/Classes/Framework.h rename to iphone/Maps/Classes/Framework/Framework.h diff --git a/iphone/Maps/Classes/Framework/MWMFrameworkListener.h b/iphone/Maps/Classes/Framework/MWMFrameworkListener.h new file mode 100644 index 0000000000..7ad1334162 --- /dev/null +++ b/iphone/Maps/Classes/Framework/MWMFrameworkListener.h @@ -0,0 +1,12 @@ +#import "MWMFrameworkObservers.h" + +@interface MWMFrameworkListener : NSObject + ++ (MWMFrameworkListener *)listener; + +@property (nonatomic, readonly) location::EMyPositionMode myPositionMode; +@property (nonatomic) UserMark const * userMark; + +- (void)addObserver:(id)observer; + +@end diff --git a/iphone/Maps/Classes/Framework/MWMFrameworkListener.mm b/iphone/Maps/Classes/Framework/MWMFrameworkListener.mm new file mode 100644 index 0000000000..5dc6d5baaa --- /dev/null +++ b/iphone/Maps/Classes/Framework/MWMFrameworkListener.mm @@ -0,0 +1,186 @@ +#import "MapsAppDelegate.h" +#import "MWMFrameworkListener.h" + +#include "Framework.h" + +namespace +{ +using TObserver = id; +using TRouteBuildingObserver = id; +using TMyPositionObserver = id; +using TUsermarkObserver = id; +using TStorageObserver = id; + +using TObservers = NSHashTable<__kindof TObserver>; + +Protocol * pRouteBuildingObserver = @protocol(MWMFrameworkRouteBuilderObserver); +Protocol * pMyPositionObserver = @protocol(MWMFrameworkMyPositionObserver); +Protocol * pUserMarkObserver = @protocol(MWMFrameworkUserMarkObserver); +Protocol * pStorageObserver = @protocol(MWMFrameworkStorageObserver); + +using TLoopBlock = void (^)(__kindof TObserver observer); + +void loopWrappers(TObservers * observers, TLoopBlock block) +{ + dispatch_async(dispatch_get_main_queue(), ^ + { + for (TObserver observer in observers) + { + if (observer) + block(observer); + } + }); +} +} // namespace + +@interface MWMFrameworkListener () + +@property (nonatomic) TObservers * routeBuildingObservers; +@property (nonatomic) TObservers * myPositionObservers; +@property (nonatomic) TObservers * userMarkObservers; +@property (nonatomic) TObservers * storageObservers; + +@property (nonatomic, readwrite) location::EMyPositionMode myPositionMode; + +@end + +@implementation MWMFrameworkListener +{ + unique_ptr m_userMark; +} + ++ (MWMFrameworkListener *)listener +{ + return MapsAppDelegate.theApp.frameworkListener; +} + +- (instancetype)init +{ + self = [super init]; + if (self) + { + _routeBuildingObservers = [TObservers weakObjectsHashTable]; + _myPositionObservers = [TObservers weakObjectsHashTable]; + _userMarkObservers = [TObservers weakObjectsHashTable]; + _storageObservers = [TObservers weakObjectsHashTable]; + + [self registerRouteBuilderListener]; + [self registerMyPositionListener]; + [self registerUserMarkObserver]; + [self registerStorageObserver]; + } + return self; +} + +- (void)addObserver:(TObserver)observer +{ + dispatch_async(dispatch_get_main_queue(), ^ + { + if ([observer conformsToProtocol:pRouteBuildingObserver]) + [self.routeBuildingObservers addObject:observer]; + if ([observer conformsToProtocol:pMyPositionObserver]) + [self.myPositionObservers addObject:observer]; + if ([observer conformsToProtocol:pUserMarkObserver]) + [self.userMarkObservers addObject:observer]; + if ([observer conformsToProtocol:pStorageObserver]) + [self.storageObservers addObject:observer]; + }); +} + +#pragma mark - MWMFrameworkRouteBuildingObserver + +- (void)registerRouteBuilderListener +{ + using namespace routing; + using namespace storage; + TObservers * observers = self.routeBuildingObservers; + auto & f = GetFramework(); + f.SetRouteBuildingListener([observers](IRouter::ResultCode code, TCountriesVec const & absentCountries, TCountriesVec const & absentRoutes) + { + loopWrappers(observers, ^(TRouteBuildingObserver observer) + { + [observer processRouteBuilderEvent:code countries:absentCountries routes:absentRoutes]; + }); + }); + f.SetRouteProgressListener([observers](float progress) + { + loopWrappers(observers, ^(TRouteBuildingObserver observer) + { + if ([observer respondsToSelector:@selector(processRouteBuilderProgress:)]) + [observer processRouteBuilderProgress:progress]; + }); + }); +} + +#pragma mark - MWMFrameworkMyPositionObserver + +- (void)registerMyPositionListener +{ + TObservers * observers = self.myPositionObservers; + auto & f = GetFramework(); + f.SetMyPositionModeListener([self, observers](location::EMyPositionMode mode) + { + self.myPositionMode = mode; + loopWrappers(observers, ^(TMyPositionObserver observer) + { + [observer processMyPositionStateModeChange:mode]; + }); + }); +} + +#pragma mark - MWMFrameworkUserMarkObserver + +- (void)registerUserMarkObserver +{ + TObservers * observers = self.userMarkObservers; + auto & f = GetFramework(); + f.SetUserMarkActivationListener([self, observers](unique_ptr mark) + { + m_userMark = move(mark); + loopWrappers(observers, ^(TUsermarkObserver observer) + { + [observer processUserMarkActivation:self->m_userMark->GetUserMark()]; + }); + }); +} + +#pragma mark - MWMFrameworkStorageObserver + +- (void)registerStorageObserver +{ + TObservers * observers = self.storageObservers; + auto & f = GetFramework(); + auto & s = f.Storage(); + s.Subscribe([observers](storage::TCountryId const & countryId) + { + loopWrappers(observers, ^(TStorageObserver observer) + { + [observer processCountryEvent:countryId]; + }); + }, + [observers](storage::TCountryId const & countryId, storage::LocalAndRemoteSizeT const & progress) + { + loopWrappers(observers, ^(TStorageObserver observer) + { + if ([observer respondsToSelector:@selector(processCountry:progress:)]) + [observer processCountry:countryId progress:progress]; + }); + }); +} + +#pragma mark - Properties + +- (UserMark const *)userMark +{ + return m_userMark ? m_userMark->GetUserMark() : nullptr; +} + +- (void)setUserMark:(const UserMark *)userMark +{ + if (userMark) + m_userMark.reset(new UserMarkCopy(userMark, false)); + else + m_userMark = nullptr; +} + +@end diff --git a/iphone/Maps/Classes/Framework/MWMFrameworkObservers.h b/iphone/Maps/Classes/Framework/MWMFrameworkObservers.h new file mode 100644 index 0000000000..4814b4e294 --- /dev/null +++ b/iphone/Maps/Classes/Framework/MWMFrameworkObservers.h @@ -0,0 +1,43 @@ +#include "map/user_mark.hpp" +#include "platform/location.hpp" +#include "routing/router.hpp" +#include "storage/index.hpp" +#include "storage/storage_defines.hpp" + +@protocol MWMFrameworkObserver + +@end + +@protocol MWMFrameworkRouteBuilderObserver + +- (void)processRouteBuilderEvent:(routing::IRouter::ResultCode)code + countries:(storage::TCountriesVec const &)absentCountries + routes:(storage::TCountriesVec const &)absentRoutes; + +@optional + +- (void)processRouteBuilderProgress:(CGFloat)progress; + +@end + +@protocol MWMFrameworkMyPositionObserver + +- (void)processMyPositionStateModeChange:(location::EMyPositionMode)mode; + +@end + +@protocol MWMFrameworkUserMarkObserver + +- (void)processUserMarkActivation:(UserMark const *)mark; + +@end + +@protocol MWMFrameworkStorageObserver + +- (void)processCountryEvent:(storage::TCountryId const &)countryId; + +@optional + +- (void)processCountry:(storage::TCountryId const &)countryId progress:(storage::LocalAndRemoteSizeT const &)progress; + +@end diff --git a/iphone/Maps/Classes/LocalNotificationManager.mm b/iphone/Maps/Classes/LocalNotificationManager.mm index d76b77c623..f5d027f30f 100644 --- a/iphone/Maps/Classes/LocalNotificationManager.mm +++ b/iphone/Maps/Classes/LocalNotificationManager.mm @@ -11,19 +11,26 @@ #include "Framework.h" #include "platform/platform.hpp" +#include "storage/country_info_getter.hpp" #include "storage/storage_defines.hpp" +#include "storage/storage_helpers.hpp" -static NSString * const kDownloadMapActionName = @"DownloadMapAction"; +namespace +{ +NSString * const kDownloadMapActionKey = @"DownloadMapActionKey"; +NSString * const kDownloadMapActionName = @"DownloadMapActionName"; +NSString * const kDownloadMapCountryId = @"DownloadMapCountryId"; -static NSString * const kFlagsKey = @"DownloadMapNotificationFlags"; -static double constexpr kRepeatedNotificationIntervalInSeconds = 3 * 30 * 24 * 60 * 60; // three months +NSString * const kFlagsKey = @"DownloadMapNotificationFlags"; + +NSTimeInterval constexpr kRepeatedNotificationIntervalInSeconds = 3 * 30 * 24 * 60 * 60; // three months +} // namespace using namespace storage; @interface LocalNotificationManager () @property (nonatomic) CLLocationManager * locationManager; -@property (nonatomic) TIndex countryIndex; @property (copy, nonatomic) CompletionHandler downloadMapCompletionHandler; @property (weak, nonatomic) NSTimer * timer; @@ -50,13 +57,20 @@ using namespace storage; - (void)processNotification:(UILocalNotification *)notification onLaunch:(BOOL)onLaunch { NSDictionary * userInfo = [notification userInfo]; - if ([userInfo[@"Action"] isEqualToString:kDownloadMapActionName]) + if ([userInfo[kDownloadMapActionKey] isEqualToString:kDownloadMapActionName]) { [[Statistics instance] logEvent:@"'Download Map' Notification Clicked"]; - [[MapsAppDelegate theApp].mapViewController.navigationController popToRootViewControllerAnimated:NO]; + MapViewController * mapViewController = [MapsAppDelegate theApp].mapViewController; + [mapViewController.navigationController popToRootViewControllerAnimated:NO]; - TIndex const index = TIndex([userInfo[@"Group"] intValue], [userInfo[@"Country"] intValue], [userInfo[@"Region"] intValue]); - [self downloadCountryWithIndex:index]; + NSString * notificationCountryId = userInfo[kDownloadMapCountryId]; + TCountryId const countryId = notificationCountryId.UTF8String; + [MapsAppDelegate downloadCountry:countryId alertController:mapViewController.alertController onDownload:^ + { + auto & f = GetFramework(); + double const defaultZoom = 10; + f.ShowRect(f.GetCountryBounds(countryId), defaultZoom); + }]; } } @@ -65,11 +79,16 @@ using namespace storage; - (void)showDownloadMapNotificationIfNeeded:(CompletionHandler)completionHandler { NSTimeInterval const completionTimeIndent = 2.0; - NSTimeInterval const backgroundTimeRemaining = UIApplication.sharedApplication.backgroundTimeRemaining - completionTimeIndent; + NSTimeInterval const backgroundTimeRemaining = + UIApplication.sharedApplication.backgroundTimeRemaining - completionTimeIndent; if ([CLLocationManager locationServicesEnabled] && backgroundTimeRemaining > 0.0) { self.downloadMapCompletionHandler = completionHandler; - self.timer = [NSTimer scheduledTimerWithTimeInterval:backgroundTimeRemaining target:self selector:@selector(timerSelector:) userInfo:nil repeats:NO]; + self.timer = [NSTimer scheduledTimerWithTimeInterval:backgroundTimeRemaining + target:self + selector:@selector(timerSelector:) + userInfo:nil + repeats:NO]; [self.locationManager startUpdatingLocation]; } else @@ -79,24 +98,26 @@ using namespace storage; } } -- (void)markNotificationShowingForIndex:(TIndex)index +- (BOOL)shouldShowNotificationForCountryId:(NSString *)countryId { - NSMutableDictionary * flags = [[[NSUserDefaults standardUserDefaults] objectForKey:kFlagsKey] mutableCopy]; - if (!flags) - flags = [[NSMutableDictionary alloc] init]; - - flags[[self flagStringForIndex:index]] = [NSDate date]; - - NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; - [userDefaults setObject:flags forKey:kFlagsKey]; - [userDefaults synchronize]; + if (!countryId || countryId.length == 0) + return NO; + NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; + NSDictionary * flags = [ud objectForKey:kFlagsKey]; + NSDate * lastShowDate = flags[countryId]; + return !lastShowDate || + [[NSDate date] timeIntervalSinceDate:lastShowDate] > kRepeatedNotificationIntervalInSeconds; } -- (BOOL)shouldShowNotificationForIndex:(TIndex)index +- (void)markNotificationShownForCountryId:(NSString *)countryId { - NSDictionary * flags = [[NSUserDefaults standardUserDefaults] objectForKey:kFlagsKey]; - NSDate * lastShowDate = flags[[self flagStringForIndex:index]]; - return !lastShowDate || [[NSDate date] timeIntervalSinceDate:lastShowDate] > kRepeatedNotificationIntervalInSeconds; + NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary * flags = [[ud objectForKey:kFlagsKey] mutableCopy]; + if (!flags) + flags = [NSMutableDictionary dictionary]; + flags[countryId] = [NSDate date]; + [ud setObject:flags forKey:kFlagsKey]; + [ud synchronize]; } - (void)timerSelector:(id)sender @@ -106,30 +127,6 @@ using namespace storage; [self performCompletionHandler:UIBackgroundFetchResultFailed]; } -- (void)downloadCountryWithIndex:(TIndex)index -{ - /// @todo Fix this logic after Framework -> CountryTree -> ActiveMapLayout refactoring. - /// Call download via Framework. - Framework & f = GetFramework(); - f.GetActiveMaps()->DownloadMap(index, MapOptions::Map); - double const defaultZoom = 10; - f.ShowRect(f.GetCountryBounds(index), defaultZoom); -} - -- (NSString *)flagStringForIndex:(TIndex)index -{ - return [NSString stringWithFormat:@"%i_%i_%i", index.m_group, index.m_country, index.m_region]; -} - -- (TIndex)indexWithFlagString:(NSString *)flag -{ - NSArray * components = [flag componentsSeparatedByString:@"_"]; - if ([components count] == 3) - return TIndex([components[0] intValue], [components[1] intValue], [components[2] intValue]); - - return TIndex(); -} - - (void)performCompletionHandler:(UIBackgroundFetchResult)result { if (!self.downloadMapCompletionHandler) @@ -151,7 +148,8 @@ using namespace storage; return _locationManager; } -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations +- (void)locationManager:(CLLocationManager *)manager + didUpdateLocations:(NSArray *)locations { [self.timer invalidate]; [self.locationManager stopUpdatingLocation]; @@ -162,33 +160,35 @@ using namespace storage; BOOL const onWiFi = (Platform::ConnectionStatus() == Platform::EConnectionType::CONNECTION_WIFI); if (inBackground && onWiFi) { - Framework & f = GetFramework(); CLLocation * lastLocation = [locations lastObject]; - TIndex const index = f.GetCountryIndex(lastLocation.mercator); - - if (index.IsValid() && [self shouldShowNotificationForIndex:index]) + auto const & mercator = lastLocation.mercator; + auto & f = GetFramework(); + auto const & countryInfoGetter = f.CountryInfoGetter(); + if (!IsPointCoveredByDownloadedMaps(mercator, f.Storage(), countryInfoGetter)) { - TStatus const status = f.GetCountryStatus(index); - if (status == TStatus::ENotDownloaded) + NSString * countryId = @(countryInfoGetter.GetRegionCountryId(mercator).c_str()); + if ([self shouldShowNotificationForCountryId:countryId]) { - [self markNotificationShowingForIndex:index]; - + [self markNotificationShownForCountryId:countryId]; + UILocalNotification * notification = [[UILocalNotification alloc] init]; notification.alertAction = L(@"download"); notification.alertBody = L(@"download_map_notification"); notification.soundName = UILocalNotificationDefaultSoundName; - notification.userInfo = @{@"Action" : kDownloadMapActionName, @"Group" : @(index.m_group), @"Country" : @(index.m_country), @"Region" : @(index.m_region)}; - + notification.userInfo = + @{kDownloadMapActionKey : kDownloadMapActionName, kDownloadMapCountryId : countryId}; + UIApplication * application = [UIApplication sharedApplication]; [application presentLocalNotificationNow:notification]; - [Alohalytics logEvent:@"suggestedToDownloadMissingMapForCurrentLocation" atLocation:lastLocation]; + [Alohalytics logEvent:@"suggestedToDownloadMissingMapForCurrentLocation" + atLocation:lastLocation]; flurryEventName = @"'Download Map' Notification Scheduled"; result = UIBackgroundFetchResultNewData; } } } - [[Statistics instance] logEvent:flurryEventName withParameters:@{@"WiFi" : @(onWiFi)}]; + [[Statistics instance] logEvent:flurryEventName withParameters:@{ @"WiFi" : @(onWiFi) }]; [self performCompletionHandler:result]; } diff --git a/iphone/Maps/Classes/LocationPredictor.mm b/iphone/Maps/Classes/LocationPredictor.mm index 1a39793210..a7935ea4a6 100644 --- a/iphone/Maps/Classes/LocationPredictor.mm +++ b/iphone/Maps/Classes/LocationPredictor.mm @@ -36,7 +36,7 @@ namespace return self; } --(void)setMode:(location::EMyPositionMode) mode +-(void)setMode:(location::EMyPositionMode)mode { m_generatePredictions = (mode == location::MODE_ROTATE_AND_FOLLOW); if (mode < location::MODE_NOT_FOLLOW) diff --git a/iphone/Maps/Classes/MWMBasePlacePageView.mm b/iphone/Maps/Classes/MWMBasePlacePageView.mm index fcbfec597b..de900b195f 100644 --- a/iphone/Maps/Classes/MWMBasePlacePageView.mm +++ b/iphone/Maps/Classes/MWMBasePlacePageView.mm @@ -1,4 +1,5 @@ #import "MWMBasePlacePageView.h" +#import "MWMFrameworkListener.h" #import "MWMPlacePage.h" #import "MWMPlacePageActionBar.h" #import "MWMPlacePageBookmarkCell.h" @@ -193,7 +194,7 @@ enum class AttributePosition BOOL const isMyPosition = type == MWMPlacePageEntityTypeMyPosition; BOOL const isHeadingAvaible = [CLLocationManager headingAvailable]; using namespace location; - EMyPositionMode const mode = self.ownerPlacePage.manager.myPositionMode; + auto const mode = [MWMFrameworkListener listener].myPositionMode; BOOL const noLocation = (mode == EMyPositionMode::MODE_UNKNOWN_POSITION || mode == EMyPositionMode::MODE_PENDING_POSITION); self.distanceLabel.hidden = noLocation || isMyPosition; BOOL const hideDirection = noLocation || isMyPosition || !isHeadingAvaible; diff --git a/iphone/Maps/Classes/MWMBookmarkDescriptionViewController.mm b/iphone/Maps/Classes/MWMBookmarkDescriptionViewController.mm index acccfbd624..d38099ad13 100644 --- a/iphone/Maps/Classes/MWMBookmarkDescriptionViewController.mm +++ b/iphone/Maps/Classes/MWMBookmarkDescriptionViewController.mm @@ -21,9 +21,6 @@ typedef NS_ENUM(NSUInteger, BookmarkDescriptionState) @property (weak, nonatomic) IBOutlet NSLayoutConstraint * textViewBottomOffset; -@property (nonatomic) UIBarButtonItem * leftButton; -@property (nonatomic) UIBarButtonItem * rightButton; - @property (weak, nonatomic) MWMPlacePageViewManager * manager; @property (nonatomic) BookmarkDescriptionState state; @@ -58,10 +55,7 @@ typedef NS_ENUM(NSUInteger, BookmarkDescriptionState) self.state = BookmarkDescriptionStateEditText; if (self.iPadOwnerNavigationController) - { - UIBarButtonItem * leftButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton]; - [self.navigationItem setLeftBarButtonItem:leftButton]; - } + [self showBackButton]; } - (void)viewWillAppear:(BOOL)animated @@ -137,22 +131,26 @@ typedef NS_ENUM(NSUInteger, BookmarkDescriptionState) - (void)configureNavigationBarForEditing { - self.leftButton = [[UIBarButtonItem alloc] initWithTitle:L(@"cancel") style:UIBarButtonItemStylePlain target:self action:@selector(cancelTap)]; - self.rightButton = [[UIBarButtonItem alloc] initWithTitle:L(@"done") style:UIBarButtonItemStylePlain target:self action:@selector(doneTap)]; - [self setupButtons]; + self.navigationItem.leftBarButtonItem = + [[UIBarButtonItem alloc] initWithTitle:L(@"cancel") + style:UIBarButtonItemStylePlain + target:self + action:@selector(cancelTap)]; + self.navigationItem.rightBarButtonItem = + [[UIBarButtonItem alloc] initWithTitle:L(@"done") + style:UIBarButtonItemStylePlain + target:self + action:@selector(doneTap)]; } - (void)configureNavigationBarForView { - self.leftButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton]; - self.rightButton = [[UIBarButtonItem alloc] initWithTitle:L(@"edit") style:UIBarButtonItemStylePlain target:self action:@selector(editTap)]; - [self setupButtons]; -} - -- (void)setupButtons -{ - [self.navigationItem setLeftBarButtonItem:self.leftButton]; - [self.navigationItem setRightBarButtonItem:self.rightButton]; + [self showBackButton]; + self.navigationItem.rightBarButtonItem = + [[UIBarButtonItem alloc] initWithTitle:L(@"edit") + style:UIBarButtonItemStylePlain + target:self + action:@selector(editTap)]; } - (void)cancelTap @@ -217,17 +215,4 @@ typedef NS_ENUM(NSUInteger, BookmarkDescriptionState) return YES; } -#pragma mark - Buttons - -- (UIButton *)backButton -{ - UIImage * backImage = [UIImage imageNamed:@"ic_nav_bar_back"]; - CGFloat const imageSide = backImage.size.width; - UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(0., 0., imageSide, imageSide)]; - [button setImage:backImage forState:UIControlStateNormal]; - [button addTarget:self action:@selector(backTap) forControlEvents:UIControlEventTouchUpInside]; - button.imageEdgeInsets = UIEdgeInsetsMake(0., -32., 0., 0.); - return button; -} - @end diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.h b/iphone/Maps/Classes/MWMPlacePageEntity.h index 6a0ccc215d..879801af41 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.h +++ b/iphone/Maps/Classes/MWMPlacePageEntity.h @@ -36,12 +36,6 @@ using MWMPlacePageCellTypeValueMap = map; @class MWMPlacePageViewManager; -@protocol MWMPlacePageEntityProtocol - -- (UserMark const *)userMark; - -@end - @interface MWMPlacePageEntity : NSObject + (NSString *)makeMWMCuisineString:(NSSet *)cuisines; @@ -67,7 +61,6 @@ using MWMPlacePageCellTypeValueMap = map; @property (nonatomic, readonly) ms::LatLon latlon; -- (instancetype)initWithDelegate:(id)delegate; - (void)synchronize; - (void)toggleCoordinateSystem; diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.mm b/iphone/Maps/Classes/MWMPlacePageEntity.mm index 6c02e3dc94..5b7d965fca 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.mm +++ b/iphone/Maps/Classes/MWMPlacePageEntity.mm @@ -1,3 +1,4 @@ +#import "MWMFrameworkListener.h" #import "MWMPlacePageEntity.h" #import "MWMPlacePageViewManager.h" #import "MapViewController.h" @@ -58,7 +59,7 @@ void initFieldsMap() @interface MWMPlacePageEntity () -@property (weak, nonatomic) id delegate; + @property (nonatomic, readwrite) BOOL canEditObject; @end @@ -87,13 +88,11 @@ void initFieldsMap() return [localizedCuisines componentsJoinedByString:kMWMCuisineSeparator]; } -- (instancetype)initWithDelegate:(id)delegate +- (instancetype)init { - NSAssert(delegate, @"delegate can not be nil."); self = [super init]; if (self) { - _delegate = delegate; initFieldsMap(); [self config]; } @@ -102,7 +101,7 @@ void initFieldsMap() - (void)config { - UserMark const * mark = self.delegate.userMark; + UserMark const * mark = [MWMFrameworkListener listener].userMark; _latlon = mark->GetLatLon(); using Type = UserMark::Type; switch (mark->GetMarkType()) @@ -264,7 +263,7 @@ void initFieldsMap() - (void)processStreets { - FeatureType * feature = self.delegate.userMark->GetFeature(); + FeatureType * feature = [MWMFrameworkListener listener].userMark->GetFeature(); if (!feature) return; @@ -283,7 +282,7 @@ void initFieldsMap() - (void)setEditableTypes { - FeatureType * feature = self.delegate.userMark->GetFeature(); + FeatureType const * feature = [MWMFrameworkListener listener].userMark->GetFeature(); if (!feature) return; @@ -311,7 +310,7 @@ void initFieldsMap() - (void)saveEditedCells:(MWMPlacePageCellTypeValueMap const &)cells { - FeatureType * feature = self.delegate.userMark->GetFeature(); + FeatureType * feature = [MWMFrameworkListener listener].userMark->GetFeature(); NSAssert(feature != nullptr, @"Feature is null"); if (!feature) return; diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.h b/iphone/Maps/Classes/MWMPlacePageViewManager.h index d61e1103ac..76b172dc08 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.h +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.h @@ -11,11 +11,10 @@ @property (nonatomic) CGFloat topBound; @property (nonatomic) CGFloat leftBound; @property (nonatomic, readonly) BOOL isDirectionViewShown; -@property (nonatomic, readonly) location::EMyPositionMode myPositionMode; - (instancetype)initWithViewController:(UIViewController *)viewController delegate:(id)delegate; -- (void)showPlacePageWithUserMark:(unique_ptr)userMark; +- (void)showPlacePage; - (void)reloadPlacePage; - (void)refreshPlacePage; - (void)mwm_refreshUI; diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.mm b/iphone/Maps/Classes/MWMPlacePageViewManager.mm index 66258da77b..97e719d537 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.mm @@ -5,6 +5,7 @@ #import "MWMAPIBar.h" #import "MWMBasePlacePageView.h" #import "MWMDirectionView.h" +#import "MWMFrameworkListener.h" #import "MWMiPadPlacePage.h" #import "MWMiPhoneLandscapePlacePage.h" #import "MWMiPhonePortraitPlacePage.h" @@ -30,10 +31,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) MWMPlacePageManagerStateOpen }; -@interface MWMPlacePageViewManager () -{ - unique_ptr m_userMark; -} +@interface MWMPlacePageViewManager () @property (weak, nonatomic) UIViewController * ownerViewController; @property (nonatomic, readwrite) MWMPlacePageEntity * entity; @@ -67,30 +65,30 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (void)dismissPlacePage { - if (!m_userMark) + MWMFrameworkListener * listener = [MWMFrameworkListener listener]; + if (!listener.userMark) return; [self.delegate placePageDidClose]; self.state = MWMPlacePageManagerStateClosed; [self.placePage dismiss]; [[MapsAppDelegate theApp].m_locationManager stop:self]; - m_userMark = nullptr; + listener.userMark = nullptr; GetFramework().DeactivateUserMark(); self.placePage = nil; } -- (void)showPlacePageWithUserMark:(unique_ptr)userMark +- (void)showPlacePage { - NSAssert(userMark, @"userMark can not be nil."); - m_userMark = move(userMark); [[MapsAppDelegate theApp].m_locationManager start:self]; [self reloadPlacePage]; } - (void)reloadPlacePage { - if (!m_userMark) + MWMFrameworkListener * listener = [MWMFrameworkListener listener]; + if (!listener.userMark) return; - self.entity = [[MWMPlacePageEntity alloc] initWithDelegate:self]; + self.entity = [[MWMPlacePageEntity alloc] init]; self.state = MWMPlacePageManagerStateOpen; if (IPAD) [self setPlacePageForiPad]; @@ -99,13 +97,6 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) [self configPlacePage]; } -#pragma mark - MWMPlacePageEntityProtocol - -- (UserMark const *)userMark -{ - return m_userMark->GetUserMark(); -} - #pragma mark - Layout - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation @@ -219,14 +210,16 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatBuildRoute) withParameters:@{kStatValue : kStatDestination}]; [Alohalytics logEvent:kAlohalyticsTapEventKey withValue:@"ppRoute"]; - m2::PointD const & destination = m_userMark->GetUserMark()->GetPivot(); + MWMFrameworkListener * listener = [MWMFrameworkListener listener]; + m2::PointD const & destination = listener.userMark->GetPivot(); m2::PointD const myPosition([MapsAppDelegate theApp].m_locationManager.lastLocation.mercator); using namespace location; - EMyPositionMode mode = self.myPositionMode; - [self.delegate buildRouteFrom:mode != EMyPositionMode::MODE_UNKNOWN_POSITION && mode != EMyPositionMode::MODE_PENDING_POSITION ? - MWMRoutePoint(myPosition) : - MWMRoutePoint::MWMRoutePointZero() - to:{destination, self.placePage.basePlacePageView.titleLabel.text}]; + auto const mode = listener.myPositionMode; + [self.delegate buildRouteFrom:mode != EMyPositionMode::MODE_UNKNOWN_POSITION && + mode != EMyPositionMode::MODE_PENDING_POSITION + ? MWMRoutePoint(myPosition) + : MWMRoutePoint::MWMRoutePointZero() + to:{destination, self.placePage.basePlacePageView.titleLabel.text}]; } - (void)routeFrom @@ -249,7 +242,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (MWMRoutePoint)target { - UserMark const * m = m_userMark->GetUserMark(); + UserMark const * m = [MWMFrameworkListener listener].userMark; m2::PointD const & org = m->GetPivot(); return m->GetMarkType() == UserMark::Type::MY_POSITION ? MWMRoutePoint(org) : @@ -274,7 +267,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (void)apiBack { [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatAPI)]; - ApiMarkPoint const * p = static_cast(m_userMark->GetUserMark()); + ApiMarkPoint const * p = static_cast([MWMFrameworkListener listener].userMark); NSURL * url = [NSURL URLWithString:@(GetFramework().GenerateApiBackUrl(*p).c_str())]; [[UIApplication sharedApplication] openURL:url]; [self.delegate apiBack]; @@ -284,8 +277,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) { BookmarkCategory * category = GetFramework().GetBmCategory(bac.first); BookmarkCategory::Guard guard(*category); - UserMark const * bookmark = guard.m_controller.GetUserMark(bac.second); - m_userMark.reset(new UserMarkCopy(bookmark, false)); + [MWMFrameworkListener listener].userMark = guard.m_controller.GetUserMark(bac.second); } - (void)editPlace @@ -300,8 +292,9 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) withParameters:@{kStatValue : kStatAdd}]; Framework & f = GetFramework(); BookmarkData data = BookmarkData(self.entity.title.UTF8String, f.LastEditedBMType()); + MWMFrameworkListener * listener = [MWMFrameworkListener listener]; size_t const categoryIndex = f.LastEditedBMCategory(); - m2::PointD const mercator = m_userMark->GetUserMark()->GetPivot(); + m2::PointD const mercator = listener.userMark->GetPivot(); size_t const bookmarkIndex = f.GetBookmarkManager().AddBookmark(categoryIndex, mercator, data); self.entity.bac = make_pair(categoryIndex, bookmarkIndex); self.entity.type = MWMPlacePageEntityTypeBookmark; @@ -312,7 +305,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) // TODO(AlexZ): Refactor bookmarks code together to hide this code in the Framework/Drape. // UI code should never know about any guards, pointers to UserMark etc. const_cast(bookmark)->SetFeature(f.GetFeatureAtPoint(mercator)); - m_userMark.reset(new UserMarkCopy(bookmark, false)); + listener.userMark = bookmark; [NSNotificationCenter.defaultCenter postNotificationName:kBookmarksChangedNotification object:nil userInfo:nil]; @@ -336,8 +329,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) // TODO(AlexZ): SetFeature is called in GetAddressMark here. // UI code should never know about any guards, pointers to UserMark etc. - PoiMarkPoint const * poi = f.GetAddressMark(bookmark->GetPivot()); - m_userMark.reset(new UserMarkCopy(poi, false)); + [MWMFrameworkListener listener].userMark = f.GetAddressMark(bookmark->GetPivot()); if (bookmarkCategory) { { @@ -380,11 +372,12 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (NSString *)distance { CLLocation * location = [MapsAppDelegate theApp].m_locationManager.lastLocation; - if (!location || !m_userMark) + UserMark const * userMark = [MWMFrameworkListener listener].userMark; + if (!location || !userMark) return @""; string distance; CLLocationCoordinate2D const coord = location.coordinate; - ms::LatLon const target = MercatorBounds::ToLatLon(m_userMark->GetUserMark()->GetPivot()); + ms::LatLon const target = MercatorBounds::ToLatLon(userMark->GetPivot()); MeasurementUtils::FormatDistance(ms::DistanceOnEarth(coord.latitude, coord.longitude, target.lat, target.lon), distance); return @(distance.c_str()); @@ -393,10 +386,11 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (void)onCompassUpdate:(location::CompassInfo const &)info { CLLocation * location = [MapsAppDelegate theApp].m_locationManager.lastLocation; - if (!location || !m_userMark) + UserMark const * userMark = [MWMFrameworkListener listener].userMark; + if (!location || !userMark) return; - CGFloat const angle = ang::AngleTo(location.mercator, m_userMark->GetUserMark()->GetPivot()) + info.m_bearing; + CGFloat const angle = ang::AngleTo(location.mercator, userMark->GetPivot()) + info.m_bearing; CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2 - angle); [self.placePage setDirectionArrowTransform:transform]; [self.directionView setDirectionArrowTransform:transform]; @@ -454,9 +448,4 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) _leftBound = self.placePage.leftBound = leftBound; } -- (location::EMyPositionMode)myPositionMode -{ - return self.delegate.myPositionMode; -} - @end diff --git a/iphone/Maps/Classes/MWMPlacePageViewManagerDelegate.h b/iphone/Maps/Classes/MWMPlacePageViewManagerDelegate.h index 241b5e7957..7dbbc3176b 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManagerDelegate.h +++ b/iphone/Maps/Classes/MWMPlacePageViewManagerDelegate.h @@ -4,8 +4,6 @@ @protocol MWMPlacePageViewManagerProtocol -@property (nonatomic, readonly) location::EMyPositionMode myPositionMode; - - (void)dragPlacePage:(CGRect)frame; - (void)addPlacePageViews:(NSArray *)views; - (void)updateStatusBarStyle; diff --git a/iphone/Maps/Classes/MapCell.h b/iphone/Maps/Classes/MapCell.h deleted file mode 100644 index 51b8abe92c..0000000000 --- a/iphone/Maps/Classes/MapCell.h +++ /dev/null @@ -1,44 +0,0 @@ - -#import "MWMTableViewCell.h" -#import "ProgressView.h" -#import "BadgeView.h" - -#include "storage/storage_defines.hpp" -#include "platform/country_defines.hpp" - -using namespace storage; - -@class MapCell; -@protocol MapCellDelegate - -@optional -- (void)mapCellDidStartDownloading:(MapCell *)cell; -- (void)mapCellDidCancelDownloading:(MapCell *)cell; - -@end - -@interface MapCell : MWMTableViewCell - -@property (nonatomic, readonly) UILabel * titleLabel; -@property (nonatomic, readonly) UILabel * subtitleLabel; -@property (nonatomic, readonly) UILabel * sizeLabel; -@property (nonatomic, readonly) BadgeView * badgeView; - -@property (nonatomic, readonly) UIView *separatorTop; -@property (nonatomic, readonly) UIView *separator; -@property (nonatomic, readonly) UIView *separatorBottom; - -@property (nonatomic) BOOL parentMode; - -@property (nonatomic) TStatus status; -@property (nonatomic) MapOptions options; -@property (nonatomic) double downloadProgress; - -@property (nonatomic, weak) id delegate; - -- (void)setStatus:(TStatus)status options:(MapOptions)options animated:(BOOL)animated; -- (void)setDownloadProgress:(double)downloadProgress animated:(BOOL)animated; - -+ (CGFloat)cellHeight; - -@end diff --git a/iphone/Maps/Classes/MapCell.mm b/iphone/Maps/Classes/MapCell.mm deleted file mode 100644 index 90067dafe1..0000000000 --- a/iphone/Maps/Classes/MapCell.mm +++ /dev/null @@ -1,363 +0,0 @@ -#import "Common.h" -#import "MapCell.h" -#import "UIColor+MapsMeColor.h" -#import "UIFont+MapsMeFonts.h" -#import "UIImageView+Coloring.h" - -@interface MapCell () - -@property (nonatomic) UILabel * titleLabel; -@property (nonatomic) UILabel * subtitleLabel; -@property (nonatomic) UILabel * statusLabel; -@property (nonatomic) UILabel * sizeLabel; -@property (nonatomic) ProgressView * progressView; -@property (nonatomic) UIImageView * arrowView; -@property (nonatomic) BadgeView * badgeView; -@property (nonatomic) UIImageView * routingImageView; - -@property (nonatomic) UIView *separatorTop; -@property (nonatomic) UIView *separator; -@property (nonatomic) UIView *separatorBottom; - -@property (nonatomic, readonly) BOOL progressMode; - -@end - -@implementation MapCell - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - - NSArray * subviews = @[self.titleLabel, self.subtitleLabel, self.statusLabel, self.sizeLabel, self.progressView, self.arrowView, self.badgeView, self.routingImageView, self.separator, self.separatorTop, self.separatorBottom]; - for (UIView * subview in subviews) - [self.contentView addSubview:subview]; - self.backgroundColor = [UIColor white]; - self.titleLabel.textColor = [UIColor blackPrimaryText]; - self.subtitleLabel.textColor = self.statusLabel.textColor = self.sizeLabel.textColor = [UIColor blackHintText]; - - return self; -} - -- (void)setStatus:(TStatus)status options:(MapOptions)options animated:(BOOL)animated -{ - self.status = status; - self.options = options; - - self.progressView.failedMode = NO; - - if (options == MapOptions::Map) - self.routingImageView.mwm_name = @"ic_routing_get"; - else - self.routingImageView.mwm_name = @"ic_routing_ok"; - - switch (status) - { - case TStatus::ENotDownloaded: - case TStatus::EOnDiskOutOfDate: - if (status == TStatus::ENotDownloaded) - self.statusLabel.text = L(@"download").uppercaseString; - else - self.statusLabel.text = L(@"downloader_status_outdated").uppercaseString; - - self.statusLabel.textColor = [UIColor linkBlue]; - [self setProgressMode:NO withAnimatedLayout:animated]; - break; - - case TStatus::EInQueue: - case TStatus::EDownloading: - self.statusLabel.textColor = [UIColor blackHintText]; - [self setDownloadProgress:self.downloadProgress animated:animated]; - if (status == TStatus::EInQueue) - self.statusLabel.text = L(@"downloader_queued").uppercaseString; - break; - - case TStatus::EOnDisk: - { - self.statusLabel.text = L(@"downloader_downloaded").uppercaseString; - self.statusLabel.textColor = [UIColor blackHintText]; - if (animated) - { - [self alignSubviews]; - [self performAfterDelay:0.3 block:^{ - [self setProgressMode:NO withAnimatedLayout:YES]; - }]; - } - else - { - [self setProgressMode:NO withAnimatedLayout:NO]; - } - break; - } - - case TStatus::EOutOfMemFailed: - case TStatus::EDownloadFailed: - self.progressView.failedMode = YES; - self.statusLabel.text = L(@"downloader_retry").uppercaseString; - self.statusLabel.textColor = [UIColor red]; - [self setProgressMode:YES withAnimatedLayout:animated]; - break; - - case TStatus::EUnknown: - break; - } -} - -- (void)setDownloadProgress:(double)downloadProgress animated:(BOOL)animated -{ - self.downloadProgress = downloadProgress; - self.statusLabel.text = [NSString stringWithFormat:@"%li%%", long(downloadProgress * 100)]; - [self.progressView setProgress:downloadProgress animated:animated]; - if (!self.progressMode) - [self setProgressMode:YES withAnimatedLayout:animated]; -} - -- (void)setProgressMode:(BOOL)progressMode withAnimatedLayout:(BOOL)withLayout -{ - _progressMode = progressMode; - - self.progressView.progress = self.downloadProgress; - if (withLayout) - { - if (progressMode) - self.progressView.hidden = NO; - [UIView animateWithDuration:0.5 delay:0 damping:0.9 initialVelocity:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ - [self alignProgressView]; - [self alignSubviews]; - } completion:^(BOOL finished) { - if (!progressMode) - self.progressView.hidden = YES; - }]; - } - else - { - [self alignProgressView]; - [self alignSubviews]; - } -} - -- (void)alignProgressView -{ - self.progressView.minX = self.progressMode ? self.contentView.width - [self rightOffset] + 2 : self.contentView.width; -} - -- (void)alignSubviews -{ - self.progressView.hidden = self.parentMode || !self.progressMode; - self.progressView.midY = self.contentView.height / 2; - - self.arrowView.center = CGPointMake(self.contentView.width - [self minimumRightOffset] - 4, self.contentView.height / 2); - self.arrowView.hidden = !self.parentMode; - - [self.statusLabel sizeToIntegralFit]; - self.statusLabel.width = MAX(self.statusLabel.width, 60); - [self.sizeLabel sizeToIntegralFit]; - self.statusLabel.frame = CGRectMake(self.contentView.width - [self rightOffset] - self.statusLabel.width, 14, self.statusLabel.width, 16); - self.statusLabel.hidden = self.parentMode; - - CGFloat const sizeLabelMinY = self.statusLabel.maxY; - self.sizeLabel.frame = CGRectMake(self.contentView.width - [self rightOffset] - self.sizeLabel.width, sizeLabelMinY, self.sizeLabel.width, 16); - self.sizeLabel.textColor = [UIColor blackHintText]; - self.sizeLabel.hidden = self.parentMode; - - CGFloat const rightLabelsMaxWidth = self.parentMode ? 10 : MAX(self.statusLabel.width, self.sizeLabel.width); - CGFloat const leftLabelsWidth = self.contentView.width - [self leftOffset] - [self betweenSpace] - rightLabelsMaxWidth - [self rightOffset]; - - CGFloat const titleLabelWidth = [self.titleLabel.text sizeWithDrawSize:CGSizeMake(1000, 20) font:self.titleLabel.font].width; - self.titleLabel.frame = CGRectMake([self leftOffset], self.subtitleLabel.text == nil ? 19 : 10, MIN(titleLabelWidth, leftLabelsWidth), 20); - self.subtitleLabel.frame = CGRectMake([self leftOffset], self.titleLabel.maxY + 1, leftLabelsWidth, 18); - self.subtitleLabel.hidden = self.subtitleLabel.text == nil; - - self.routingImageView.center = CGPointMake(self.contentView.width - 25, self.contentView.height / 2 - 1); - self.routingImageView.alpha = [self shouldShowRoutingView]; - - self.separatorTop.frame = CGRectMake(0, 0, self.contentView.width, PIXEL); - self.separatorTop.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; - - self.separatorBottom.frame = CGRectMake(0, self.contentView.height - PIXEL, self.contentView.width, PIXEL); - self.separatorBottom.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleTopMargin; -} - -- (void)prepareForReuse -{ - self.separatorTop.hidden = YES; - self.separatorBottom.hidden = YES; - self.separator.hidden = NO; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - [self alignSubviews]; - if (!self.parentMode) - { - [self alignProgressView]; - [self setStatus:self.status options:self.options animated:NO]; - } - self.badgeView.minX = self.titleLabel.maxX + 3; - self.badgeView.minY = self.titleLabel.minY - 5; - - self.separator.minX = self.titleLabel.minX; - self.separator.size = CGSizeMake(self.contentView.width - 2 * self.separator.minX, PIXEL); - self.separator.maxY = self.contentView.height; -} - - -- (BOOL)shouldShowRoutingView -{ - return !self.progressMode && !self.parentMode && self.status != TStatus::ENotDownloaded; -} - -- (CGFloat)leftOffset -{ - return 12; -} - -- (CGFloat)betweenSpace -{ - return 10; -} - -- (CGFloat)rightOffset -{ - return self.progressMode || [self shouldShowRoutingView] ? 50 : [self minimumRightOffset]; -} - -- (CGFloat)minimumRightOffset -{ - return 12; -} - -+ (CGFloat)cellHeight -{ - return 59; -} - -- (void)rightTap:(id)sender -{ - [self.delegate mapCellDidStartDownloading:self]; -} - -- (void)progressViewDidStart:(ProgressView *)progress -{ - [self.delegate mapCellDidStartDownloading:self]; -} - -- (void)progressViewDidCancel:(ProgressView *)progress -{ - [self.delegate mapCellDidCancelDownloading:self]; -} - -- (UIImageView *)arrowView -{ - if (!_arrowView) - _arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AccessoryView"]]; - return _arrowView; -} - -- (ProgressView *)progressView -{ - if (!_progressView) - { - _progressView = [[ProgressView alloc] init]; - _progressView.delegate = self; - } - return _progressView; -} - -- (UILabel *)titleLabel -{ - if (!_titleLabel) - { - _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _titleLabel.backgroundColor = [UIColor clearColor]; - _titleLabel.textColor = [UIColor blackPrimaryText]; - _titleLabel.font = [UIFont regular17]; - } - return _titleLabel; -} - -- (UILabel *)subtitleLabel -{ - if (!_subtitleLabel) - { - _subtitleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _subtitleLabel.backgroundColor = [UIColor clearColor]; - _subtitleLabel.textColor = [UIColor blackSecondaryText]; - _subtitleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:13]; - } - return _subtitleLabel; -} - -- (UILabel *)statusLabel -{ - if (!_statusLabel) - { - _statusLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _statusLabel.backgroundColor = [UIColor clearColor]; - _statusLabel.textAlignment = NSTextAlignmentRight; - _statusLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:13]; - } - return _statusLabel; -} - -- (UILabel *)sizeLabel -{ - if (!_sizeLabel) - { - _sizeLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _sizeLabel.backgroundColor = [UIColor clearColor]; - _sizeLabel.textAlignment = NSTextAlignmentRight; - _sizeLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:13]; - } - return _sizeLabel; -} - -- (UIImageView *)routingImageView -{ - if (!_routingImageView) - { - _routingImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_routing_get_light"]]; - _routingImageView.mwm_name = @"ic_routing_get"; - } - return _routingImageView; -} - -- (BadgeView *)badgeView -{ - if (!_badgeView) - _badgeView = [[BadgeView alloc] init]; - return _badgeView; -} - -- (UIView *)separatorTop -{ - if (!_separatorTop) - { - _separatorTop = [[UIView alloc] initWithFrame:CGRectZero]; - _separatorTop.backgroundColor = [UIColor blackDividers]; - } - return _separatorTop; -} - -- (UIView *)separator -{ - if (!_separator) - { - _separator = [[UIView alloc] initWithFrame:CGRectZero]; - _separator.backgroundColor = [UIColor blackDividers]; - } - return _separator; -} - -- (UIView *)separatorBottom -{ - if (!_separatorBottom) - { - _separatorBottom = [[UIView alloc] initWithFrame:CGRectZero]; - _separatorBottom.backgroundColor = [UIColor blackDividers]; - } - return _separatorBottom; -} - -@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.h b/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.h new file mode 100644 index 0000000000..eac97b9d42 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.h @@ -0,0 +1,15 @@ +#import "MWMMapDownloaderTableViewCell.h" +#import "MWMViewController.h" + +@interface MWMMapCountryDownloaderViewController : MWMViewController + +@property (weak, nonatomic) IBOutlet UILabel * allMapsLabel; + +@property (nonatomic) NSMutableDictionary * offscreenCells; + +@property (nonatomic) BOOL showAllMapsView; + +- (void)configTable; +- (void)configAllMapsView; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.mm b/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.mm new file mode 100644 index 0000000000..50885b1ce9 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapCountryDownloaderViewController.mm @@ -0,0 +1,278 @@ +#import "Common.h" +#import "MWMMapCountryDownloaderViewController.h" +#import "UIColor+MapsMeColor.h" + +extern NSString * const kPlaceCellIdentifier = @"MWMMapDownloaderPlaceTableViewCell"; + +typedef void (^AlertActionType)(UIAlertAction *); + +@interface MWMMapCountryDownloaderViewController () + +@property (weak, nonatomic) IBOutlet UITableView * tableView; + +@property (weak, nonatomic) IBOutlet UIView * allMapsView; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint * allMapsViewBottomOffset; + +@property (nonatomic) UIImage * navBarBackground; +@property (nonatomic) UIImage * navBarShadow; + +@property (nonatomic) CGFloat lastScrollOffset; + +@property (copy, nonatomic) AlertActionType downloadAction; +@property (copy, nonatomic) AlertActionType showAction; + +@property (copy, nonatomic) NSString * downloadActionTitle; +@property (copy, nonatomic) NSString * showActionTitle; +@property (copy, nonatomic) NSString * cancelActionTitle; + +@end + +@implementation MWMMapCountryDownloaderViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [self configTable]; + [self configAllMapsView]; + [self configActions]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + UINavigationBar * navBar = [UINavigationBar appearance]; + self.navBarBackground = [navBar backgroundImageForBarMetrics:UIBarMetricsDefault]; + self.navBarShadow = navBar.shadowImage; + UIColor * searchBarColor = [UIColor primary]; + [navBar setBackgroundImage:[UIImage imageWithColor:searchBarColor] + forBarMetrics:UIBarMetricsDefault]; + navBar.shadowImage = [UIImage imageWithColor:[UIColor clearColor]]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + UINavigationBar * navBar = [UINavigationBar appearance]; + [navBar setBackgroundImage:self.navBarBackground forBarMetrics:UIBarMetricsDefault]; + navBar.shadowImage = self.navBarShadow; +} + +#pragma mark - Table + +- (void)configTable +{ + self.offscreenCells = [NSMutableDictionary dictionary]; + [self.tableView registerNib:[UINib nibWithNibName:kPlaceCellIdentifier bundle:nil] forCellReuseIdentifier:kPlaceCellIdentifier]; +} + +- (NSString *)cellIdentifierForIndexPath:(NSIndexPath *)indexPath +{ + return kPlaceCellIdentifier; +} + +#pragma mark - Offscreen cells + +- (MWMMapDownloaderTableViewCell *)offscreenCellForIdentifier:(NSString *)reuseIdentifier +{ + MWMMapDownloaderTableViewCell * cell = self.offscreenCells[reuseIdentifier]; + if (!cell) + { + cell = [[[NSBundle mainBundle] loadNibNamed:reuseIdentifier owner:nil options:nil] firstObject]; + self.offscreenCells[reuseIdentifier] = cell; + } + return cell; +} + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewWillEndDragging:(UIScrollView * _Nonnull)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint * _Nonnull)targetContentOffset +{ + SEL const selector = @selector(refreshAllMapsView); + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:selector object:nil]; + [self refreshAllMapsViewForOffset:targetContentOffset->y]; +} + +- (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView +{ + SEL const selector = @selector(refreshAllMapsView); + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:selector object:nil]; + [self performSelector:selector withObject:nil afterDelay:kDefaultAnimationDuration]; +} + +#pragma mark - All Maps Action + +- (void)configAllMapsView +{ + self.allMapsLabel.text = @"14 Maps (291 MB)"; + self.showAllMapsView = YES; +} + +- (void)refreshAllMapsView +{ + [self refreshAllMapsViewForOffset:self.tableView.contentOffset.y]; +} + +- (void)refreshAllMapsViewForOffset:(CGFloat)scrollOffset +{ + if (!self.showAllMapsView) + return; + BOOL const hide = (scrollOffset >= self.lastScrollOffset) && !equalScreenDimensions(scrollOffset, 0.0); + self.lastScrollOffset = scrollOffset; + if (self.allMapsView.hidden == hide) + return; + if (!hide) + self.allMapsView.hidden = hide; + [self.view layoutIfNeeded]; + self.allMapsViewBottomOffset.constant = hide ? self.allMapsView.height : 0.0; + [UIView animateWithDuration:kDefaultAnimationDuration animations:^ + { + self.allMapsView.alpha = hide ? 0.0 : 1.0; + [self.view layoutIfNeeded]; + } + completion:^(BOOL finished) + { + if (hide) + self.allMapsView.hidden = hide; + }]; +} + +- (IBAction)allMapsAction +{ +} + +#pragma mark - Fill cells with data + +- (void)fillCell:(MWMMapDownloaderTableViewCell * _Nonnull)cell atIndexPath:(NSIndexPath * _Nonnull)indexPath +{ +} + +#pragma mark - UITableViewDataSource + +- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + NSString * reuseIdentifier = [self cellIdentifierForIndexPath:indexPath]; + return [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; +} + +- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section +{ + return 20; +} + +#pragma mark - UITableViewDelegate + +- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + NSString * reuseIdentifier = [self cellIdentifierForIndexPath:indexPath]; + MWMMapDownloaderTableViewCell * cell = [self offscreenCellForIdentifier:reuseIdentifier]; + [self fillCell:cell atIndexPath:indexPath]; + [cell setNeedsUpdateConstraints]; + [cell updateConstraintsIfNeeded]; + cell.bounds = {{}, {CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds)}}; + [cell setNeedsLayout]; + [cell layoutIfNeeded]; + CGSize const size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; + return size.height; +} + +- (CGFloat)tableView:(UITableView * _Nonnull)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + NSString * reuseIdentifier = [self cellIdentifierForIndexPath:indexPath]; + MWMMapDownloaderTableViewCell * cell = [self offscreenCellForIdentifier:reuseIdentifier]; + return cell.estimatedHeight; +} + +- (void)tableView:(UITableView * _Nonnull)tableView willDisplayCell:(MWMMapDownloaderTableViewCell * _Nonnull)cell forRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + [self fillCell:cell atIndexPath:indexPath]; +} + +- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + NSString * title = @"Alessandria"; + NSString * message = @"Italy, Piemont"; + NSString * downloadActionTitle = [self.downloadActionTitle stringByAppendingString:@", 38 MB"]; + if (isIOSVersionLessThan(8)) + { + UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:message + delegate:self + cancelButtonTitle:nil + destructiveButtonTitle:nil + otherButtonTitles:nil]; + [actionSheet addButtonWithTitle:downloadActionTitle]; + [actionSheet addButtonWithTitle:self.showActionTitle]; + if (!IPAD) + { + [actionSheet addButtonWithTitle:self.cancelActionTitle]; + actionSheet.cancelButtonIndex = actionSheet.numberOfButtons - 1; + } + UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; + [actionSheet showFromRect:cell.frame inView:cell.superview animated:YES]; + } + else + { + UIAlertController * alertController = + [UIAlertController alertControllerWithTitle:title + message:message + preferredStyle:UIAlertControllerStyleActionSheet]; + UIAlertAction * downloadAction = [UIAlertAction actionWithTitle:downloadActionTitle + style:UIAlertActionStyleDefault + handler:self.downloadAction]; + UIAlertAction * showAction = [UIAlertAction actionWithTitle:self.showActionTitle + style:UIAlertActionStyleDefault + handler:self.showAction]; + UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:self.cancelActionTitle + style:UIAlertActionStyleCancel + handler:nil]; + [alertController addAction:downloadAction]; + [alertController addAction:showAction]; + [alertController addAction:cancelAction]; + [self presentViewController:alertController animated:YES completion:nil]; + } +} + +#pragma mark - UIActionSheetDelegate + +- (void)actionSheet:(UIActionSheet * _Nonnull)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + NSString * btnTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; + if ([btnTitle hasPrefix:self.downloadActionTitle]) + self.downloadAction(nil); + else if ([btnTitle isEqualToString:self.showActionTitle]) + self.showAction(nil); +} + +#pragma mark - Action Sheet actions + +- (void)configActions +{ + self.downloadAction = ^(UIAlertAction * action) + { + }; + + self.showAction = ^(UIAlertAction * action) + { + }; + + self.downloadActionTitle = L(@"downloader_download_map"); + self.showActionTitle = L(@"zoom_to_country"); + self.cancelActionTitle = L(@"cancel"); +} + +#pragma mark - Managing the Status Bar + +- (UIStatusBarStyle)preferredStatusBarStyle +{ + return UIStatusBarStyleLightContent; +} + +#pragma mark - Properties + +- (void)setShowAllMapsView:(BOOL)showAllMapsView +{ + _showAllMapsView = showAllMapsView; + self.allMapsView.hidden = !showAllMapsView; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.h new file mode 100644 index 0000000000..756e6c8e60 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.h @@ -0,0 +1,5 @@ +#import "MWMMapDownloaderTableViewCell.h" + +@interface MWMMapDownloaderCountryTableViewCell : MWMMapDownloaderTableViewCell + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.mm new file mode 100644 index 0000000000..e0058f51f8 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderCountryTableViewCell.mm @@ -0,0 +1,21 @@ +#import "MWMMapDownloaderCountryTableViewCell.h" + +@implementation MWMMapDownloaderCountryTableViewCell + +- (void)layoutSubviews +{ + CGFloat const titleLeadingOffset = 60.0; + CGFloat const titleTrailingOffset = 80.0; + CGFloat const preferredMaxLayoutWidth = CGRectGetWidth(self.bounds) - titleLeadingOffset - titleTrailingOffset; + self.title.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + [super layoutSubviews]; +} + +#pragma mark - Properties + +- (CGFloat)estimatedHeight +{ + return 52.0; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.h new file mode 100644 index 0000000000..b1495396d7 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.h @@ -0,0 +1,7 @@ +#import "MWMMapDownloaderTableViewCell.h" + +@interface MWMMapDownloaderLargeCountryTableViewCell : MWMMapDownloaderTableViewCell + +@property (weak, nonatomic) IBOutlet UILabel * mapsCount; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.mm new file mode 100644 index 0000000000..5fbedc0d30 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderLargeCountryTableViewCell.mm @@ -0,0 +1,22 @@ +#import "MWMMapDownloaderLargeCountryTableViewCell.h" + +@implementation MWMMapDownloaderLargeCountryTableViewCell + +- (void)layoutSubviews +{ + CGFloat const titleLeadingOffset = 60.0; + CGFloat const titleTrailingOffset = 112.0; + CGFloat const preferredMaxLayoutWidth = CGRectGetWidth(self.bounds) - titleLeadingOffset - titleTrailingOffset; + self.title.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + self.mapsCount.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + [super layoutSubviews]; +} + +#pragma mark - Properties + +- (CGFloat)estimatedHeight +{ + return 62.0; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.h new file mode 100644 index 0000000000..e328f87d0e --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.h @@ -0,0 +1,7 @@ +#import "MWMMapDownloaderTableViewCell.h" + +@interface MWMMapDownloaderPlaceTableViewCell : MWMMapDownloaderTableViewCell + +@property (weak, nonatomic) IBOutlet UILabel * area; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.mm new file mode 100644 index 0000000000..8fecbeefc5 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderPlaceTableViewCell.mm @@ -0,0 +1,22 @@ +#import "MWMMapDownloaderPlaceTableViewCell.h" + +@implementation MWMMapDownloaderPlaceTableViewCell + +- (void)layoutSubviews +{ + CGFloat const titleLeadingOffset = 60.0; + CGFloat const titleTrailingOffset = 80.0; + CGFloat const preferredMaxLayoutWidth = CGRectGetWidth(self.bounds) - titleLeadingOffset - titleTrailingOffset; + self.title.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + self.area.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + [super layoutSubviews]; +} + +#pragma mark - Properties + +- (CGFloat)estimatedHeight +{ + return 62.0; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.h new file mode 100644 index 0000000000..a3f750f62b --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.h @@ -0,0 +1,8 @@ +#import "MWMMapDownloaderTableViewCell.h" + +@interface MWMMapDownloaderSubplaceTableViewCell : MWMMapDownloaderTableViewCell + +@property (weak, nonatomic) IBOutlet UILabel * area; +@property (weak, nonatomic) IBOutlet UILabel * subPlace; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.mm new file mode 100644 index 0000000000..7edfa20354 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderSubplaceTableViewCell.mm @@ -0,0 +1,23 @@ +#import "MWMMapDownloaderSubplaceTableViewCell.h" + +@implementation MWMMapDownloaderSubplaceTableViewCell + +- (void)layoutSubviews +{ + CGFloat const titleLeadingOffset = 60.0; + CGFloat const titleTrailingOffset = 80.0; + CGFloat const preferredMaxLayoutWidth = CGRectGetWidth(self.bounds) - titleLeadingOffset - titleTrailingOffset; + self.title.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + self.area.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + self.subPlace.preferredMaxLayoutWidth = preferredMaxLayoutWidth; + [super layoutSubviews]; +} + +#pragma mark - Properties + +- (CGFloat)estimatedHeight +{ + return 82.0; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.h new file mode 100644 index 0000000000..8c9151df60 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.h @@ -0,0 +1,10 @@ +@interface MWMMapDownloaderTableViewCell : UITableViewCell + +@property (nonatomic, readonly) CGFloat estimatedHeight; + +@property (weak, nonatomic) IBOutlet UIView * stateWrapper; +@property (weak, nonatomic) IBOutlet UILabel * title; +@property (weak, nonatomic) IBOutlet UILabel * downloadSize; +@property (weak, nonatomic) IBOutlet UIView * separator; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.mm new file mode 100644 index 0000000000..276fa1c778 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewCell.mm @@ -0,0 +1,38 @@ +#import "MWMCircularProgress.h" +#import "MWMMapDownloaderTableViewCell.h" + +@interface MWMMapDownloaderTableViewCell () + +@property (nonatomic) MWMCircularProgress * progressView; + +@end + +@implementation MWMMapDownloaderTableViewCell + +#pragma mark - Properties + +- (void)awakeFromNib +{ + [super awakeFromNib]; + self.progressView = [[MWMCircularProgress alloc] initWithParentView:self.stateWrapper]; + self.progressView.delegate = self; + [self.progressView setImage:[UIImage imageNamed:@"ic_download"] forState:MWMCircularProgressStateNormal]; + [self.progressView setImage:[UIImage imageNamed:@"ic_download"] forState:MWMCircularProgressStateSelected]; + [self.progressView setImage:[UIImage imageNamed:@"ic_close_spinner"] forState:MWMCircularProgressStateProgress]; + [self.progressView setImage:[UIImage imageNamed:@"ic_download_error"] forState:MWMCircularProgressStateFailed]; + [self.progressView setImage:[UIImage imageNamed:@"ic_check"] forState:MWMCircularProgressStateCompleted]; +} + +- (CGFloat)estimatedHeight +{ + return 52.0; +} + +#pragma mark - MWMCircularProgressDelegate + +- (void)progressButtonPressed:(nonnull MWMCircularProgress *)progress +{ + +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.h new file mode 100644 index 0000000000..9fb7d29991 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.h @@ -0,0 +1,11 @@ +@class MWMMapDownloaderTableViewHeader; + +@interface MWMMapDownloaderTableViewHeader : UIView + ++ (CGFloat)height; + +@property (weak, nonatomic) IBOutlet UILabel * title; + +@property (nonatomic) BOOL lastSection; + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.mm new file mode 100644 index 0000000000..acc3bdfd19 --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderTableViewHeader.mm @@ -0,0 +1,17 @@ +#import "Common.h" +#import "MWMMapDownloaderTableViewHeader.h" + +@interface MWMMapDownloaderTableViewHeader () + +@property (weak, nonatomic) IBOutlet UIView * separatorDown; + +@end + +@implementation MWMMapDownloaderTableViewHeader + ++ (CGFloat)height +{ + return 28.0; +} + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.h b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.h new file mode 100644 index 0000000000..6b59ae2bbf --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.h @@ -0,0 +1,5 @@ +#import "MWMMapCountryDownloaderViewController.h" + +@interface MWMMapDownloaderViewController : MWMMapCountryDownloaderViewController + +@end diff --git a/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.mm b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.mm new file mode 100644 index 0000000000..f38fe7e50e --- /dev/null +++ b/iphone/Maps/Classes/MapDownloader/MWMMapDownloaderViewController.mm @@ -0,0 +1,221 @@ +#import "Common.h" +#import "MWMMapDownloaderCountryTableViewCell.h" +#import "MWMMapDownloaderLargeCountryTableViewCell.h" +#import "MWMMapDownloaderPlaceTableViewCell.h" +#import "MWMMapDownloaderSubplaceTableViewCell.h" +#import "MWMMapDownloaderTableViewHeader.h" +#import "MWMMapDownloaderViewController.h" +#import "UIColor+MapsMeColor.h" +#import "UIKitCategories.h" + +#include "std/vector.hpp" + +static NSString * const kCountryCellIdentifier = @"MWMMapDownloaderCountryTableViewCell"; +static NSString * const kLargeCountryCellIdentifier = @"MWMMapDownloaderLargeCountryTableViewCell"; +static NSString * const kSubplaceCellIdentifier = @"MWMMapDownloaderSubplaceTableViewCell"; +extern NSString * const kPlaceCellIdentifier; + +static NSUInteger const sectionsCount = 2; +static NSUInteger const cellsCount = 4; +static NSString * const kCellType = @"kCellType"; +static NSString * const kCellTitle = @"kCellTitle"; +static NSString * const kCellDownloadSize = @"kCellDownloadSize"; +static NSString * const kCellMapsCount = @"kCellMapsCount"; +static NSString * const kCellArea = @"kCellArea"; +static NSString * const kCellSubplace = @"kCellSubplace"; + +@interface MWMMapDownloaderViewController () + +@property (weak, nonatomic) IBOutlet UIView * statusBarBackground; +@property (weak, nonatomic) IBOutlet UISearchBar * searchBar; +@property (weak, nonatomic) IBOutlet UITableView * tableView; + +@property (nonatomic) NSMutableDictionary * dataSource; + +@end + +@implementation MWMMapDownloaderViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.title = L(@"download_maps"); + self.searchBar.placeholder = L(@"search_downloaded_maps"); + + self.dataSource = [NSMutableDictionary dictionary]; + self.dataSource[[NSIndexPath indexPathForRow:0 inSection:0]] = @{kCellType : kCountryCellIdentifier, kCellTitle : @"Algeria", kCellDownloadSize : @"123 MB"}; + self.dataSource[[NSIndexPath indexPathForRow:1 inSection:0]] = @{kCellType : kPlaceCellIdentifier, kCellTitle : @"London", kCellDownloadSize : @"456 MB", kCellArea : @"UK"}; + self.dataSource[[NSIndexPath indexPathForRow:2 inSection:0]] = @{kCellType : kLargeCountryCellIdentifier, kCellTitle : @"Brazil", kCellDownloadSize : @"789 MB", kCellMapsCount : @"14 maps"}; + self.dataSource[[NSIndexPath indexPathForRow:3 inSection:0]] = @{kCellType : kSubplaceCellIdentifier, kCellTitle : @"Western Cape", kCellDownloadSize : @"1234 MB", kCellArea : @"South Africa", kCellSubplace : @"Mossel Bay"}; + + self.dataSource[[NSIndexPath indexPathForRow:0 inSection:1]] = @{kCellType : kCountryCellIdentifier, kCellTitle : @"Соединенное Королевство Великобритании и Северной Ирландии", kCellDownloadSize : @"9876 МБ"}; + self.dataSource[[NSIndexPath indexPathForRow:1 inSection:1]] = @{kCellType : kPlaceCellIdentifier, kCellTitle : @"กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยามหาดิลก ภพนพรัตน์ ราชธานีบุรีรมย์ อุดมราชนิเวศน์ มหาสถาน อมรพิมาน อวตารสถิต สักกะทัตติยะ วิษณุกรรมประสิทธิ์", kCellDownloadSize : @"999 MB", kCellArea : @"Таиланд"}; + self.dataSource[[NSIndexPath indexPathForRow:2 inSection:1]] = @{kCellType : kLargeCountryCellIdentifier, kCellTitle : @"Muckanaghederdauhaulia", kCellDownloadSize : @"1234 MB", kCellMapsCount : @"999 maps"}; + self.dataSource[[NSIndexPath indexPathForRow:3 inSection:1]] = @{kCellType : kSubplaceCellIdentifier, kCellTitle : @"กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยามหาดิลก ภพนพรัตน์ ราชธานีบุรีรมย์ อุดมราชนิเวศน์ มหาสถาน อมรพิมาน อวตารสถิต สักกะทัตติยะ วิษณุกรรมประสิทธิ์", kCellDownloadSize : @"999 MB", kCellArea : @"Соединенное Королевство Великобритании и Северной Ирландии", kCellSubplace : @"Venkatanarasimharajuvaripeta"}; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + UIColor * searchBarColor = [UIColor primary]; + self.statusBarBackground.backgroundColor = self.searchBar.barTintColor = searchBarColor; + self.searchBar.backgroundImage = [UIImage imageWithColor:searchBarColor]; +} + +#pragma mark - Table + +- (void)configTable +{ + [super configTable]; + [self.tableView registerNib:[UINib nibWithNibName:kCountryCellIdentifier bundle:nil] forCellReuseIdentifier:kCountryCellIdentifier]; + [self.tableView registerNib:[UINib nibWithNibName:kLargeCountryCellIdentifier bundle:nil] forCellReuseIdentifier:kLargeCountryCellIdentifier]; + [self.tableView registerNib:[UINib nibWithNibName:kSubplaceCellIdentifier bundle:nil] forCellReuseIdentifier:kSubplaceCellIdentifier]; +} + +- (NSString *)cellIdentifierForIndexPath:(NSIndexPath *)indexPath +{ + NSIndexPath * path = [NSIndexPath indexPathForRow:[indexPath indexAtPosition:1] inSection:[indexPath indexAtPosition:0]]; + return self.dataSource[path][kCellType]; +} + +#pragma mark - All Maps Action + +- (void)configAllMapsView +{ + [super configAllMapsView]; + self.allMapsLabel.text = @"5 Outdated Maps (108 MB)"; + self.showAllMapsView = YES; +} + +- (IBAction)allMapsAction +{ +} + +#pragma mark - Fill cells with data + +- (void)fillCell:(MWMMapDownloaderTableViewCell * _Nonnull)cell atIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + NSDictionary * data = self.dataSource[indexPath]; + BOOL const isLastCellInSection = indexPath.row == 3; + if ([cell isKindOfClass:[MWMMapDownloaderCountryTableViewCell class]]) + { + MWMMapDownloaderCountryTableViewCell * tCell = (MWMMapDownloaderCountryTableViewCell *)cell; + tCell.title.text = data[kCellTitle]; + tCell.downloadSize.text = data[kCellDownloadSize]; + tCell.separator.hidden = isLastCellInSection; + } + else if ([cell isKindOfClass:[MWMMapDownloaderPlaceTableViewCell class]]) + { + MWMMapDownloaderPlaceTableViewCell * tCell = (MWMMapDownloaderPlaceTableViewCell *)cell; + tCell.title.text = data[kCellTitle]; + tCell.downloadSize.text = data[kCellDownloadSize]; + tCell.area.text = data[kCellArea]; + tCell.separator.hidden = isLastCellInSection; + } + else if ([cell isKindOfClass:[MWMMapDownloaderLargeCountryTableViewCell class]]) + { + MWMMapDownloaderLargeCountryTableViewCell * tCell = (MWMMapDownloaderLargeCountryTableViewCell *)cell; + tCell.title.text = data[kCellTitle]; + tCell.downloadSize.text = data[kCellDownloadSize]; + tCell.mapsCount.text = data[kCellMapsCount]; + tCell.separator.hidden = isLastCellInSection; + } + else if ([cell isKindOfClass:[MWMMapDownloaderSubplaceTableViewCell class]]) + { + MWMMapDownloaderSubplaceTableViewCell * tCell = (MWMMapDownloaderSubplaceTableViewCell *)cell; + tCell.title.text = data[kCellTitle]; + tCell.downloadSize.text = data[kCellDownloadSize]; + tCell.area.text = data[kCellArea]; + tCell.subPlace.text = data[kCellSubplace]; + tCell.separator.hidden = isLastCellInSection; + } +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView +{ + return sectionsCount; +} + +- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section +{ + return cellsCount; +} + +- (NSArray * _Nullable)sectionIndexTitlesForTableView:(UITableView * _Nonnull)tableView +{ +// return nil; + return @[@"A", @"Z"]; +} + +- (NSInteger)tableView:(UITableView * _Nonnull)tableView sectionForSectionIndexTitle:(NSString * _Nonnull)title atIndex:(NSInteger)index +{ + return index; +} + +#pragma mark - UITableViewDelegate + +- (UIView * _Nullable)tableView:(UITableView * _Nonnull)tableView viewForHeaderInSection:(NSInteger)section +{ + MWMMapDownloaderTableViewHeader * headerView = + [[[NSBundle mainBundle] loadNibNamed:@"MWMMapDownloaderTableViewHeader" + owner:nil + options:nil] firstObject]; + headerView.lastSection = (section == sectionsCount - 1); + headerView.title.text = [NSString stringWithFormat:@"Header: %@", @(section)]; + return headerView; +} + +- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForHeaderInSection:(NSInteger)section +{ + return [MWMMapDownloaderTableViewHeader height]; +} + +- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath +{ + NSString * identifier = [self cellIdentifierForIndexPath:indexPath]; + if ([identifier isEqualToString:kLargeCountryCellIdentifier]) + { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + [self performSegueWithIdentifier:@"MapDownloader2CountryDownloaderSegue" sender:indexPath]; + } + else + { + [super tableView:tableView didSelectRowAtIndexPath:indexPath]; + } +} + +#pragma mark - Segue + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSIndexPath *)indexPath +{ + MWMMapCountryDownloaderViewController * destVC = segue.destinationViewController; + destVC.title = @"BRAZILIA"; +} + +#pragma mark - UISearchBarDelegate + +- (BOOL)searchBarShouldBeginEditing:(UISearchBar * _Nonnull)searchBar +{ + [self.searchBar setShowsCancelButton:YES animated:YES]; + [self.navigationController setNavigationBarHidden:YES animated:YES]; + self.tableView.contentInset = self.tableView.scrollIndicatorInsets = {}; + return YES; +} + +- (BOOL)searchBarShouldEndEditing:(UISearchBar * _Nonnull)searchBar +{ + return YES; +} + +- (void)searchBarCancelButtonClicked:(UISearchBar * _Nonnull)searchBar +{ + self.searchBar.text = @""; + [self.searchBar resignFirstResponder]; + [self.searchBar setShowsCancelButton:NO animated:YES]; + [self.navigationController setNavigationBarHidden:NO animated:YES]; + self.tableView.contentInset = self.tableView.scrollIndicatorInsets = {}; +} + +@end diff --git a/iphone/Maps/Classes/MapViewController.h b/iphone/Maps/Classes/MapViewController.h index 5547040ae4..976447281d 100644 --- a/iphone/Maps/Classes/MapViewController.h +++ b/iphone/Maps/Classes/MapViewController.h @@ -35,7 +35,7 @@ namespace search { struct AddressInfo; } - (void)performAction:(NSString *)action; - (void)openBookmarks; -- (void)downloadMaps; +- (void)openMapsDownloader; - (void)refreshAd; @@ -48,7 +48,7 @@ namespace search { struct AddressInfo; } @property (nonatomic, readonly) MWMMapViewControlsManager * controlsManager; @property (nonatomic) m2::PointD restoreRouteDestination; @property (nonatomic) MWMAPIBar * apiBar; - @property (nonatomic) BOOL skipPlacePageDismissOnViewDisappear; +@property (nonatomic, readonly) MWMAlertViewController * alertController; @end diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index a4d0e8d124..aa3df36b9a 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -1,7 +1,6 @@ #import "BookmarksRootVC.h" #import "BookmarksVC.h" #import "Common.h" -#import "CountryTreeVC.h" #import "EAGLView.h" #import "MapsAppDelegate.h" #import "MapViewController.h" @@ -97,7 +96,8 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; @end -@interface MapViewController () +@interface MapViewController () @property (nonatomic, readwrite) MWMMapViewControlsManager * controlsManager; @property (nonatomic) MWMBottomMenuState menuRestoreState; @@ -181,33 +181,6 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; GetFramework().OnCompassUpdate(info); } -- (void)onLocationStateModeChanged:(location::EMyPositionMode)newMode -{ - [m_predictor setMode:newMode]; - [self.controlsManager setMyPositionMode:newMode]; - - switch (newMode) - { - case location::MODE_UNKNOWN_POSITION: - { - self.disableStandbyOnLocationStateMode = NO; - [[MapsAppDelegate theApp].m_locationManager stop:self]; - break; - } - case location::MODE_PENDING_POSITION: - self.disableStandbyOnLocationStateMode = NO; - [[MapsAppDelegate theApp].m_locationManager start:self]; - break; - case location::MODE_NOT_FOLLOW: - self.disableStandbyOnLocationStateMode = NO; - break; - case location::MODE_FOLLOW: - case location::MODE_ROTATE_AND_FOLLOW: - self.disableStandbyOnLocationStateMode = YES; - break; - } -} - #pragma mark - Restore route - (void)restoreRoute @@ -223,23 +196,6 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; [self.controlsManager dismissPlacePage]; } -- (void)onUserMarkClicked:(unique_ptr)mark -{ - if (mark == nullptr) - { - [self dismissPlacePage]; - - auto & f = GetFramework(); - if (!f.HasActiveUserMark() && self.controlsManager.searchHidden && !f.IsRouteNavigable()) - self.controlsManager.hidden = !self.controlsManager.hidden; - } - else - { - self.controlsManager.hidden = NO; - [self.controlsManager showPlacePageWithUserMark:move(mark)]; - } -} - - (void)onMyPositionClicked:(id)sender { GetFramework().SwitchMyPositionNextMode(); @@ -440,7 +396,6 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; { if (isIOS7) return; - NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; BOOL const whatsNewWasShown = [ud boolForKey:kUDWhatsNewWasShown]; if (whatsNewWasShown) @@ -522,155 +477,64 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; - (void)initialize { - Framework & f = GetFramework(); - - using UserMarkActivatedFnT = void (*)(id, SEL, unique_ptr); - using PlacePageDismissedFnT = void (*)(id, SEL); - - SEL userMarkSelector = @selector(onUserMarkClicked:); - UserMarkActivatedFnT userMarkFn = (UserMarkActivatedFnT)[self methodForSelector:userMarkSelector]; - f.SetUserMarkActivationListener(bind(userMarkFn, self, userMarkSelector, _1)); m_predictor = [[LocationPredictor alloc] initWithObserver:self]; self.forceRoutingStateChange = ForceRoutingStateChangeNone; self.userTouchesAction = UserTouchesActionNone; self.menuRestoreState = MWMBottomMenuStateInactive; - f.LoadBookmarks(); - - using TLocationStateModeFn = void (*)(id, SEL, location::EMyPositionMode); - SEL locationStateModeSelector = @selector(onLocationStateModeChanged:); - TLocationStateModeFn locationStateModeFn = (TLocationStateModeFn)[self methodForSelector:locationStateModeSelector]; - f.SetMyPositionModeListener(bind(locationStateModeFn, self, locationStateModeSelector, _1)); - - f.SetDownloadCountryListener([self](storage::TIndex const & idx, int opt) - { - if (opt == -1) - { - GetFramework().GetCountryTree().GetActiveMapLayout().RetryDownloading(idx); - } - else - { - [self checkMigrationAndCallBlock:^ - { - ActiveMapsLayout & layout = GetFramework().GetCountryTree().GetActiveMapLayout(); - LocalAndRemoteSizeT sizes = layout.GetRemoteCountrySizes(idx); - uint64_t sizeToDownload = sizes.first; - MapOptions options = static_cast(opt); - if (HasOptions(options, MapOptions::CarRouting)) - sizeToDownload += sizes.second; - - NSString * name = @(layout.GetCountryName(idx).c_str()); - Platform::EConnectionType const connection = Platform::ConnectionStatus(); - if (connection != Platform::EConnectionType::CONNECTION_NONE) - { - if (connection == Platform::EConnectionType::CONNECTION_WWAN && sizeToDownload > 50 * MB) - { - [self.alertController presentNoWiFiAlertWithName:name downloadBlock:^ - { - layout.DownloadMap(idx, static_cast(opt)); - }]; - return; - } - } - else - { - [self.alertController presentNoConnectionAlert]; - return; - } - - layout.DownloadMap(idx, static_cast(opt)); - }]; - } - }); - - f.SetDownloadCancelListener([self](storage::TIndex const & idx) - { - GetFramework().GetCountryTree().GetActiveMapLayout().CancelDownloading(idx); - }); - - f.SetAutoDownloadListener([self](storage::TIndex const & idx) - { - if (![self isEqual:self.navigationController.topViewController] || platform::migrate::NeedMigrate()) - return; - bool autoDownloadEnabled = true; - (void)Settings::Get(kAutoDownloadEnabledKey, autoDownloadEnabled); - if (autoDownloadEnabled && Platform::ConnectionStatus() == Platform::EConnectionType::CONNECTION_WIFI) - GetFramework().GetCountryTree().GetActiveMapLayout().DownloadMap(idx, MapOptions::MapWithCarRouting); - }); - - f.SetRouteBuildingListener([self, &f](routing::IRouter::ResultCode code, vector const & absentCountries, vector const & absentRoutes) - { - dispatch_async(dispatch_get_main_queue(), [=] - { - if (code != routing::IRouter::ResultCode::NoError && platform::migrate::NeedMigrate()) - { - [self.controlsManager routingHidden]; - [self checkMigrationAndCallBlock:^{}]; - } - else - { - [self processRoutingBuildingEvent:code countries:absentCountries routes:absentRoutes]; - } - }); - }); - - f.SetRouteProgressListener([self](float progress) - { - dispatch_async(dispatch_get_main_queue(), ^ - { - self.controlsManager.routeBuildingProgress = progress; - }); - }); + GetFramework().LoadBookmarks(); + [[MWMFrameworkListener listener] addObserver:self]; } -- (void)checkMigrationAndCallBlock:(TMWMVoidBlock)block +- (void)openMapsDownloader { - if (platform::migrate::NeedMigrate()) + [Alohalytics logEvent:kAlohalyticsTapEventKey withValue:@"downloader"]; + [self performSegueWithIdentifier:@"Map2MapDownloaderSegue" sender:self]; +} + +#pragma mark - MWMFrameworkMyPositionObserver + +- (void)processMyPositionStateModeChange:(location::EMyPositionMode)mode +{ + [m_predictor setMode:mode]; + + switch (mode) { - [[Statistics instance] logEvent:kStatShowBig2SmallMWM]; - [self.alertController presentNeedMigrationAlertWithOkBlock:^ + case location::MODE_UNKNOWN_POSITION: { - [[Statistics instance] logEvent:kStatMigrationBig2SmallMWM]; - [self.controlsManager routingHidden]; - GetFramework().Migrate(); - [self.controlsManager refreshLayout]; - block(); - }]; - } - else - { - block(); + self.disableStandbyOnLocationStateMode = NO; + [[MapsAppDelegate theApp].m_locationManager stop:self]; + break; + } + case location::MODE_PENDING_POSITION: + self.disableStandbyOnLocationStateMode = NO; + [[MapsAppDelegate theApp].m_locationManager start:self]; + break; + case location::MODE_NOT_FOLLOW: + self.disableStandbyOnLocationStateMode = NO; + break; + case location::MODE_FOLLOW: + case location::MODE_ROTATE_AND_FOLLOW: + self.disableStandbyOnLocationStateMode = YES; + break; } } -- (void)downloadMaps -{ - [self checkMigrationAndCallBlock:^ - { - [Alohalytics logEvent:kAlohalyticsTapEventKey withValue:@"downloader"]; - CountryTreeVC * vc = [[CountryTreeVC alloc] initWithNodePosition:-1]; - [self.navigationController pushViewController:vc animated:YES]; - }]; -} +#pragma mark - MWMFrameworkRouteBuilderObserver -- (void)processRoutingBuildingEvent:(routing::IRouter::ResultCode)code - countries:(vector const &)absentCountries - routes:(vector const &)absentRoutes +- (void)processRouteBuilderEvent:(routing::IRouter::ResultCode)code + countries:(storage::TCountriesVec const &)absentCountries + routes:(storage::TCountriesVec const &)absentRoutes { - Framework & f = GetFramework(); switch (code) { case routing::IRouter::ResultCode::NoError: { - self.controlsManager.routeBuildingProgress = 100.; - f.ActivateUserMark(nullptr, true); - self.controlsManager.routeBuildingProgress = 100.; - self.controlsManager.searchHidden = YES; + GetFramework().ActivateUserMark(nullptr, true); if (self.forceRoutingStateChange == ForceRoutingStateChangeStartFollowing) [self.controlsManager routingNavigation]; else [self.controlsManager routingReady]; [self updateRoutingInfo]; - self.forceRoutingStateChange = ForceRoutingStateChangeNone; bool isDisclaimerApproved = false; (void)Settings::Get("IsDisclaimerApproved", isDisclaimerApproved); if (!isDisclaimerApproved) @@ -686,29 +550,47 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; case routing::IRouter::FileTooOld: case routing::IRouter::RouteNotFound: { - [self.controlsManager handleRoutingError]; [self presentDownloaderAlert:code countries:absentCountries routes:absentRoutes block:[=] { - auto & a = GetFramework().GetCountryTree().GetActiveMapLayout(); - for (auto const & index : absentCountries) - a.DownloadMap(index, MapOptions::MapWithCarRouting); - for (auto const & index : absentRoutes) - a.DownloadMap(index, MapOptions::CarRouting); + auto & s = GetFramework().Storage(); + for (auto const & countryId : absentCountries) + s.DownloadNode(countryId); + for (auto const & countryId : absentRoutes) + s.DownloadNode(countryId); + [self openMapsDownloader]; }]; - self.forceRoutingStateChange = ForceRoutingStateChangeNone; break; } case routing::IRouter::Cancelled: - self.forceRoutingStateChange = ForceRoutingStateChangeNone; break; default: - [self.controlsManager handleRoutingError]; [self presentDefaultAlert:code]; - self.forceRoutingStateChange = ForceRoutingStateChangeNone; break; } + self.forceRoutingStateChange = ForceRoutingStateChangeNone; } +#pragma mark - MWMFrameworkUserMarkObserver + +- (void)processUserMarkActivation:(UserMark const *)mark +{ + if (mark == nullptr) + { + [self dismissPlacePage]; + + auto & f = GetFramework(); + if (!f.HasActiveUserMark() && self.controlsManager.searchHidden && !f.IsRouteNavigable()) + self.controlsManager.hidden = !self.controlsManager.hidden; + } + else + { + self.controlsManager.hidden = NO; + [self.controlsManager showPlacePage]; + } +} + +#pragma mark - Bookmarks + - (void)openBookmarks { BOOL const oneCategory = (GetFramework().GetBmCategoriesCount() == 1); @@ -808,8 +690,8 @@ NSString * const kAuthorizationSegue = @"Map2AuthorizationSegue"; #pragma mark - ShowDialog callback - (void)presentDownloaderAlert:(routing::IRouter::ResultCode)code - countries:(vector const &)countries - routes:(vector const &)routes + countries:(storage::TCountriesVec const &)countries + routes:(storage::TCountriesVec const &)routes block:(TMWMVoidBlock)block { if (countries.size() || routes.size()) diff --git a/iphone/Maps/Classes/MapsAppDelegate.h b/iphone/Maps/Classes/MapsAppDelegate.h index f0198b4109..c2c86f23d9 100644 --- a/iphone/Maps/Classes/MapsAppDelegate.h +++ b/iphone/Maps/Classes/MapsAppDelegate.h @@ -1,6 +1,6 @@ #import "DownloadIndicatorProtocol.h" -#import "MapsObservers.h" #import "MWMAlertViewController.h" +#import "MWMFrameworkListener.h" #import "MWMNavigationController.h" #include "indexer/map_style.hpp" @@ -17,7 +17,7 @@ typedef NS_ENUM(NSUInteger, MWMRoutingPlaneMode) }; @interface MapsAppDelegate : UIResponder + DownloadIndicatorProtocol> { NSInteger m_activeDownloadsCounter; UIBackgroundTaskIdentifier m_backgroundTask; @@ -31,7 +31,10 @@ typedef NS_ENUM(NSUInteger, MWMRoutingPlaneMode) @property (nonatomic, readonly) MapViewController * mapViewController; @property (nonatomic, readonly) LocationManager * m_locationManager; +@property (nonatomic, readonly) MWMFrameworkListener * frameworkListener; + + (MapsAppDelegate *)theApp; ++ (void)downloadCountry:(storage::TCountryId const &)countryId alertController:(MWMAlertViewController *)alertController onDownload:(TMWMVoidBlock)onDownload; - (void)enableStandby; - (void)disableStandby; diff --git a/iphone/Maps/Classes/MapsAppDelegate.mm b/iphone/Maps/Classes/MapsAppDelegate.mm index 4261c5d7e3..659b820526 100644 --- a/iphone/Maps/Classes/MapsAppDelegate.mm +++ b/iphone/Maps/Classes/MapsAppDelegate.mm @@ -89,7 +89,7 @@ void InitLocalizedStrings() using namespace osm_auth_ios; -@interface MapsAppDelegate () +@interface MapsAppDelegate () @property (nonatomic) NSInteger standbyCounter; @@ -106,7 +106,6 @@ using namespace osm_auth_ios; NSString * m_scheme; NSString * m_sourceApplication; - ActiveMapsObserver * m_mapsObserver; } + (MapsAppDelegate *)theApp @@ -114,6 +113,37 @@ using namespace osm_auth_ios; return (MapsAppDelegate *)[UIApplication sharedApplication].delegate; } ++ (void)downloadCountry:(storage::TCountryId const &)countryId alertController:(MWMAlertViewController *)alertController onDownload:(TMWMVoidBlock)onDownload +{ + auto & s = GetFramework().Storage(); + storage::NodeAttrs attrs; + s.GetNodeAttrs(countryId, attrs); + auto downloadCountry = ^ + { + s.DownloadNode(countryId); + if (onDownload) + onDownload(); + }; + switch (Platform::ConnectionStatus()) + { + case Platform::EConnectionType::CONNECTION_NONE: + [alertController presentNoConnectionAlert]; + break; + case Platform::EConnectionType::CONNECTION_WIFI: + downloadCountry(); + break; + case Platform::EConnectionType::CONNECTION_WWAN: + { + size_t const warningSizeForWWAN = 50 * MB; + if (attrs.m_mwmSize > warningSizeForWWAN) + [alertController presentNoWiFiAlertWithName:@(attrs.m_nodeLocalName.c_str()) downloadBlock:downloadCountry]; + else + downloadCountry(); + break; + } + } +} + #pragma mark - Notifications - (void)registerNotifications:(UIApplication *)application launchOptions:(NSDictionary *)launchOptions @@ -242,16 +272,16 @@ using namespace osm_auth_ios; [HttpThread setDownloadIndicatorProtocol:self]; InitLocalizedStrings(); [Preferences setup]; - [self subscribeToStorage]; + [[MWMFrameworkListener listener] addObserver:self]; [MapsAppDelegate customizeAppearance]; self.standbyCounter = 0; NSTimeInterval const minimumBackgroundFetchIntervalInSeconds = 6 * 60 * 60; [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:minimumBackgroundFetchIntervalInSeconds]; [self startAdServerForbiddenCheckTimer]; - Framework & f = GetFramework(); - [UIApplication sharedApplication].applicationIconBadgeNumber = f.GetCountryTree().GetActiveMapLayout().GetOutOfDateCount(); - f.InvalidateMyPosition(); + [self updateApplicationIconBadgeNumber]; + + GetFramework().InvalidateMyPosition(); } - (void)determineMapStyle @@ -677,7 +707,6 @@ using namespace osm_auth_ios; textFieldInSearchBar.defaultTextAttributes = @{NSForegroundColorAttributeName : [UIColor blackPrimaryText]}; } - - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [[LocalNotificationManager sharedManager] processNotification:notification onLaunch:NO]; @@ -745,25 +774,12 @@ using namespace osm_auth_ios; [self.mapViewController dismissPopover]; } -- (void)subscribeToStorage +- (void)updateApplicationIconBadgeNumber { - __weak MapsAppDelegate * weakSelf = self; - m_mapsObserver = new ActiveMapsObserver(weakSelf); - GetFramework().GetCountryTree().GetActiveMapLayout().AddListener(m_mapsObserver); - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outOfDateCountriesCountChanged:) name:MapsStatusChangedNotification object:nil]; -} - -- (void)countryStatusChangedAtPosition:(int)position inGroup:(storage::ActiveMapsLayout::TGroup const &)group -{ - ActiveMapsLayout & l = GetFramework().GetCountryTree().GetActiveMapLayout(); - int const outOfDateCount = l.GetOutOfDateCount(); - [[NSNotificationCenter defaultCenter] postNotificationName:MapsStatusChangedNotification object:nil userInfo:@{@"OutOfDate" : @(outOfDateCount)}]; -} - -- (void)outOfDateCountriesCountChanged:(NSNotification *)notification -{ - [UIApplication sharedApplication].applicationIconBadgeNumber = [[notification userInfo][@"OutOfDate"] integerValue]; + auto & s = GetFramework().Storage(); + storage::Storage::UpdateInfo updateInfo{}; + s.GetUpdateInfo(s.GetRootId(), updateInfo); + [UIApplication sharedApplication].applicationIconBadgeNumber = updateInfo.m_numberOfMwmFilesToUpdate; } - (void)setRoutingPlaneMode:(MWMRoutingPlaneMode)routingPlaneMode @@ -772,6 +788,13 @@ using namespace osm_auth_ios; [self.mapViewController updateStatusBarStyle]; } +#pragma mark - MWMFrameworkStorageObserver + +- (void)processCountryEvent:(storage::TCountryId const &)countryId +{ + [self updateApplicationIconBadgeNumber]; +} + #pragma mark - Properties - (MapViewController *)mapViewController @@ -779,6 +802,14 @@ using namespace osm_auth_ios; return [(UINavigationController *)self.window.rootViewController viewControllers].firstObject; } +@synthesize frameworkListener = _frameworkListener; +- (MWMFrameworkListener *)frameworkListener +{ + if (!_frameworkListener) + _frameworkListener = [[MWMFrameworkListener alloc] init]; + return _frameworkListener; +} + #pragma mark - Route state - (void)restoreRouteState diff --git a/iphone/Maps/Classes/MapsObservers.h b/iphone/Maps/Classes/MapsObservers.h deleted file mode 100644 index 2adc45e023..0000000000 --- a/iphone/Maps/Classes/MapsObservers.h +++ /dev/null @@ -1,56 +0,0 @@ - -#include "Framework.h" -#include "storage/storage_defines.hpp" - -using namespace storage; - -@protocol ActiveMapsObserverProtocol - -- (void)countryStatusChangedAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group; - -@optional -- (void)countryGroupChangedFromPosition:(int)oldPosition inGroup:(ActiveMapsLayout::TGroup const &)oldGroup toPosition:(int)newPosition inGroup:(ActiveMapsLayout::TGroup const &)newGroup; -- (void)countryOptionsChangedAtPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group; -- (void)countryDownloadingProgressChanged:(LocalAndRemoteSizeT const &)progress atPosition:(int)position inGroup:(ActiveMapsLayout::TGroup const &)group; - -@end - -@protocol CountryTreeObserverProtocol - -- (void)countryStatusChangedAtPositionInNode:(int)position; -- (void)countryDownloadingProgressChanged:(LocalAndRemoteSizeT const &)progress atPositionInNode:(int)position; - -@end - -@class MWMWatchNotification; - -class ActiveMapsObserver : public ActiveMapsLayout::ActiveMapsListener -{ -public: - ActiveMapsObserver(id delegateObject); - virtual ~ActiveMapsObserver(); - - virtual void CountryGroupChanged(ActiveMapsLayout::TGroup const & oldGroup, int oldPosition, - ActiveMapsLayout::TGroup const & newGroup, int newPosition); - virtual void CountryStatusChanged(ActiveMapsLayout::TGroup const & group, int position, - TStatus const & oldStatus, TStatus const & newStatus); - virtual void CountryOptionsChanged(ActiveMapsLayout::TGroup const & group, int position, - MapOptions const & oldOpt, MapOptions const & newOpt); - virtual void DownloadingProgressUpdate(ActiveMapsLayout::TGroup const & group, int position, LocalAndRemoteSizeT const & progress); - -private: - id m_delegateObject; -}; - - -class CountryTreeObserver : public CountryTree::CountryTreeListener -{ -public: - CountryTreeObserver(id delegateObject); - - virtual void ItemStatusChanged(int childPosition); - virtual void ItemProgressChanged(int childPosition, LocalAndRemoteSizeT const & sizes); - -private: - id m_delegateObject; -}; diff --git a/iphone/Maps/Classes/MapsObservers.mm b/iphone/Maps/Classes/MapsObservers.mm deleted file mode 100644 index 9da1e1dafe..0000000000 --- a/iphone/Maps/Classes/MapsObservers.mm +++ /dev/null @@ -1,58 +0,0 @@ - -#import -#import "MapsObservers.h" -#import "Common.h" - -ActiveMapsObserver::ActiveMapsObserver(id delegateObject) -: m_delegateObject(delegateObject) -{ -} - -ActiveMapsObserver::~ActiveMapsObserver() -{ - m_delegateObject = nil; -} - -void ActiveMapsObserver::CountryGroupChanged(ActiveMapsLayout::TGroup const & oldGroup, int oldPosition, - ActiveMapsLayout::TGroup const & newGroup, int newPosition) -{ - if ([m_delegateObject respondsToSelector:@selector(countryGroupChangedFromPosition:inGroup:toPosition:inGroup:)]) - [m_delegateObject countryGroupChangedFromPosition:oldPosition inGroup:oldGroup toPosition:newPosition inGroup:newGroup]; -} - -void ActiveMapsObserver::CountryStatusChanged(ActiveMapsLayout::TGroup const & group, int position, - TStatus const & oldStatus, TStatus const & newStatus) -{ - if ([m_delegateObject respondsToSelector:@selector(countryStatusChangedAtPosition:inGroup:)]) - [m_delegateObject countryStatusChangedAtPosition:position inGroup:group]; -} - -void ActiveMapsObserver::CountryOptionsChanged(ActiveMapsLayout::TGroup const & group, int position, MapOptions const & oldOpt, MapOptions const & newOpt) -{ - if ([m_delegateObject respondsToSelector:@selector(countryOptionsChangedAtPosition:inGroup:)]) - [m_delegateObject countryOptionsChangedAtPosition:position inGroup:group]; -} - -void ActiveMapsObserver::DownloadingProgressUpdate(ActiveMapsLayout::TGroup const & group, int position, LocalAndRemoteSizeT const & progress) -{ - if ([m_delegateObject respondsToSelector:@selector(countryDownloadingProgressChanged:atPosition:inGroup:)]) - [m_delegateObject countryDownloadingProgressChanged:progress atPosition:position inGroup:group]; -} - - -CountryTreeObserver::CountryTreeObserver(id delegateObject) -: m_delegateObject(delegateObject) -{ -} - -void CountryTreeObserver::ItemStatusChanged(int childPosition) -{ - if ([m_delegateObject respondsToSelector:@selector(countryStatusChangedAtPositionInNode:)]) - [m_delegateObject countryStatusChangedAtPositionInNode:childPosition]; -} - -void CountryTreeObserver::ItemProgressChanged(int childPosition, storage::LocalAndRemoteSizeT const & sizes) -{ - if ([m_delegateObject respondsToSelector:@selector(countryDownloadingProgressChanged:atPositionInNode:)]) - [m_delegateObject countryDownloadingProgressChanged:sizes atPositionInNode:childPosition]; -} diff --git a/iphone/Maps/Classes/ProgressView.h b/iphone/Maps/Classes/ProgressView.h deleted file mode 100644 index 2bafb836cb..0000000000 --- a/iphone/Maps/Classes/ProgressView.h +++ /dev/null @@ -1,20 +0,0 @@ - -#import - -@class ProgressView; -@protocol ProgressViewDelegate - -- (void)progressViewDidCancel:(ProgressView *)progress; -- (void)progressViewDidStart:(ProgressView *)progress; - -@end - -@interface ProgressView : UIView - -@property (nonatomic) BOOL failedMode; -@property (nonatomic) double progress; -- (void)setProgress:(double)progress animated:(BOOL)animated; - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Classes/ProgressView.mm b/iphone/Maps/Classes/ProgressView.mm deleted file mode 100644 index a1f40ab3ca..0000000000 --- a/iphone/Maps/Classes/ProgressView.mm +++ /dev/null @@ -1,158 +0,0 @@ -#import "ProgressView.h" -#import "UIColor+MapsMeColor.h" - -@interface ProgressView () - -@property (nonatomic) CAShapeLayer * progressLayer; -@property (nonatomic) CAShapeLayer * backgroundCircleLayer; -@property (nonatomic) CAShapeLayer * stopRectLayer; -@property (nonatomic) UIImageView * startTriangleView; -@property (nonatomic) UIButton * button; -@property (nonatomic) NSNumber * nextProgressToAnimate; - -@end - -@implementation ProgressView - -#define CIRCLE_RADIUS 18 - -- (instancetype)init -{ - self = [super initWithFrame:CGRectMake(0, 0, 44, 44)]; - - [self.layer addSublayer:self.backgroundCircleLayer]; - [self.layer addSublayer:self.progressLayer]; - [self.layer addSublayer:self.stopRectLayer]; - [self addSubview:self.startTriangleView]; - self.startTriangleView.center = CGPointMake(self.width / 2 + 1, self.height / 2); - [self addSubview:self.button]; - - [self setProgress:0 animated:NO]; - - return self; -} - -- (void)buttonPressed:(id)sender -{ - if (self.failedMode) - [self.delegate progressViewDidStart:self]; - else - [self.delegate progressViewDidCancel:self]; -} - -- (CGFloat)angleWithProgress:(double)progress -{ - return 2 * M_PI * progress - M_PI_2; -} - -NSString * const CircleAnimationKey = @"CircleAnimation"; - -- (void)setProgress:(double)progress animated:(BOOL)animated -{ - if ([self.progressLayer animationForKey:CircleAnimationKey]) - { - self.nextProgressToAnimate = @(progress); - } - else - { - self.nextProgressToAnimate = nil; - CGPoint const center = CGPointMake(self.width / 2, self.height / 2); - CGFloat const radius = CIRCLE_RADIUS - self.progressLayer.lineWidth; - UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:[self angleWithProgress:0] endAngle:[self angleWithProgress:progress] clockwise:YES]; - if (animated) - { - self.progressLayer.path = path.CGPath; - - CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; - animation.duration = 0.3; - animation.repeatCount = 1; - animation.fromValue = @(_progress / progress); - animation.toValue = @1; - animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - animation.delegate = self; - [self.progressLayer addAnimation:animation forKey:CircleAnimationKey]; - } - else - { - self.progressLayer.path = path.CGPath; - } - _progress = progress; - } -} - -- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag -{ - if (self.nextProgressToAnimate) - [self setProgress:[self.nextProgressToAnimate doubleValue] animated:YES]; -} - -- (void)setFailedMode:(BOOL)failedMode -{ - _failedMode = failedMode; - - self.progressLayer.strokeColor = (failedMode ? [UIColor redColor] : [UIColor linkBlue]).CGColor; - self.stopRectLayer.hidden = failedMode; - self.startTriangleView.hidden = !failedMode; -} - -- (UIButton *)button -{ - if (!_button) - { - _button = [[UIButton alloc] initWithFrame:self.bounds]; - [_button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; - } - return _button; -} - -- (CAShapeLayer *)stopRectLayer -{ - if (!_stopRectLayer) - { - _stopRectLayer = [CAShapeLayer layer]; - CGFloat const side = 11; - CGRect const rect = CGRectMake((self.width - side) / 2, (self.width - side) / 2, side, side); - _stopRectLayer.fillColor = [UIColor linkBlue].CGColor; - _stopRectLayer.path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:2].CGPath; - } - return _stopRectLayer; -} - -- (UIImageView *)startTriangleView -{ - if (!_startTriangleView) - _startTriangleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ProgressTriangle"]]; - return _startTriangleView; -} - -- (CAShapeLayer *)backgroundCircleLayer -{ - if (!_backgroundCircleLayer) - { - _backgroundCircleLayer = [CAShapeLayer layer]; - _backgroundCircleLayer.fillColor = [UIColor clearColor].CGColor; - _backgroundCircleLayer.lineWidth = 2; - _backgroundCircleLayer.strokeColor = [UIColor pressBackground].CGColor; - _backgroundCircleLayer.shouldRasterize = YES; - _backgroundCircleLayer.rasterizationScale = 2 * [UIScreen mainScreen].scale; - CGRect rect = CGRectMake(self.width / 2 - CIRCLE_RADIUS, self.height / 2 - CIRCLE_RADIUS, 2 * CIRCLE_RADIUS, 2 * CIRCLE_RADIUS); - rect = CGRectInset(rect, _backgroundCircleLayer.lineWidth, _backgroundCircleLayer.lineWidth); - _backgroundCircleLayer.path = [UIBezierPath bezierPathWithOvalInRect:rect].CGPath; - } - return _backgroundCircleLayer; -} - -- (CAShapeLayer *)progressLayer -{ - if (!_progressLayer) - { - _progressLayer = [CAShapeLayer layer]; - _progressLayer.fillColor = [UIColor clearColor].CGColor; - _progressLayer.lineWidth = 3; - _progressLayer.shouldRasterize = YES; - _progressLayer.rasterizationScale = 2 * [UIScreen mainScreen].scale; - } - return _progressLayer; -} - -@end diff --git a/iphone/Maps/Classes/UIViewController+Navigation.mm b/iphone/Maps/Classes/UIViewController+Navigation.mm index f8808fb6ff..ad70133e30 100644 --- a/iphone/Maps/Classes/UIViewController+Navigation.mm +++ b/iphone/Maps/Classes/UIViewController+Navigation.mm @@ -3,7 +3,7 @@ @implementation UIViewController (Navigation) -- (void)showBackButton +- (UIButton *)backButton { UIImage * backImage = [UIImage imageNamed:@"ic_nav_bar_back"]; CGFloat const imageSide = backImage.size.width; @@ -11,8 +11,12 @@ [button setImage:backImage forState:UIControlStateNormal]; [button addTarget:self action:@selector(backTap) forControlEvents:UIControlEventTouchUpInside]; button.imageEdgeInsets = UIEdgeInsetsMake(0., -32, 0., 0.); - UIBarButtonItem * leftItem = [[UIBarButtonItem alloc] initWithCustomView:button]; - self.navigationItem.leftBarButtonItem = leftItem; + return button; +} + +- (void)showBackButton +{ + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[self backButton]]; } - (void)backTap diff --git a/iphone/Maps/CountryTreeVC.h b/iphone/Maps/CountryTreeVC.h deleted file mode 100644 index 15ba23c996..0000000000 --- a/iphone/Maps/CountryTreeVC.h +++ /dev/null @@ -1,9 +0,0 @@ - -#import -#import "DownloaderParentVC.h" - -@interface CountryTreeVC : DownloaderParentVC - -- (id)initWithNodePosition:(int)position; - -@end diff --git a/iphone/Maps/CountryTreeVC.mm b/iphone/Maps/CountryTreeVC.mm deleted file mode 100644 index 1e366dac58..0000000000 --- a/iphone/Maps/CountryTreeVC.mm +++ /dev/null @@ -1,381 +0,0 @@ - -#import "ActiveMapsVC.h" -#import "Common.h" -#import "CountryTreeVC.h" -#import "Statistics.h" - -extern NSString * const MapsStatusChangedNotification; - -@interface CountryTreeVC () - -@end - -@implementation CountryTreeVC -{ - CountryTree m_tree; - CountryTreeObserver * m_treeObserver; -} - -- (id)initWithNodePosition:(int)position -{ - self = [super init]; - - if (position == -1) - { - self.tree.SetDefaultRoot(); - self.title = L(@"download_maps"); - } - else - { - ASSERT(position < self.tree.GetChildCount(), ()); - self.title = @(self.tree.GetChildName(position).c_str()); - self.tree.SetChildAsRoot(position); - if (self.tree.IsDownloadAllAvailable()) - { - self.navigationItem.rightBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:L(@"download_all") - style:UIBarButtonItemStylePlain - target:self - action:@selector(onDownloadAll)]; - } - } - - __weak CountryTreeVC * weakSelf = self; - m_treeObserver = new CountryTreeObserver(weakSelf); - self.tree.SetListener(m_treeObserver); - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outOfDateCountriesCountChanged:) name:MapsStatusChangedNotification object:nil]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - m_tree = CountryTree(); - [self.tableView reloadData]; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - if (self.isMovingFromParentViewController) - { - if (self.tree.HasParent()) - self.tree.SetParentAsRoot(); - else - self.tree.ResetListener(); - } -} - -- (void)onDownloadAll -{ - [[Statistics instance] logEvent:kStatDownloadAll]; - self.tree.DownloadAll(); -} - -#define TOP_ROWS_COUNT 1 - -- (NSIndexPath *)downloadedCountriesIndexPath -{ - return [NSIndexPath indexPathForRow:0 inSection:0]; -} - -- (void)outOfDateCountriesCountChanged:(NSNotification *)notification -{ - NSInteger const count = [[notification userInfo][@"OutOfDate"] integerValue]; - if ([self activeMapsRowIsVisible]) - { - MapCell * cell = (MapCell *)[self.tableView cellForRowAtIndexPath:[self downloadedCountriesIndexPath]]; - cell.badgeView.value = count; - } -} - -#pragma mark - Helpers - -- (CountryTree &)tree -{ - if (m_tree.IsValid()) - return m_tree; - else - return GetFramework().GetCountryTree(); -} - -- (MapCell *)cellAtPositionInNode:(int)position -{ - NSInteger const section = [self activeMapsRowIsVisible] ? [self downloadedCountriesIndexPath].section + 1 : 0; - return (MapCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:position inSection:section]]; -} - -- (BOOL)activeMapsRowIsVisible -{ - return !self.tree.GetActiveMapLayout().IsEmpty() && !self.tree.HasParent(); -} - -- (BOOL)isActiveMapsIndexPath:(NSIndexPath *)indexPath -{ - return [self activeMapsRowIsVisible] && [indexPath isEqual:[self downloadedCountriesIndexPath]]; -} - -- (void)configureSizeLabelOfMapCell:(MapCell *)cell position:(int)position status:(TStatus const &)status options:(MapOptions const &)options -{ - if (self.tree.IsLeaf(position)) - { - if (status == TStatus::ENotDownloaded) - { - LocalAndRemoteSizeT const size = self.tree.GetRemoteLeafSizes(position); - cell.sizeLabel.text = formattedSize(size.first); - } - else if (status == TStatus::EOnDisk || status == TStatus::EOnDiskOutOfDate) - cell.sizeLabel.text = formattedSize(self.tree.GetLeafSize(position, options).second); - else if (status == TStatus::EOutOfMemFailed || status == TStatus::EDownloadFailed || status == TStatus::EDownloading || status == TStatus::EInQueue) - cell.sizeLabel.text = formattedSize(self.tree.GetDownloadableLeafSize(position).second); - } -} - -#pragma mark - DownloaderParentVC virtual methods implementation - -- (NSString *)parentTitle -{ - return self.tree.IsCountryRoot() ? @(self.tree.GetRootName().c_str()) : nil; -} - -- (NSString *)selectedMapName -{ - return @(self.tree.GetChildName(self.selectedPosition).c_str()); -} - -- (uint64_t)selectedMapSizeWithOptions:(MapOptions)options -{ - return self.tree.GetLeafSize(self.selectedPosition, options).second; -} - -- (TStatus)selectedMapStatus -{ - return self.tree.GetLeafStatus(self.selectedPosition); -} - -- (MapOptions)selectedMapOptions -{ - return self.tree.GetLeafOptions(self.selectedPosition); -} - -- (void)performAction:(DownloaderAction)action withSizeCheck:(BOOL)check -{ - switch (action) - { - case DownloaderActionDownloadMap: - if (check == NO || [self canDownloadSelectedMap]) - self.tree.DownloadCountry(self.selectedPosition, self.selectedInActionSheetOptions); - break; - - case DownloaderActionDeleteMap: - self.tree.DeleteCountry(self.selectedPosition, self.selectedInActionSheetOptions); - break; - - case DownloaderActionCancelDownloading: - self.tree.CancelDownloading(self.selectedPosition); - break; - - case DownloaderActionZoomToCountry: - self.tree.ShowLeafOnMap(self.selectedPosition); - [[Statistics instance] logEvent:@"Show Map From Download Countries Screen"]; - [self.navigationController popToRootViewControllerAnimated:YES]; - break; - } -} - -#pragma mark - TableView - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section -{ - return 13; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section -{ - return 0.001; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return [self activeMapsRowIsVisible] ? 1 + TOP_ROWS_COUNT : 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - if ([self activeMapsRowIsVisible] && section == [self downloadedCountriesIndexPath].section) - return TOP_ROWS_COUNT; - else - return self.tree.GetChildCount(); -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MapCell * cell = [tableView dequeueReusableCellWithIdentifier:[MapCell className]]; - if (!cell) - cell = [[MapCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[MapCell className]]; - - if ([self isActiveMapsIndexPath:indexPath]) - { - cell.titleLabel.text = L(@"downloader_downloaded_maps"); - cell.subtitleLabel.text = nil; - cell.parentMode = YES; - cell.badgeView.value = self.tree.GetActiveMapLayout().GetOutOfDateCount(); - cell.separatorTop.hidden = NO; - cell.separatorBottom.hidden = NO; - cell.separator.hidden = YES; - } - else - { - int const position = static_cast(indexPath.row); - bool const isLeaf = self.tree.IsLeaf(position); - NSInteger const numberOfRows = [self tableView:tableView numberOfRowsInSection:indexPath.section]; - BOOL const isLast = (indexPath.row == numberOfRows - 1); - BOOL const isFirst = (indexPath.row == 0); - - cell.titleLabel.text = @(self.tree.GetChildName(position).c_str()); - cell.subtitleLabel.text = [self parentTitle]; - cell.delegate = self; - cell.badgeView.value = 0; - cell.parentMode = !isLeaf; - cell.separatorTop.hidden = !isFirst; - cell.separatorBottom.hidden = !isLast; - cell.separator.hidden = isLast; - if (isLeaf) - { - MapOptions const options = self.tree.GetLeafOptions(position); - TStatus const status = self.tree.GetLeafStatus(position); - if (status == TStatus::EOutOfMemFailed || status == TStatus::EDownloadFailed || status == TStatus::EDownloading || status == TStatus::EInQueue) - { - LocalAndRemoteSizeT const size = self.tree.GetDownloadableLeafSize(position); - cell.downloadProgress = (double)size.first / size.second; - } - cell.status = status; - cell.options = options; - [self configureSizeLabelOfMapCell:cell position:position status:status options:options]; - } - } - - return cell; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - int const position = static_cast(indexPath.row); - if (self.tree.IsLeaf(position)) - { - TStatus const status = self.tree.GetLeafStatus(position); - return status == TStatus::EOnDisk || status == TStatus::EOnDiskOutOfDate; - } - return NO; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) - { - int const position = static_cast(indexPath.row); - self.tree.DeleteCountry(position, self.tree.GetLeafOptions(position)); - [tableView setEditing:NO animated:YES]; - } -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if ([self isActiveMapsIndexPath:indexPath]) - { - ActiveMapsVC * vc = [[ActiveMapsVC alloc] init]; - [self.navigationController pushViewController:vc animated:YES]; - } - else - { - self.selectedPosition = static_cast(indexPath.row); - if (self.tree.IsLeaf(self.selectedPosition)) - { - switch ([self selectedMapStatus]) - { - case TStatus::ENotDownloaded: - case TStatus::EDownloadFailed: - case TStatus::EOutOfMemFailed: - self.tree.DownloadCountry(self.selectedPosition, MapOptions::Map); - break; - case TStatus::EDownloading: - case TStatus::EInQueue: - self.tree.CancelDownloading(self.selectedPosition); - break; - default: - { - MapCell * cell = [self cellAtPositionInNode:self.selectedPosition]; - UIActionSheet * actionSheet = [self actionSheetToPerformActionOnSelectedMap]; - [actionSheet showFromRect:cell.frame inView:cell.superview animated:YES]; - break; - } - } - } - else - { - m_tree = self.tree; - CountryTreeVC * vc = [[CountryTreeVC alloc] initWithNodePosition:self.selectedPosition]; - [self.navigationController pushViewController:vc animated:YES]; - } - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [MapCell cellHeight]; -} - -#pragma mark - MapCellDelegate - -- (void)mapCellDidStartDownloading:(MapCell *)cell -{ - self.selectedPosition = static_cast([self.tableView indexPathForCell:cell].row); - TStatus const status = [self selectedMapStatus]; - if (status == TStatus::EDownloadFailed || status == TStatus::EOutOfMemFailed) - if ([self canDownloadSelectedMap]) - self.tree.RetryDownloading(self.selectedPosition); -} - -- (void)mapCellDidCancelDownloading:(MapCell *)cell -{ - self.selectedPosition = static_cast([self.tableView indexPathForCell:cell].row); - [[self actionSheetToCancelDownloadingSelectedMap] showFromRect:cell.frame inView:cell.superview animated:YES]; -} - -#pragma mark - CountryTree core callbacks - -- (void)countryStatusChangedAtPositionInNode:(int)position -{ - if ([self activeMapsRowIsVisible]) - { - [self.tableView reloadData]; - } - else - { - MapCell * cell = [self cellAtPositionInNode:position]; - TStatus const status = self.tree.GetLeafStatus(position); - MapOptions const options = self.tree.GetLeafOptions(position); - [self configureSizeLabelOfMapCell:cell position:position status:status options:options]; - [cell setStatus:self.tree.GetLeafStatus(position) options:options animated:YES]; - } -} - -- (void)countryDownloadingProgressChanged:(LocalAndRemoteSizeT const &)progress atPositionInNode:(int)position -{ - MapCell * cell = [self cellAtPositionInNode:position]; - [cell setDownloadProgress:((double)progress.first / progress.second) animated:YES]; -} - -@end diff --git a/iphone/Maps/DownloaderParentVC.h b/iphone/Maps/DownloaderParentVC.h deleted file mode 100644 index d62061c096..0000000000 --- a/iphone/Maps/DownloaderParentVC.h +++ /dev/null @@ -1,40 +0,0 @@ -#import "MapsObservers.h" -#import "MapCell.h" -#import "MWMViewController.h" - -#include "storage/storage_defines.hpp" -#include "platform/preferred_languages.hpp" - -typedef NS_ENUM(NSUInteger, DownloaderAction) -{ - DownloaderActionDownloadMap, - DownloaderActionDeleteMap, - DownloaderActionCancelDownloading, - DownloaderActionZoomToCountry -}; - -using namespace storage; - -@interface DownloaderParentVC : MWMViewController - -- (BOOL)canDownloadSelectedMap; -- (UIActionSheet *)actionSheetToCancelDownloadingSelectedMap; -- (UIActionSheet *)actionSheetToPerformActionOnSelectedMap; - -@property (nonatomic) UITableView * tableView; - -// CountryTree methods accept int. It should be enough to store all countries. -@property (nonatomic) int selectedPosition; - -@property (nonatomic) MapOptions selectedInActionSheetOptions; -@property (nonatomic) NSMutableDictionary * actionSheetActions; - -// virtual -- (NSString *)parentTitle; -- (NSString *)selectedMapName; -- (uint64_t)selectedMapSizeWithOptions:(MapOptions)options; -- (TStatus)selectedMapStatus; -- (MapOptions)selectedMapOptions; -- (void)performAction:(DownloaderAction)action withSizeCheck:(BOOL)check; - -@end diff --git a/iphone/Maps/DownloaderParentVC.mm b/iphone/Maps/DownloaderParentVC.mm deleted file mode 100644 index b228549598..0000000000 --- a/iphone/Maps/DownloaderParentVC.mm +++ /dev/null @@ -1,162 +0,0 @@ -#import "Common.h" -#import "DownloaderParentVC.h" -#import "DiskFreeSpace.h" -#import "MWMAlertViewController.h" -#import "UIColor+MapsMeColor.h" - -#include "platform/platform.hpp" - -@implementation DownloaderParentVC - -- (void)viewDidLoad -{ - [super viewDidLoad]; - [self.view addSubview:self.tableView]; - self.tableView.backgroundColor = [UIColor pressBackground]; - self.tableView.separatorColor = [UIColor blackDividers]; -} - -- (UITableView *)tableView -{ - if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; - _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _tableView.delegate = self; - _tableView.dataSource = self; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - } - return _tableView; -} - -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (buttonIndex != alertView.cancelButtonIndex) - [self download]; -} - -- (void)download -{ - if (self.selectedInActionSheetOptions == MapOptions::MapWithCarRouting) - [self performAction:DownloaderActionDownloadMap withSizeCheck:NO]; -} - -#pragma mark - Virtual methods - -- (void)performAction:(DownloaderAction)action withSizeCheck:(BOOL)check {} -- (NSString *)parentTitle { return nil; } -- (NSString *)selectedMapName { return nil; } -- (uint64_t)selectedMapSizeWithOptions:(MapOptions)options { return 0; } -- (TStatus)selectedMapStatus { return TStatus::EUnknown; } -- (MapOptions)selectedMapOptions { return MapOptions::Map; } - -#pragma mark - Virtual table view methods - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 0; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return nil; } - -#pragma mark - Public methods for successors - -- (BOOL)canDownloadSelectedMap -{ - uint64_t const size = [self selectedMapSizeWithOptions:self.selectedInActionSheetOptions]; - NSString * name = [self selectedMapName]; - - Platform::EConnectionType const connection = Platform::ConnectionStatus(); - MWMAlertViewController * alert = [[MWMAlertViewController alloc] initWithViewController:self]; - if (connection != Platform::EConnectionType::CONNECTION_NONE) - { - if (connection == Platform::EConnectionType::CONNECTION_WWAN && size > 50 * MB) - [alert presentNoWiFiAlertWithName:name downloadBlock:^{[self download];}]; - else - return YES; - } - else - { - [alert presentNoConnectionAlert]; - } - return NO; -} - -- (UIActionSheet *)actionSheetToPerformActionOnSelectedMap -{ - [self.actionSheetActions removeAllObjects]; - UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:self.actionSheetTitle delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; - NSString * fullSize = formattedSize([self selectedMapSizeWithOptions:MapOptions::MapWithCarRouting]); - switch ([self selectedMapStatus]) - { - case TStatus::EOnDisk: - [self addButtonWithTitle:L(@"zoom_to_country") action:DownloaderActionZoomToCountry toActionSheet:actionSheet]; - [self addButtonWithTitle:L(@"downloader_delete_map") action:DownloaderActionDeleteMap toActionSheet:actionSheet]; - actionSheet.destructiveButtonIndex = actionSheet.numberOfButtons - 1; - break; - case TStatus::EOnDiskOutOfDate: - [self addButtonWithTitle:L(@"zoom_to_country") action:DownloaderActionZoomToCountry toActionSheet:actionSheet]; - [self addButtonWithTitle:[NSString stringWithFormat:@"%@, %@", L(@"downloader_update_map"), fullSize] action:DownloaderActionDownloadMap toActionSheet:actionSheet]; - [self addButtonWithTitle:L(@"downloader_delete_map") action:DownloaderActionDeleteMap toActionSheet:actionSheet]; - actionSheet.destructiveButtonIndex = actionSheet.numberOfButtons - 1; - break; - case TStatus::EUnknown: - NSAssert(NO, @"Invalid status"); - break; - default: - break; - } - - if (!IPAD) - { - [actionSheet addButtonWithTitle:L(@"cancel")]; - actionSheet.cancelButtonIndex = actionSheet.numberOfButtons - 1; - } - - return actionSheet; -} - -- (UIActionSheet *)actionSheetToCancelDownloadingSelectedMap -{ - [self.actionSheetActions removeAllObjects]; - self.actionSheetActions[@0] = @(DownloaderActionCancelDownloading); - - return [[UIActionSheet alloc] initWithTitle:[self actionSheetTitle] delegate:self cancelButtonTitle:L(@"cancel") destructiveButtonTitle:L(@"cancel_download") otherButtonTitles:nil]; -} - -#pragma mark - - -- (NSString *)actionSheetTitle -{ - if ([self parentTitle]) - return [NSString stringWithFormat:@"%@, %@", [self selectedMapName].uppercaseString, [self parentTitle].uppercaseString]; - else - return [self selectedMapName].uppercaseString; -} - -- (void)addButtonWithTitle:(NSString *)title action:(DownloaderAction)action toActionSheet:(UIActionSheet *)actionSheet -{ - [actionSheet addButtonWithTitle:title]; - self.actionSheetActions[@(actionSheet.numberOfButtons - 1)] = @(action); -} - -- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (buttonIndex != actionSheet.cancelButtonIndex) - { - DownloaderAction const action = (DownloaderAction)[self.actionSheetActions[@(buttonIndex)] integerValue]; - self.selectedInActionSheetOptions = MapOptions::MapWithCarRouting; - [self performAction:action withSizeCheck:YES]; - } -} - -#pragma mark - - -- (NSMutableDictionary *)actionSheetActions -{ - if (!_actionSheetActions) - _actionSheetActions = [[NSMutableDictionary alloc] init]; - return _actionSheetActions; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/Contents.json b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/Contents.json deleted file mode 100644 index aa3202d4cc..0000000000 --- a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_down.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_down@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_down@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down.png deleted file mode 100644 index 6647dcb526..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down.png and /dev/null differ diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@2x.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@2x.png deleted file mode 100644 index c9fc32bd9b..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@2x.png and /dev/null differ diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@3x.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@3x.png deleted file mode 100644 index b2be8eb57c..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_down.imageset/ic_arrow_gray_down@3x.png and /dev/null differ diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/Contents.json b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/Contents.json deleted file mode 100644 index ea8c76e9bc..0000000000 --- a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_up.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_up@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ic_arrow_gray_up@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up.png deleted file mode 100644 index 011014a374..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up.png and /dev/null differ diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@2x.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@2x.png deleted file mode 100644 index 5e19a9c7a2..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@2x.png and /dev/null differ diff --git a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@3x.png b/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@3x.png deleted file mode 100644 index bec5b62003..0000000000 Binary files a/iphone/Maps/Images.xcassets/Arrows/ic_arrow_gray_up.imageset/ic_arrow_gray_up@3x.png and /dev/null differ diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 2d657701dd..13eda15458 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -40,48 +40,23 @@ 3411387D1C15AE73002E3B3E /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3411387C1C15AE73002E3B3E /* libeditor.a */; }; 341138801C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */; }; 341138811C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */; }; + 341223BB1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 341223BA1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm */; }; 341522BF1B666A550077AA8F /* MWMAPIBarView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 341522BE1B666A550077AA8F /* MWMAPIBarView.mm */; }; - 34181E8D1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E6F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm */; }; - 34181E8E1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E6F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm */; }; - 34181E8F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E701C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib */; }; - 34181E901C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E701C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib */; }; - 34181E911C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E721C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm */; }; - 34181E921C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E721C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm */; }; - 34181E931C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E731C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib */; }; - 34181E941C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E731C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib */; }; - 34181E951C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E751C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm */; }; - 34181E961C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E751C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm */; }; - 34181E971C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E761C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib */; }; - 34181E981C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E761C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib */; }; - 34181E991C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E781C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm */; }; - 34181E9A1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E781C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm */; }; - 34181E9B1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E791C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib */; }; - 34181E9C1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E791C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib */; }; - 34181E9D1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E7B1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm */; }; - 34181E9E1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E7B1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm */; }; - 34181E9F1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E7C1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib */; }; - 34181EA01C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E7C1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib */; }; - 34181EA11C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E7E1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */; }; - 34181EA21C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E7E1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */; }; - 34181EA31C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E7F1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */; }; - 34181EA41C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E7F1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */; }; - 34181EAF1C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E881C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm */; }; - 34181EB01C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E881C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm */; }; - 34181EB11C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E891C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib */; }; - 34181EB21C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E891C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib */; }; - 34181EB31C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E8B1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm */; }; - 34181EB41C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181E8B1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm */; }; - 34181EB51C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E8C1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib */; }; - 34181EB61C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34181E8C1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib */; }; 34181EB91C0ED1C30081B586 /* MWMOpeningHoursSection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181EB81C0ED1C30081B586 /* MWMOpeningHoursSection.mm */; }; 34181EBA1C0ED1C30081B586 /* MWMOpeningHoursSection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34181EB81C0ED1C30081B586 /* MWMOpeningHoursSection.mm */; }; 341876B41C28026D005A0C9A /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 454040681AD2D8D2007A9B12 /* CoreVideo.framework */; }; 341876B51C280272005A0C9A /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 454040681AD2D8D2007A9B12 /* CoreVideo.framework */; }; + 3419AAA71BDFD047003DC110 /* MWMUpdateMapsAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3419AAA61BDFD047003DC110 /* MWMUpdateMapsAlert.mm */; }; + 3419AAA91BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3419AAA81BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib */; }; 341C2A571B72092A00AD41A1 /* 02_droidsans-fallback.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9DF04B231B71010E00DACAF1 /* 02_droidsans-fallback.ttf */; }; 341C2A5B1B720B8A00AD41A1 /* MWMAPIBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 341C2A5A1B720B8A00AD41A1 /* MWMAPIBarView.xib */; }; 341F09841C20138100F18AC5 /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 341F09831C20138100F18AC5 /* libpugixml.a */; }; + 34212C031BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C021BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib */; }; + 34212C051BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C041BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib */; }; + 34212C071BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C061BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib */; }; 342AD76F1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AD76E1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm */; }; 342AD7721B53D32F00E0B997 /* UIView+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AD7711B53D32F00E0B997 /* UIView+RuntimeAttributes.mm */; }; + 342AF0E01BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AF0DF1BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm */; }; 342BB7AB1BC7CC5C00DF6443 /* PlacePageBookmarkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 342BB7AA1BC7CC5C00DF6443 /* PlacePageBookmarkCell.xib */; }; 342CC5F11C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342CC5F01C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm */; }; 342CC5F21C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342CC5F01C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm */; }; @@ -97,8 +72,11 @@ 3438CDF81B8616760051AA78 /* MWMSearchShowOnMapCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3438CDF61B8616760051AA78 /* MWMSearchShowOnMapCell.mm */; }; 3438CDF91B8616760051AA78 /* MWMSearchShowOnMapCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3438CDF71B8616760051AA78 /* MWMSearchShowOnMapCell.xib */; }; 3438CDFC1B862F5C0051AA78 /* MWMSearchContentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3438CDFB1B862F5C0051AA78 /* MWMSearchContentView.mm */; }; + 343D18791BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 343D18781BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib */; }; 3445CEAE1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3445CEAD1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm */; }; 3445CEAF1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3445CEAD1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm */; }; + 34479C7C1C60C6130065D261 /* MWMFrameworkListener.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34479C781C60C6130065D261 /* MWMFrameworkListener.mm */; }; + 34479C7D1C60C6130065D261 /* MWMFrameworkListener.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34479C781C60C6130065D261 /* MWMFrameworkListener.mm */; }; 344825931B8DBADF00757B1B /* MWMSearchDownloadViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 344825911B8DBADF00757B1B /* MWMSearchDownloadViewController.mm */; }; 344825941B8DBADF00757B1B /* MWMSearchDownloadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 344825921B8DBADF00757B1B /* MWMSearchDownloadViewController.xib */; }; 344825971B8DCEC400757B1B /* MWMSearchDownloadView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 344825961B8DCEC400757B1B /* MWMSearchDownloadView.mm */; }; @@ -128,6 +106,39 @@ 347BAC6E1B736BA70010FF78 /* MWMSharePedestrianRoutesToastActivityItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347BAC6D1B736BA70010FF78 /* MWMSharePedestrianRoutesToastActivityItem.mm */; }; 347D7C691C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347D7C681C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm */; }; 347D7C6A1C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347D7C681C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm */; }; + 347FD8671C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD84B1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm */; }; + 347FD8681C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD84B1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm */; }; + 347FD8691C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD84C1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib */; }; + 347FD86A1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD84C1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib */; }; + 347FD86B1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD84E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm */; }; + 347FD86C1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD84E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm */; }; + 347FD86D1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD84F1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib */; }; + 347FD86E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD84F1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib */; }; + 347FD86F1C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8511C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm */; }; + 347FD8701C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8511C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm */; }; + 347FD8711C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8521C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib */; }; + 347FD8721C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8521C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib */; }; + 347FD8731C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8541C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm */; }; + 347FD8741C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8541C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm */; }; + 347FD8751C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8551C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib */; }; + 347FD8761C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8551C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib */; }; + 347FD8771C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8571C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm */; }; + 347FD8781C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8571C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm */; }; + 347FD8791C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8581C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib */; }; + 347FD87A1C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8581C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib */; }; + 347FD87B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD85A1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */; }; + 347FD87D1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD85B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */; }; + 347FD87E1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD85B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */; }; + 347FD8831C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8601C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm */; }; + 347FD8841C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8601C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm */; }; + 347FD8851C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8621C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm */; }; + 347FD8861C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8621C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm */; }; + 347FD8871C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8631C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib */; }; + 347FD8881C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8631C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib */; }; + 347FD8891C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8651C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm */; }; + 347FD88A1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD8651C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm */; }; + 347FD88B1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8661C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib */; }; + 347FD88C1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 347FD8661C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib */; }; 347FDDA11BB59B4E00871410 /* Mapsme.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 347FDDA01BB59B4E00871410 /* Mapsme.storyboard */; }; 3485C0121B85C20E00F7712D /* MWMSearchTableViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3485C0101B85C20E00F7712D /* MWMSearchTableViewController.mm */; }; 3485C0131B85C20E00F7712D /* MWMSearchTableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3485C0111B85C20E00F7712D /* MWMSearchTableViewController.xib */; }; @@ -137,8 +148,8 @@ 3491E7CE1C06F1F10042FE24 /* MWMPlacePageButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3491E7CA1C06F1F10042FE24 /* MWMPlacePageButtonCell.xib */; }; 34921F6A1BFA0CDC00737D6E /* MyTargetSDKCorp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34921F691BFA0CDC00737D6E /* MyTargetSDKCorp.framework */; }; 34921F6B1BFA0CDC00737D6E /* MyTargetSDKCorp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34921F691BFA0CDC00737D6E /* MyTargetSDKCorp.framework */; }; - 3492CC121C6DF00E0057D8E8 /* ProgressView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 976D86EB19C8697700C920EF /* ProgressView.mm */; }; - 3492CC131C6DF00F0057D8E8 /* ProgressView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 976D86EB19C8697700C920EF /* ProgressView.mm */; }; + 3492CC121C6DF00E0057D8E8 /* (null) in Sources */ = {isa = PBXBuildFile; }; + 3492CC131C6DF00F0057D8E8 /* (null) in Sources */ = {isa = PBXBuildFile; }; 3497A93A1B5CF8A900F51E55 /* MWMNavigationDashboardManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3497A9371B5CF8A900F51E55 /* MWMNavigationDashboardManager.mm */; }; 349A357A1B53D4C9009677EE /* MWMCircularProgress.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A35761B53D4C9009677EE /* MWMCircularProgress.mm */; }; 349A357B1B53D4C9009677EE /* MWMCircularProgress.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A35771B53D4C9009677EE /* MWMCircularProgress.xib */; }; @@ -146,9 +157,6 @@ 349A35831B53E967009677EE /* MWMDownloadMapRequest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A357F1B53E967009677EE /* MWMDownloadMapRequest.mm */; }; 349A35841B53E967009677EE /* MWMDownloadMapRequest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A35801B53E967009677EE /* MWMDownloadMapRequest.xib */; }; 349A35851B53E967009677EE /* MWMDownloadMapRequestView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A35821B53E967009677EE /* MWMDownloadMapRequestView.mm */; }; - 349A358C1B53EABC009677EE /* MWMSearchDownloadMapRequest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A35881B53EABC009677EE /* MWMSearchDownloadMapRequest.mm */; }; - 349A358D1B53EABC009677EE /* MWMSearchDownloadMapRequest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A35891B53EABC009677EE /* MWMSearchDownloadMapRequest.xib */; }; - 349A358E1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A358B1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm */; }; 349C26B51BB02C6F0005DF2F /* MWMBottomMenuViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349C26B31BB02C6F0005DF2F /* MWMBottomMenuViewController.mm */; }; 349C26B61BB02C6F0005DF2F /* MWMBottomMenuViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349C26B41BB02C6F0005DF2F /* MWMBottomMenuViewController.xib */; }; 349C26B91BB04ED30005DF2F /* MWMBottomMenuView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349C26B81BB04ED30005DF2F /* MWMBottomMenuView.mm */; }; @@ -165,9 +173,14 @@ 34ABA62C1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62B1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm */; }; 34ABA62D1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62B1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm */; }; 34ABA6301C2D58F300FE1BEC /* MWMInputEmailValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62F1C2D58F300FE1BEC /* MWMInputEmailValidator.mm */; }; - 34ABA6311C2D58F300FE1BEC /* MWMInputEmailValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62F1C2D58F300FE1BEC /* MWMInputEmailValidator.mm */; }; 34ABA6341C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA6331C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm */; }; 34ABA6351C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA6331C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm */; }; + 34AF5FB41BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB31BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm */; }; + 34AF5FB71BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB61BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm */; }; + 34AF5FBA1BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB91BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm */; }; + 34AF5FBD1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FBC1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm */; }; + 34AF5FC31BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FC21BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm */; }; + 34AF5FC51BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34AF5FC41BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib */; }; 34B16C451B72655D000D3A0D /* MWMPedestrianShareAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B16C441B72655D000D3A0D /* MWMPedestrianShareAlert.mm */; }; 34B6CF5D1BBBFC6B009203C6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 34B6CF5C1BBBFC6B009203C6 /* LaunchScreen.storyboard */; }; 34B82AB21B8344E300180497 /* MWMSearchTextField.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B82AB11B8344E300180497 /* MWMSearchTextField.mm */; }; @@ -223,9 +236,25 @@ 34CFFE901B7DE83D009D0C9F /* MWMSearchView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34CFFE8F1B7DE83D009D0C9F /* MWMSearchView.mm */; }; 34D15BA81BD8F93C00C8BCBE /* AddSetTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34D15BA61BD8F93C00C8BCBE /* AddSetTableViewCell.mm */; }; 34D15BA91BD8F93C00C8BCBE /* AddSetTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34D15BA71BD8F93C00C8BCBE /* AddSetTableViewCell.xib */; }; - 34EB844C1C07337B0004689F /* MWMSegue.mm in Sources */ = {isa = PBXBuildFile; fileRef = F607C18D1C047FDC00B53A87 /* MWMSegue.mm */; }; + 34D7B0531BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34D7B0521BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm */; }; + 34DDD5321BFDAFFE00407F2F /* MWMUpdateMapsAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3419AAA61BDFD047003DC110 /* MWMUpdateMapsAlert.mm */; }; + 34DDD5331BFDB00D00407F2F /* MWMUpdateMapsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3419AAA81BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib */; }; + 34DDD5341BFDB0B600407F2F /* MWMMapDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AF0DF1BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm */; }; + 34DDD5351BFDB0C600407F2F /* MWMMapCountryDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 341223BA1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm */; }; + 34DDD5361BFDB0CF00407F2F /* MWMMapDownloaderTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34D7B0521BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm */; }; + 34DDD5371BFDB0D300407F2F /* MWMMapDownloaderCountryTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB31BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm */; }; + 34DDD5381BFDB0DA00407F2F /* MWMMapDownloaderCountryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C021BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib */; }; + 34DDD5391BFDB0E100407F2F /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB91BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm */; }; + 34DDD53A1BFDB0E500407F2F /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C061BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib */; }; + 34DDD53B1BFDB0EC00407F2F /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FB61BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm */; }; + 34DDD53C1BFDB0EF00407F2F /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34212C041BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib */; }; + 34DDD53D1BFDB0F500407F2F /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FBC1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm */; }; + 34DDD53E1BFDB0F900407F2F /* MWMMapDownloaderSubplaceTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 343D18781BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib */; }; + 34DDD53F1BFDB0FD00407F2F /* MWMMapDownloaderTableViewHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AF5FC21BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm */; }; + 34DDD5401BFDB10100407F2F /* MWMMapDownloaderTableViewHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34AF5FC41BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib */; }; 34EB84581C073DF70004689F /* MWMOpeningHoursEditorViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34EB84571C073DF70004689F /* MWMOpeningHoursEditorViewController.mm */; }; 34EB84591C073DF70004689F /* MWMOpeningHoursEditorViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34EB84571C073DF70004689F /* MWMOpeningHoursEditorViewController.mm */; }; + 34EF94291C05A6F30050B714 /* MWMSegue.mm in Sources */ = {isa = PBXBuildFile; fileRef = F607C18D1C047FDC00B53A87 /* MWMSegue.mm */; }; 34F45E8E1B96E88100AC93F8 /* MWMSearchTabButtonsView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F45E8D1B96E88100AC93F8 /* MWMSearchTabButtonsView.mm */; }; 34F45E901B96E8B100AC93F8 /* MWMSearchTabButtonsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34F45E8F1B96E8B100AC93F8 /* MWMSearchTabButtonsView.xib */; }; 34F8ADD91B97229A004184CC /* MWMSearchTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F8ADD81B97229A004184CC /* MWMSearchTableView.mm */; }; @@ -240,8 +269,6 @@ 34F9FB921C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34F9FB8F1C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib */; }; 34F9FB931C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34F9FB8F1C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib */; }; 34FE4C451BCC013500066718 /* MWMMapWidgets.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34FE4C441BCC013500066718 /* MWMMapWidgets.mm */; }; - 34FF2CB51C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34FF2CB41C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm */; }; - 34FF2CB61C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34FF2CB41C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm */; }; 4519503A1B7A3E070085DA05 /* patterns.txt in Resources */ = {isa = PBXBuildFile; fileRef = 451950391B7A3E070085DA05 /* patterns.txt */; }; 452FCA3B1B6A3DF7007019AB /* colors.txt in Resources */ = {isa = PBXBuildFile; fileRef = 452FCA3A1B6A3DF7007019AB /* colors.txt */; }; 46F26C7310F61FD600ECCA39 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46F26C7210F61FD600ECCA39 /* OpenGLES.framework */; }; @@ -259,6 +286,9 @@ 4A7D89C81B2EBF3B00AC843E /* resources-xxhdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = 4A7D89C41B2EBF3B00AC843E /* resources-xxhdpi_dark */; }; 5605022F1B6211E100169CAD /* sound-strings in Resources */ = {isa = PBXBuildFile; fileRef = 5605022E1B6211E100169CAD /* sound-strings */; }; 560634F21B78806100F3D670 /* MWMTextToSpeech.mm in Sources */ = {isa = PBXBuildFile; fileRef = 560634F11B78806100F3D670 /* MWMTextToSpeech.mm */; }; + 56C74C391C74A3BC00B71B9F /* MWMInputEmailValidator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34ABA62F1C2D58F300FE1BEC /* MWMInputEmailValidator.mm */; }; + 56D545621C74A41900E3719C /* Framework.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34479C751C60C6130065D261 /* Framework.cpp */; }; + 56D545631C74A41900E3719C /* Framework.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34479C751C60C6130065D261 /* Framework.cpp */; }; 6741A9421BF340DE002C974C /* sound-strings in Resources */ = {isa = PBXBuildFile; fileRef = 5605022E1B6211E100169CAD /* sound-strings */; }; 6741A9431BF340DE002C974C /* MWMPlacePageDescriptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F67BC26E1B254B1F00FE1D7B /* MWMPlacePageDescriptionView.xib */; }; 6741A9441BF340DE002C974C /* PlacePageBookmarkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 342BB7AA1BC7CC5C00DF6443 /* PlacePageBookmarkCell.xib */; }; @@ -323,7 +353,6 @@ 6741A9831BF340DE002C974C /* Mapsme.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 347FDDA01BB59B4E00871410 /* Mapsme.storyboard */; }; 6741A9841BF340DE002C974C /* MWMSearchShowOnMapCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3438CDF71B8616760051AA78 /* MWMSearchShowOnMapCell.xib */; }; 6741A9851BF340DE002C974C /* MWMBottomMenuCollectionViewPortraitCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34BAB6EC1BB2DFCE00DB941B /* MWMBottomMenuCollectionViewPortraitCell.xib */; }; - 6741A9861BF340DE002C974C /* MWMSearchDownloadMapRequest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A35891B53EABC009677EE /* MWMSearchDownloadMapRequest.xib */; }; 6741A9871BF340DE002C974C /* drules_proto_clear.bin in Resources */ = {isa = PBXBuildFile; fileRef = 4A23D1561B8B4DD700D4EB6F /* drules_proto_clear.bin */; }; 6741A9881BF340DE002C974C /* MWMAPIBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 341C2A5A1B720B8A00AD41A1 /* MWMAPIBarView.xib */; }; 6741A9891BF340DE002C974C /* MWMSearchHistoryClearCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34B82AC31B84608600180497 /* MWMSearchHistoryClearCell.xib */; }; @@ -358,11 +387,9 @@ 6741A9A81BF340DE002C974C /* MWMFacebookAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BC1E511ACBF98600EF0360 /* MWMFacebookAlert.mm */; }; 6741A9A91BF340DE002C974C /* MWMDefaultAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F64F198B1AB81A00006EAF7E /* MWMDefaultAlert.mm */; }; 6741A9AA1BF340DE002C974C /* MWMSearchShowOnMapCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3438CDF61B8616760051AA78 /* MWMSearchShowOnMapCell.mm */; }; - 6741A9AB1BF340DE002C974C /* MapCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 976D86F019C877E600C920EF /* MapCell.mm */; }; 6741A9AC1BF340DE002C974C /* MWMSearchTabButtonsView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F45E8D1B96E88100AC93F8 /* MWMSearchTabButtonsView.mm */; }; 6741A9AD1BF340DE002C974C /* MWMSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6C9343F1AE64E4200DDC624 /* MWMSpringAnimation.mm */; }; 6741A9AE1BF340DE002C974C /* MWMSearchCategoryCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B82AC81B8465C100180497 /* MWMSearchCategoryCell.mm */; }; - 6741A9AF1BF340DE002C974C /* ActiveMapsVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26C119E31BCC00BA2219 /* ActiveMapsVC.mm */; }; 6741A9B01BF340DE002C974C /* MapsAppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* MapsAppDelegate.mm */; }; 6741A9B11BF340DE002C974C /* MWMAPIBarView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 341522BE1B666A550077AA8F /* MWMAPIBarView.mm */; }; 6741A9B21BF340DE002C974C /* MWMDownloadMapRequest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A357F1B53E967009677EE /* MWMDownloadMapRequest.mm */; }; @@ -389,7 +416,6 @@ 6741A9CA1BF340DE002C974C /* MWMAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6C9343B1AE4F94A00DDC624 /* MWMAnimator.mm */; }; 6741A9CB1BF340DE002C974C /* MWMSearchContentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3438CDFB1B862F5C0051AA78 /* MWMSearchContentView.mm */; }; 6741A9CC1BF340DE002C974C /* MWMSearchTableViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3485C0101B85C20E00F7712D /* MWMSearchTableViewController.mm */; }; - 6741A9CD1BF340DE002C974C /* MapsObservers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26B819E2E64200BA2219 /* MapsObservers.mm */; }; 6741A9CE1BF340DE002C974C /* MWMSearchManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34CFFE8A1B7DE6FD009D0C9F /* MWMSearchManager.mm */; }; 6741A9CF1BF340DE002C974C /* MWMLocationAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BBF2C51B4FFB72000CF8E2 /* MWMLocationAlert.mm */; }; 6741A9D01BF340DE002C974C /* MWMPlacePage.mm in Sources */ = {isa = PBXBuildFile; fileRef = F66A8FAF1B09F268001B9C97 /* MWMPlacePage.mm */; }; @@ -404,8 +430,6 @@ 6741A9DA1BF340DE002C974C /* UIKitCategories.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9747264118323080006B7CB7 /* UIKitCategories.mm */; }; 6741A9DB1BF340DE002C974C /* MWMRoutePreview.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BD337E1B62403B00F2CE18 /* MWMRoutePreview.mm */; }; 6741A9DC1BF340DE002C974C /* MWMRoutePointLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BB6CC21BB1860D00DF1DF2 /* MWMRoutePointLayout.mm */; }; - 6741A9DD1BF340DE002C974C /* CountryTreeVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26BD19E31BBE00BA2219 /* CountryTreeVC.mm */; }; - 6741A9DE1BF340DE002C974C /* BadgeView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97F0817D19AF72590098FB0B /* BadgeView.mm */; }; 6741A9DF1BF340DE002C974C /* MWMSearchHistoryClearCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B82AC21B84608600180497 /* MWMSearchHistoryClearCell.mm */; }; 6741A9E01BF340DE002C974C /* MWMDownloaderDialogHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = F64F4B731B4A45FD0081A24A /* MWMDownloaderDialogHeader.mm */; }; 6741A9E11BF340DE002C974C /* MWMSearchTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F8ADD81B97229A004184CC /* MWMSearchTableView.mm */; }; @@ -434,12 +458,9 @@ 6741A9F81BF340DE002C974C /* MWMSharePedestrianRoutesToastActivityItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347BAC6D1B736BA70010FF78 /* MWMSharePedestrianRoutesToastActivityItem.mm */; }; 6741A9F91BF340DE002C974C /* MWMSearchSuggestionCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34B82AD41B84746E00180497 /* MWMSearchSuggestionCell.mm */; }; 6741A9FA1BF340DE002C974C /* MWMBookmarkColorViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6588E2E1B15D2BC00EE1E58 /* MWMBookmarkColorViewController.mm */; }; - 6741A9FB1BF340DE002C974C /* MWMSearchDownloadMapRequestView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A358B1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm */; }; 6741A9FC1BF340DE002C974C /* iosOGLContextFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = A32B6D4B1A14980500E54A65 /* iosOGLContextFactory.mm */; }; - 6741A9FD1BF340DE002C974C /* Framework.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF457E615597D4600DCCC49 /* Framework.cpp */; }; 6741A9FE1BF340DE002C974C /* SelectSetVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA054611155C465E001F4E37 /* SelectSetVC.mm */; }; 6741A9FF1BF340DE002C974C /* AddSetVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAA614B7155F16950031C345 /* AddSetVC.mm */; }; - 6741AA001BF340DE002C974C /* DownloaderParentVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26C519E31BDF00BA2219 /* DownloaderParentVC.mm */; }; 6741AA011BF340DE002C974C /* MWMSearchTabbedViewLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34CC4C111B82120700E44C1F /* MWMSearchTabbedViewLayout.mm */; }; 6741AA021BF340DE002C974C /* BookmarksRootVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAAEA7D3161D8D3100CCD661 /* BookmarksRootVC.mm */; }; 6741AA031BF340DE002C974C /* MWMActivityViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340837121B7243CE00B5C185 /* MWMActivityViewController.mm */; }; @@ -474,7 +495,6 @@ 6741AA231BF340DE002C974C /* UIFont+MapsMeFonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3472EC041B4D44BE0085CB79 /* UIFont+MapsMeFonts.mm */; }; 6741AA241BF340DE002C974C /* UIButton+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AD76E1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm */; }; 6741AA251BF340DE002C974C /* MWMBottomMenuView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349C26B81BB04ED30005DF2F /* MWMBottomMenuView.mm */; }; - 6741AA261BF340DE002C974C /* MWMSearchDownloadMapRequest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349A35881B53EABC009677EE /* MWMSearchDownloadMapRequest.mm */; }; 6741AA271BF340DE002C974C /* MWMBasePlacePageView.mm in Sources */ = {isa = PBXBuildFile; fileRef = F63732951AE9431E00A03764 /* MWMBasePlacePageView.mm */; }; 6741AA281BF340DE002C974C /* MWMAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F64F19861AB81A00006EAF7E /* MWMAlert.mm */; }; 6741AA291BF340DE002C974C /* ColorPickerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED48BBB417C267F5003E7E92 /* ColorPickerView.mm */; }; @@ -553,13 +573,8 @@ 9747278418338F0C006B7CB7 /* UIViewController+Navigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9747278318338F0C006B7CB7 /* UIViewController+Navigation.mm */; }; 974D041D1977DE430081D0A7 /* LocalNotificationManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 974D041B1977DE430081D0A7 /* LocalNotificationManager.mm */; }; 97508423199522D300A7457D /* SettingsAndMoreVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97508422199522D300A7457D /* SettingsAndMoreVC.mm */; }; - 976D86F119C877E600C920EF /* MapCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 976D86F019C877E600C920EF /* MapCell.mm */; }; 97719D451843B6DC00BDD815 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97719D441843B6DC00BDD815 /* MessageUI.framework */; }; 97719D491843B6F700BDD815 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97719D471843B6F200BDD815 /* Security.framework */; }; - 977E26B919E2E64200BA2219 /* MapsObservers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26B819E2E64200BA2219 /* MapsObservers.mm */; }; - 977E26BE19E31BBE00BA2219 /* CountryTreeVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26BD19E31BBE00BA2219 /* CountryTreeVC.mm */; }; - 977E26C219E31BCC00BA2219 /* ActiveMapsVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26C119E31BCC00BA2219 /* ActiveMapsVC.mm */; }; - 977E26C619E31BDF00BA2219 /* DownloaderParentVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 977E26C519E31BDF00BA2219 /* DownloaderParentVC.mm */; }; 978D4A251996B0EC00D72CA7 /* CommunityVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 978D4A241996B0EC00D72CA7 /* CommunityVC.mm */; }; 978D4A291996C17300D72CA7 /* RichTextVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 978D4A281996C17300D72CA7 /* RichTextVC.mm */; }; 978D4A31199A11E600D72CA7 /* faq.html in Resources */ = {isa = PBXBuildFile; fileRef = 978D4A30199A11E600D72CA7 /* faq.html */; }; @@ -574,7 +589,6 @@ 97ECD87818362B3D00F77A46 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97ECD87718362B3D00F77A46 /* CoreTelephony.framework */; }; 97ECD87A18362B5400F77A46 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97ECD87918362B5400F77A46 /* MobileCoreServices.framework */; }; 97ECD87F1836594400F77A46 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97ECD87E1836594400F77A46 /* StoreKit.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - 97F0817E19AF72590098FB0B /* BadgeView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97F0817D19AF72590098FB0B /* BadgeView.mm */; }; 97F61794183E7445009919E2 /* LinkCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97F61793183E7445009919E2 /* LinkCell.mm */; }; 9DA46A091C47E92100EF52BA /* resources-hdpi_legacy in Resources */ = {isa = PBXBuildFile; fileRef = 9DA46A041C47E92100EF52BA /* resources-hdpi_legacy */; }; 9DA46A0A1C47E92100EF52BA /* resources-mdpi_legacy in Resources */ = {isa = PBXBuildFile; fileRef = 9DA46A051C47E92100EF52BA /* resources-mdpi_legacy */; }; @@ -735,7 +749,6 @@ FAAEA7D5161D8D3100CCD661 /* BookmarksRootVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAAEA7D3161D8D3100CCD661 /* BookmarksRootVC.mm */; }; FAAFD697139D9BE2000AE70C /* categories.txt in Resources */ = {isa = PBXBuildFile; fileRef = FAAFD696139D9BE2000AE70C /* categories.txt */; }; FAF30A95173AB23900818BF6 /* 07_roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FAF30A94173AB23900818BF6 /* 07_roboto_medium.ttf */; }; - FAF457E715597D4600DCCC49 /* Framework.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF457E615597D4600DCCC49 /* Framework.cpp */; }; FAFCB63613366E78001A5C59 /* WebViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAFCB63513366E78001A5C59 /* WebViewController.mm */; }; FAFF422A1347F101009BBB14 /* World.mwm in Resources */ = {isa = PBXBuildFile; fileRef = FAFF42291347F101009BBB14 /* World.mwm */; }; /* End PBXBuildFile section */ @@ -803,41 +816,27 @@ 3411387C1C15AE73002E3B3E /* libeditor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libeditor.a; path = "../../../omim-xcode-build/Debug/libeditor.a"; sourceTree = ""; }; 3411387E1C15B50B002E3B3E /* MWMOpeningHoursModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursModel.h; sourceTree = ""; }; 3411387F1C15B50B002E3B3E /* MWMOpeningHoursModel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursModel.mm; sourceTree = ""; }; + 341223B91BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapCountryDownloaderViewController.h; sourceTree = ""; }; + 341223BA1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapCountryDownloaderViewController.mm; sourceTree = ""; }; 341522BD1B666A550077AA8F /* MWMAPIBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAPIBarView.h; sourceTree = ""; }; 341522BE1B666A550077AA8F /* MWMAPIBarView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAPIBarView.mm; sourceTree = ""; }; - 34181E6E1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAddClosedTableViewCell.h; sourceTree = ""; }; - 34181E6F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAddClosedTableViewCell.mm; sourceTree = ""; }; - 34181E701C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAddClosedTableViewCell.xib; sourceTree = ""; }; - 34181E711C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAddScheduleTableViewCell.h; sourceTree = ""; }; - 34181E721C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAddScheduleTableViewCell.mm; sourceTree = ""; }; - 34181E731C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAddScheduleTableViewCell.xib; sourceTree = ""; }; - 34181E741C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAllDayTableViewCell.h; sourceTree = ""; }; - 34181E751C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAllDayTableViewCell.mm; sourceTree = ""; }; - 34181E761C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAllDayTableViewCell.xib; sourceTree = ""; }; - 34181E771C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursClosedSpanTableViewCell.h; sourceTree = ""; }; - 34181E781C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursClosedSpanTableViewCell.mm; sourceTree = ""; }; - 34181E791C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursClosedSpanTableViewCell.xib; sourceTree = ""; }; - 34181E7A1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursDaysSelectorTableViewCell.h; sourceTree = ""; }; - 34181E7B1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursDaysSelectorTableViewCell.mm; sourceTree = ""; }; - 34181E7C1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursDaysSelectorTableViewCell.xib; sourceTree = ""; }; - 34181E7D1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursDeleteScheduleTableViewCell.h; sourceTree = ""; }; - 34181E7E1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursDeleteScheduleTableViewCell.mm; sourceTree = ""; }; - 34181E7F1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursDeleteScheduleTableViewCell.xib; sourceTree = ""; }; - 34181E871C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTimeSelectorTableViewCell.h; sourceTree = ""; }; - 34181E881C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTimeSelectorTableViewCell.mm; sourceTree = ""; }; - 34181E891C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursTimeSelectorTableViewCell.xib; sourceTree = ""; }; - 34181E8A1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTimeSpanTableViewCell.h; sourceTree = ""; }; - 34181E8B1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTimeSpanTableViewCell.mm; sourceTree = ""; }; - 34181E8C1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursTimeSpanTableViewCell.xib; sourceTree = ""; }; 34181EB71C0ED1C30081B586 /* MWMOpeningHoursSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursSection.h; sourceTree = ""; }; 34181EB81C0ED1C30081B586 /* MWMOpeningHoursSection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursSection.mm; sourceTree = ""; }; 34181EBB1C0ED2680081B586 /* MWMOpeningHoursEditorCells.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursEditorCells.h; sourceTree = ""; }; + 3419AAA51BDFD047003DC110 /* MWMUpdateMapsAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMUpdateMapsAlert.h; sourceTree = ""; }; + 3419AAA61BDFD047003DC110 /* MWMUpdateMapsAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMUpdateMapsAlert.mm; sourceTree = ""; }; + 3419AAA81BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMUpdateMapsAlert.xib; sourceTree = ""; }; 341C2A5A1B720B8A00AD41A1 /* MWMAPIBarView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMAPIBarView.xib; sourceTree = ""; }; 341F09831C20138100F18AC5 /* libpugixml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpugixml.a; path = "../../../omim-xcode-build/Debug/libpugixml.a"; sourceTree = ""; }; + 34212C021BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMMapDownloaderCountryTableViewCell.xib; sourceTree = ""; }; + 34212C041BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMMapDownloaderPlaceTableViewCell.xib; sourceTree = ""; }; + 34212C061BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMMapDownloaderLargeCountryTableViewCell.xib; sourceTree = ""; }; 342AD76D1B53D30C00E0B997 /* UIButton+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+RuntimeAttributes.h"; sourceTree = ""; }; 342AD76E1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UIButton+RuntimeAttributes.mm"; sourceTree = ""; }; 342AD7701B53D32F00E0B997 /* UIView+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+RuntimeAttributes.h"; sourceTree = ""; }; 342AD7711B53D32F00E0B997 /* UIView+RuntimeAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UIView+RuntimeAttributes.mm"; sourceTree = ""; }; + 342AF0DE1BE24E9A0016F3AE /* MWMMapDownloaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderViewController.h; sourceTree = ""; }; + 342AF0DF1BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderViewController.mm; sourceTree = ""; }; 342BB7AA1BC7CC5C00DF6443 /* PlacePageBookmarkCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlacePageBookmarkCell.xib; sourceTree = ""; }; 342CC5EF1C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAuthorizationLoginViewController.h; sourceTree = ""; }; 342CC5F01C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAuthorizationLoginViewController.mm; sourceTree = ""; }; @@ -873,8 +872,14 @@ 3438CDF71B8616760051AA78 /* MWMSearchShowOnMapCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMSearchShowOnMapCell.xib; sourceTree = ""; }; 3438CDFA1B862F5C0051AA78 /* MWMSearchContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchContentView.h; sourceTree = ""; }; 3438CDFB1B862F5C0051AA78 /* MWMSearchContentView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchContentView.mm; sourceTree = ""; }; + 343D18781BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMMapDownloaderSubplaceTableViewCell.xib; sourceTree = ""; }; 3445CEAC1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAuthorizationSignupViewController.h; sourceTree = ""; }; 3445CEAD1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAuthorizationSignupViewController.mm; sourceTree = ""; }; + 34479C751C60C6130065D261 /* Framework.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Framework.cpp; sourceTree = ""; }; + 34479C761C60C6130065D261 /* Framework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Framework.h; sourceTree = ""; }; + 34479C771C60C6130065D261 /* MWMFrameworkListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMFrameworkListener.h; sourceTree = ""; }; + 34479C781C60C6130065D261 /* MWMFrameworkListener.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMFrameworkListener.mm; sourceTree = ""; }; + 34479C791C60C6130065D261 /* MWMFrameworkObservers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMFrameworkObservers.h; sourceTree = ""; }; 344825901B8DBADF00757B1B /* MWMSearchDownloadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchDownloadViewController.h; sourceTree = ""; }; 344825911B8DBADF00757B1B /* MWMSearchDownloadViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchDownloadViewController.mm; sourceTree = ""; }; 344825921B8DBADF00757B1B /* MWMSearchDownloadViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMSearchDownloadViewController.xib; sourceTree = ""; }; @@ -911,6 +916,32 @@ 347BAC6D1B736BA70010FF78 /* MWMSharePedestrianRoutesToastActivityItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSharePedestrianRoutesToastActivityItem.mm; sourceTree = ""; }; 347D7C671C2C0703006B2D0A /* UITextView+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextView+RuntimeAttributes.h"; sourceTree = ""; }; 347D7C681C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UITextView+RuntimeAttributes.mm"; sourceTree = ""; }; + 347FD84A1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAddClosedTableViewCell.h; sourceTree = ""; }; + 347FD84B1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAddClosedTableViewCell.mm; sourceTree = ""; }; + 347FD84C1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAddClosedTableViewCell.xib; sourceTree = ""; }; + 347FD84D1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAddScheduleTableViewCell.h; sourceTree = ""; }; + 347FD84E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAddScheduleTableViewCell.mm; sourceTree = ""; }; + 347FD84F1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAddScheduleTableViewCell.xib; sourceTree = ""; }; + 347FD8501C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursAllDayTableViewCell.h; sourceTree = ""; }; + 347FD8511C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursAllDayTableViewCell.mm; sourceTree = ""; }; + 347FD8521C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursAllDayTableViewCell.xib; sourceTree = ""; }; + 347FD8531C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursClosedSpanTableViewCell.h; sourceTree = ""; }; + 347FD8541C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursClosedSpanTableViewCell.mm; sourceTree = ""; }; + 347FD8551C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursClosedSpanTableViewCell.xib; sourceTree = ""; }; + 347FD8561C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursDaysSelectorTableViewCell.h; sourceTree = ""; }; + 347FD8571C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursDaysSelectorTableViewCell.mm; sourceTree = ""; }; + 347FD8581C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursDaysSelectorTableViewCell.xib; sourceTree = ""; }; + 347FD8591C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursDeleteScheduleTableViewCell.h; sourceTree = ""; }; + 347FD85A1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursDeleteScheduleTableViewCell.mm; sourceTree = ""; }; + 347FD85B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursDeleteScheduleTableViewCell.xib; sourceTree = ""; }; + 347FD85F1C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTableViewCell.h; sourceTree = ""; }; + 347FD8601C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTableViewCell.mm; sourceTree = ""; }; + 347FD8611C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTimeSelectorTableViewCell.h; sourceTree = ""; }; + 347FD8621C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTimeSelectorTableViewCell.mm; sourceTree = ""; }; + 347FD8631C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursTimeSelectorTableViewCell.xib; sourceTree = ""; }; + 347FD8641C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTimeSpanTableViewCell.h; sourceTree = ""; }; + 347FD8651C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTimeSpanTableViewCell.mm; sourceTree = ""; }; + 347FD8661C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMOpeningHoursTimeSpanTableViewCell.xib; sourceTree = ""; }; 347FDDA01BB59B4E00871410 /* Mapsme.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Mapsme.storyboard; sourceTree = ""; }; 348320CC1B6A2C52007EC039 /* MWMNavigationViewProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMNavigationViewProtocol.h; sourceTree = ""; }; 3485C00F1B85C20E00F7712D /* MWMSearchTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchTableViewController.h; sourceTree = ""; }; @@ -934,11 +965,6 @@ 349A35801B53E967009677EE /* MWMDownloadMapRequest.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMDownloadMapRequest.xib; sourceTree = ""; }; 349A35811B53E967009677EE /* MWMDownloadMapRequestView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMDownloadMapRequestView.h; sourceTree = ""; }; 349A35821B53E967009677EE /* MWMDownloadMapRequestView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMDownloadMapRequestView.mm; sourceTree = ""; }; - 349A35871B53EABC009677EE /* MWMSearchDownloadMapRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchDownloadMapRequest.h; sourceTree = ""; }; - 349A35881B53EABC009677EE /* MWMSearchDownloadMapRequest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchDownloadMapRequest.mm; sourceTree = ""; }; - 349A35891B53EABC009677EE /* MWMSearchDownloadMapRequest.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMSearchDownloadMapRequest.xib; sourceTree = ""; }; - 349A358A1B53EABC009677EE /* MWMSearchDownloadMapRequestView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchDownloadMapRequestView.h; sourceTree = ""; }; - 349A358B1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchDownloadMapRequestView.mm; sourceTree = ""; }; 349C26B21BB02C6F0005DF2F /* MWMBottomMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMBottomMenuViewController.h; sourceTree = ""; }; 349C26B31BB02C6F0005DF2F /* MWMBottomMenuViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMBottomMenuViewController.mm; sourceTree = ""; }; 349C26B41BB02C6F0005DF2F /* MWMBottomMenuViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMBottomMenuViewController.xib; sourceTree = ""; }; @@ -960,6 +986,17 @@ 34ABA62F1C2D58F300FE1BEC /* MWMInputEmailValidator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMInputEmailValidator.mm; sourceTree = ""; }; 34ABA6321C2D64D300FE1BEC /* MWMAuthorizationForgottenPasswordViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAuthorizationForgottenPasswordViewController.h; sourceTree = ""; }; 34ABA6331C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAuthorizationForgottenPasswordViewController.mm; sourceTree = ""; }; + 34AF5FB21BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderCountryTableViewCell.h; sourceTree = ""; }; + 34AF5FB31BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderCountryTableViewCell.mm; sourceTree = ""; }; + 34AF5FB51BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderPlaceTableViewCell.h; sourceTree = ""; }; + 34AF5FB61BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderPlaceTableViewCell.mm; sourceTree = ""; }; + 34AF5FB81BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderLargeCountryTableViewCell.h; sourceTree = ""; }; + 34AF5FB91BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderLargeCountryTableViewCell.mm; sourceTree = ""; }; + 34AF5FBB1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderSubplaceTableViewCell.h; sourceTree = ""; }; + 34AF5FBC1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderSubplaceTableViewCell.mm; sourceTree = ""; }; + 34AF5FC11BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderTableViewHeader.h; sourceTree = ""; }; + 34AF5FC21BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderTableViewHeader.mm; sourceTree = ""; }; + 34AF5FC41BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMMapDownloaderTableViewHeader.xib; sourceTree = ""; }; 34B16C431B72655D000D3A0D /* MWMPedestrianShareAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMPedestrianShareAlert.h; sourceTree = ""; }; 34B16C441B72655D000D3A0D /* MWMPedestrianShareAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPedestrianShareAlert.mm; sourceTree = ""; }; 34B6CF5C1BBBFC6B009203C6 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; @@ -1036,6 +1073,8 @@ 34D15BA51BD8F93C00C8BCBE /* AddSetTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSetTableViewCell.h; sourceTree = ""; }; 34D15BA61BD8F93C00C8BCBE /* AddSetTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AddSetTableViewCell.mm; sourceTree = ""; }; 34D15BA71BD8F93C00C8BCBE /* AddSetTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddSetTableViewCell.xib; sourceTree = ""; }; + 34D7B0511BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderTableViewCell.h; sourceTree = ""; }; + 34D7B0521BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderTableViewCell.mm; sourceTree = ""; }; 34EB84561C073DF70004689F /* MWMOpeningHoursEditorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursEditorViewController.h; sourceTree = ""; }; 34EB84571C073DF70004689F /* MWMOpeningHoursEditorViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursEditorViewController.mm; sourceTree = ""; }; 34F45E8C1B96E88100AC93F8 /* MWMSearchTabButtonsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchTabButtonsView.h; sourceTree = ""; }; @@ -1053,8 +1092,6 @@ 34F9FB8F1C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMStreetEditorEditTableViewCell.xib; sourceTree = ""; }; 34FE4C431BCC013500066718 /* MWMMapWidgets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapWidgets.h; sourceTree = ""; }; 34FE4C441BCC013500066718 /* MWMMapWidgets.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapWidgets.mm; sourceTree = ""; }; - 34FF2CB31C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMOpeningHoursTableViewCell.h; sourceTree = ""; }; - 34FF2CB41C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMOpeningHoursTableViewCell.mm; sourceTree = ""; }; 3D443C9C19E421EE0025C2FC /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 451950391B7A3E070085DA05 /* patterns.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = patterns.txt; path = ../../data/patterns.txt; sourceTree = ""; }; 452FCA3A1B6A3DF7007019AB /* colors.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = colors.txt; path = ../../data/colors.txt; sourceTree = ""; }; @@ -1125,20 +1162,8 @@ 974D041C1977DE430081D0A7 /* LocalNotificationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalNotificationManager.h; sourceTree = ""; }; 97508421199522D300A7457D /* SettingsAndMoreVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsAndMoreVC.h; sourceTree = ""; }; 97508422199522D300A7457D /* SettingsAndMoreVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SettingsAndMoreVC.mm; sourceTree = ""; }; - 976D86EA19C8697700C920EF /* ProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressView.h; path = Classes/ProgressView.h; sourceTree = ""; }; - 976D86EB19C8697700C920EF /* ProgressView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ProgressView.mm; path = Classes/ProgressView.mm; sourceTree = ""; }; - 976D86EF19C877E600C920EF /* MapCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapCell.h; path = Classes/MapCell.h; sourceTree = ""; }; - 976D86F019C877E600C920EF /* MapCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MapCell.mm; path = Classes/MapCell.mm; sourceTree = ""; }; 97719D441843B6DC00BDD815 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; 97719D471843B6F200BDD815 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - 977E26B819E2E64200BA2219 /* MapsObservers.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MapsObservers.mm; path = Classes/MapsObservers.mm; sourceTree = ""; }; - 977E26BB19E2E65E00BA2219 /* MapsObservers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapsObservers.h; path = Classes/MapsObservers.h; sourceTree = ""; }; - 977E26BC19E31BBE00BA2219 /* CountryTreeVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CountryTreeVC.h; sourceTree = ""; }; - 977E26BD19E31BBE00BA2219 /* CountryTreeVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CountryTreeVC.mm; sourceTree = ""; }; - 977E26C019E31BCC00BA2219 /* ActiveMapsVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActiveMapsVC.h; sourceTree = ""; }; - 977E26C119E31BCC00BA2219 /* ActiveMapsVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ActiveMapsVC.mm; sourceTree = ""; }; - 977E26C419E31BDF00BA2219 /* DownloaderParentVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloaderParentVC.h; sourceTree = ""; }; - 977E26C519E31BDF00BA2219 /* DownloaderParentVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DownloaderParentVC.mm; sourceTree = ""; }; 978D4A231996B0EC00D72CA7 /* CommunityVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommunityVC.h; sourceTree = ""; }; 978D4A241996B0EC00D72CA7 /* CommunityVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CommunityVC.mm; sourceTree = ""; }; 978D4A271996C17300D72CA7 /* RichTextVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RichTextVC.h; sourceTree = ""; }; @@ -1166,8 +1191,6 @@ 97ECD87718362B3D00F77A46 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 97ECD87918362B5400F77A46 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; 97ECD87E1836594400F77A46 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; - 97F0817C19AF72590098FB0B /* BadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BadgeView.h; path = Classes/BadgeView.h; sourceTree = ""; }; - 97F0817D19AF72590098FB0B /* BadgeView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BadgeView.mm; path = Classes/BadgeView.mm; sourceTree = ""; }; 97F6178F183E742E009919E2 /* LinkCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LinkCell.h; path = Settings/LinkCell.h; sourceTree = ""; }; 97F61793183E7445009919E2 /* LinkCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = LinkCell.mm; path = Settings/LinkCell.mm; sourceTree = ""; }; 9DA46A041C47E92100EF52BA /* resources-hdpi_legacy */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-hdpi_legacy"; path = "../../data/resources-hdpi_legacy"; sourceTree = ""; }; @@ -1406,8 +1429,6 @@ FAB0FC6019251E85003B396F /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; FAB9D5D91992B981003F6A52 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; FAF30A94173AB23900818BF6 /* 07_roboto_medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = 07_roboto_medium.ttf; path = ../../data/07_roboto_medium.ttf; sourceTree = ""; }; - FAF457E415597BC100DCCC49 /* Framework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Framework.h; sourceTree = ""; }; - FAF457E615597D4600DCCC49 /* Framework.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Framework.cpp; sourceTree = ""; }; FAF8E2EC1752E0F100D41090 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; FAFCB63413366E78001A5C59 /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = ""; }; FAFCB63513366E78001A5C59 /* WebViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebViewController.mm; sourceTree = ""; }; @@ -1535,9 +1556,11 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + 34479C741C60C6130065D261 /* Framework */, 34ABA61D1C2D514A00FE1BEC /* Input Validators */, F607C18B1C047FCA00B53A87 /* Segue */, 34FE4C421BCC013500066718 /* Widgets */, + 342AF0DD1BE24E7C0016F3AE /* MapDownloader */, 346EDAD81B9F0E15004F8DB5 /* Components */, 340837101B7243B500B5C185 /* Share */, 340F24601B1490ED00F874CD /* RouteState */, @@ -1555,8 +1578,6 @@ 1D3623240D0F684500981E51 /* MapsAppDelegate.h */, 1D3623250D0F684500981E51 /* MapsAppDelegate.mm */, F613FA741AB330AF002394D4 /* MapViewController */, - FAF457E415597BC100DCCC49 /* Framework.h */, - FAF457E615597D4600DCCC49 /* Framework.cpp */, 97DEA09018D706C300C5F963 /* Common.h */, 348D1DF91C525B8300860465 /* MWMTypes.h */, A3CC2CD21A1C723900B832E1 /* LocationPredictor.mm */, @@ -1583,7 +1604,6 @@ CB252D6816FF82C8001E41E9 /* Statistics */, FA36B8011540388B004560CC /* Bookmarks */, FA34BEC71338D6DB00FFB2A7 /* Common */, - 976D86EE19C8777500C920EF /* Downloader */, FA6E1F1B124E6B2800F59149 /* Platform */, 080E96DDFE201D6D7F000001 /* Classes */, 974726401832306C006B7CB7 /* Categories */, @@ -1729,37 +1749,42 @@ path = RouteState; sourceTree = ""; }; - 34181E6D1C0ECF210081B586 /* Cells */ = { + 3419AAA41BDFD003003DC110 /* MWMUpdateAlert */ = { isa = PBXGroup; children = ( - 34181E6E1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.h */, - 34181E6F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm */, - 34181E701C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib */, - 34181E711C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.h */, - 34181E721C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm */, - 34181E731C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib */, - 34181E741C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.h */, - 34181E751C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm */, - 34181E761C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib */, - 34181E771C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.h */, - 34181E781C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm */, - 34181E791C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib */, - 34181E7A1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.h */, - 34181E7B1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm */, - 34181E7C1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib */, - 34181E7D1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.h */, - 34181E7E1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */, - 34181E7F1C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */, - 34181E871C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.h */, - 34181E881C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm */, - 34181E891C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib */, - 34181E8A1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.h */, - 34181E8B1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm */, - 34181E8C1C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib */, - 34FF2CB31C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.h */, - 34FF2CB41C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm */, + 3419AAA51BDFD047003DC110 /* MWMUpdateMapsAlert.h */, + 3419AAA61BDFD047003DC110 /* MWMUpdateMapsAlert.mm */, + 3419AAA81BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib */, ); - path = Cells; + path = MWMUpdateAlert; + sourceTree = ""; + }; + 342AF0DD1BE24E7C0016F3AE /* MapDownloader */ = { + isa = PBXGroup; + children = ( + 341223B91BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.h */, + 341223BA1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm */, + 342AF0DE1BE24E9A0016F3AE /* MWMMapDownloaderViewController.h */, + 342AF0DF1BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm */, + 34D7B0511BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.h */, + 34D7B0521BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm */, + 34AF5FB21BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.h */, + 34AF5FB31BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm */, + 34212C021BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib */, + 34AF5FB81BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.h */, + 34AF5FB91BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm */, + 34212C061BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib */, + 34AF5FB51BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.h */, + 34AF5FB61BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm */, + 34212C041BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib */, + 34AF5FBB1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.h */, + 34AF5FBC1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm */, + 343D18781BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib */, + 34AF5FC11BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.h */, + 34AF5FC21BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm */, + 34AF5FC41BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib */, + ); + path = MapDownloader; sourceTree = ""; }; 3438CDF11B85F0C30051AA78 /* Console */ = { @@ -1771,6 +1796,18 @@ path = Console; sourceTree = ""; }; + 34479C741C60C6130065D261 /* Framework */ = { + isa = PBXGroup; + children = ( + 34479C761C60C6130065D261 /* Framework.h */, + 34479C751C60C6130065D261 /* Framework.cpp */, + 34479C771C60C6130065D261 /* MWMFrameworkListener.h */, + 34479C781C60C6130065D261 /* MWMFrameworkListener.mm */, + 34479C791C60C6130065D261 /* MWMFrameworkObservers.h */, + ); + path = Framework; + sourceTree = ""; + }; 3448258F1B8DB05C00757B1B /* DownloadView */ = { isa = PBXGroup; children = ( @@ -1825,6 +1862,39 @@ path = Entitlements; sourceTree = ""; }; + 347FD8491C60B2CE002FB65E /* Cells */ = { + isa = PBXGroup; + children = ( + 347FD84A1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.h */, + 347FD84B1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm */, + 347FD84C1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib */, + 347FD84D1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.h */, + 347FD84E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm */, + 347FD84F1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib */, + 347FD8501C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.h */, + 347FD8511C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm */, + 347FD8521C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib */, + 347FD8531C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.h */, + 347FD8541C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm */, + 347FD8551C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib */, + 347FD8561C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.h */, + 347FD8571C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm */, + 347FD8581C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib */, + 347FD8591C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.h */, + 347FD85A1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */, + 347FD85B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib */, + 347FD85F1C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.h */, + 347FD8601C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm */, + 347FD8611C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.h */, + 347FD8621C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm */, + 347FD8631C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib */, + 347FD8641C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.h */, + 347FD8651C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm */, + 347FD8661C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib */, + ); + path = Cells; + sourceTree = ""; + }; 3497A9321B5CF8A900F51E55 /* NavigationDashboard */ = { isa = PBXGroup; children = ( @@ -1865,19 +1935,6 @@ path = CustomViews/DownloadMapRequest; sourceTree = ""; }; - 349A35861B53EABC009677EE /* SearchDownloadMapRequest */ = { - isa = PBXGroup; - children = ( - 349A35871B53EABC009677EE /* MWMSearchDownloadMapRequest.h */, - 349A35881B53EABC009677EE /* MWMSearchDownloadMapRequest.mm */, - 349A35891B53EABC009677EE /* MWMSearchDownloadMapRequest.xib */, - 349A358A1B53EABC009677EE /* MWMSearchDownloadMapRequestView.h */, - 349A358B1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm */, - ); - name = SearchDownloadMapRequest; - path = CustomViews/SearchDownloadMapRequest; - sourceTree = ""; - }; 349C26AE1BB0116D0005DF2F /* BottomMenu */ = { isa = PBXGroup; children = ( @@ -2158,7 +2215,7 @@ 34EB84551C073DF70004689F /* OpeningHours */ = { isa = PBXGroup; children = ( - 34181E6D1C0ECF210081B586 /* Cells */, + 347FD8491C60B2CE002FB65E /* Cells */, 34181EBB1C0ED2680081B586 /* MWMOpeningHoursEditorCells.h */, 34EB84561C073DF70004689F /* MWMOpeningHoursEditorViewController.h */, 34EB84571C073DF70004689F /* MWMOpeningHoursEditorViewController.mm */, @@ -2238,27 +2295,6 @@ name = Categories; sourceTree = ""; }; - 976D86EE19C8777500C920EF /* Downloader */ = { - isa = PBXGroup; - children = ( - 97F0817C19AF72590098FB0B /* BadgeView.h */, - 97F0817D19AF72590098FB0B /* BadgeView.mm */, - 976D86EA19C8697700C920EF /* ProgressView.h */, - 976D86EB19C8697700C920EF /* ProgressView.mm */, - 976D86EF19C877E600C920EF /* MapCell.h */, - 976D86F019C877E600C920EF /* MapCell.mm */, - 977E26BB19E2E65E00BA2219 /* MapsObservers.h */, - 977E26B819E2E64200BA2219 /* MapsObservers.mm */, - 977E26C419E31BDF00BA2219 /* DownloaderParentVC.h */, - 977E26C519E31BDF00BA2219 /* DownloaderParentVC.mm */, - 977E26BC19E31BBE00BA2219 /* CountryTreeVC.h */, - 977E26BD19E31BBE00BA2219 /* CountryTreeVC.mm */, - 977E26C019E31BCC00BA2219 /* ActiveMapsVC.h */, - 977E26C119E31BCC00BA2219 /* ActiveMapsVC.mm */, - ); - name = Downloader; - sourceTree = ""; - }; 978F924D183BB5D6000D6C7C /* Cells */ = { isa = PBXGroup; children = ( @@ -2280,7 +2316,6 @@ 349A35741B53D4C9009677EE /* CircularProgress */, 349A357D1B53E967009677EE /* DownloadMapRequest */, 34BC72091B0DECAE0012A34B /* MapViewControls */, - 349A35861B53EABC009677EE /* SearchDownloadMapRequest */, 974386DB19373EA400FD5659 /* ToastView.h */, 974386DC19373EA400FD5659 /* ToastView.mm */, ED48BBB317C267F5003E7E92 /* ColorPickerView.h */, @@ -2368,6 +2403,7 @@ F64F195F1AB8125C006EAF7E /* CustomAlert */ = { isa = PBXGroup; children = ( + 3419AAA41BDFD003003DC110 /* MWMUpdateAlert */, F63774E51B59374F00BCF54D /* RoutingDisclaimerAlert */, F6BBF2C31B4FFB56000CF8E2 /* LocationAlert */, F64F19801AB81A00006EAF7E /* AlertController */, @@ -2922,16 +2958,14 @@ 452FCA3B1B6A3DF7007019AB /* colors.txt in Resources */, F67BC26F1B254B2000FE1D7B /* MWMPlacePageDescriptionView.xib in Resources */, 342BB7AB1BC7CC5C00DF6443 /* PlacePageBookmarkCell.xib in Resources */, - 34181E931C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */, EE026F0611D6AC0D00645242 /* classificator.txt in Resources */, 34CC4C0A1B81F3B500E44C1F /* MWMSearchTabbedViewController.xib in Resources */, + 347FD86D1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */, 34B82ACB1B8465C100180497 /* MWMSearchCategoryCell.xib in Resources */, 34CC4C0F1B82069C00E44C1F /* MWMSearchTabbedCollectionViewCell.xib in Resources */, FA46DA2C12D4166E00968C36 /* countries.txt in Resources */, - 34181EB51C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */, 4A23D15C1B8B4DD700D4EB6F /* resources-6plus_clear in Resources */, EE583CBB12F773F00042CBE3 /* unicode_blocks.txt in Resources */, - 34181E8F1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */, EEFE7C1412F8C9E1006AF8C3 /* fonts_blacklist.txt in Resources */, 4A23D15F1B8B4DD700D4EB6F /* resources-xxhdpi_clear in Resources */, F6BD33781B62400E00F2CE18 /* MWMLandscapeNavigationDashboard.xib in Resources */, @@ -2945,13 +2979,15 @@ 4A7D89C81B2EBF3B00AC843E /* resources-xxhdpi_dark in Resources */, 9DA46A0C1C47E92100EF52BA /* resources-xhdpi_legacy in Resources */, 9DA46A0E1C47E92100EF52BA /* resources-xxhdpi_legacy in Resources */, + 343D18791BE8CE7200FCAFAC /* MWMMapDownloaderSubplaceTableViewCell.xib in Resources */, 34BC722B1B0DECAE0012A34B /* MWMZoomButtonsView.xib in Resources */, EEA61603134C496A003A9827 /* 03_jomolhari-id-a3d.ttf in Resources */, + 347FD8711C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */, EEA61604134C496A003A9827 /* 04_padauk.ttf in Resources */, - 34181E9B1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */, EEA61605134C496A003A9827 /* 05_khmeros.ttf in Resources */, 347274731B0F4EE000756B37 /* me.maps.entitlements in Resources */, 3476B8E01BFDD33A00874594 /* tts-how-to-set-up-voice-img in Resources */, + 347FD88B1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */, A367C93B1B17334800E2B6E7 /* resources-default in Resources */, EE164811135CEE4A003B8A3E /* 06_code2000.ttf in Resources */, FAAFD697139D9BE2000AE70C /* categories.txt in Resources */, @@ -2973,13 +3009,16 @@ 978D4A31199A11E600D72CA7 /* faq.html in Resources */, 3491E7CD1C06F1F10042FE24 /* MWMPlacePageButtonCell.xib in Resources */, F66A8FB21B0A0954001B9C97 /* PlacePageView.xib in Resources */, + 34212C031BE8972E00DB4B18 /* MWMMapDownloaderCountryTableViewCell.xib in Resources */, 349C26B61BB02C6F0005DF2F /* MWMBottomMenuViewController.xib in Resources */, + 347FD8871C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */, F64F19A41AB81A00006EAF7E /* MWMDownloadTransitMapAlert.xib in Resources */, F6BBF2C81B4FFB8C000CF8E2 /* MWMLocationAlert.xib in Resources */, F6BB6CBE1BB15A5E00DF1DF2 /* MWMRoutePreview.xib in Resources */, 34B82AD71B84746E00180497 /* MWMSearchSuggestionCell.xib in Resources */, 9DA46A0A1C47E92100EF52BA /* resources-mdpi_legacy in Resources */, 34CCFDD71C22915600F28959 /* MWMPlacePageOpeningHoursWeekDayView.xib in Resources */, + 347FD87D1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */, F6172FA51BBD5A3E0081D325 /* MWMiPadRoutePreview.xib in Resources */, 97A5967F19B9CD47007A963F /* copyright.html in Resources */, 34B82ADF1B84A4A000180497 /* MWMSearchCommonCell.xib in Resources */, @@ -2988,29 +3027,30 @@ FA459EB414327AF700B5BB3C /* WorldCoasts.mwm in Resources */, FA85F633145DDDC20090E1A0 /* packed_polygons.bin in Resources */, F6ED13561B16439E0095C6DE /* MWMDirectionView.xib in Resources */, - 34181EB11C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */, 34D15BA91BD8F93C00C8BCBE /* AddSetTableViewCell.xib in Resources */, FA99CB73147089B100689A9A /* Localizable.strings in Resources */, - 34181E9F1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */, 34CFFE8D1B7DE71C009D0C9F /* MWMSearchView.xib in Resources */, 3401CD711C3C0C420028C6F8 /* MWMEditorNameTableViewCell.xib in Resources */, + 347FD8751C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */, 34F9FB891C438ADB00F71201 /* MWMStreetEditorCommonTableViewCell.xib in Resources */, F6588E381B15D87A00EE1E58 /* MWMBookmarkColorCell.xib in Resources */, 3401CD691C3C03A80028C6F8 /* MWMEditorTextTableViewCell.xib in Resources */, FAAEA7D1161BD26600CCD661 /* synonyms.txt in Resources */, 4A00DBDF1AB704C400113624 /* drules_proto_dark.bin in Resources */, 4A23D15D1B8B4DD700D4EB6F /* resources-mdpi_clear in Resources */, + 34212C051BE897A100DB4B18 /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */, F6FE2C111B03A016009814AA /* PlacePageNavigationBar.xib in Resources */, F61579361AC2CEB60032D8E9 /* MWMRateAlert.xib in Resources */, + 347FD8791C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */, 34634B1B1BB42D270013573C /* MWMBottomMenuCollectionViewLandscapeCell.xib in Resources */, 347FDDA11BB59B4E00871410 /* Mapsme.storyboard in Resources */, 3438CDF91B8616760051AA78 /* MWMSearchShowOnMapCell.xib in Resources */, 34BAB6EE1BB2DFCE00DB941B /* MWMBottomMenuCollectionViewPortraitCell.xib in Resources */, 3401CD7F1C3CF1BE0028C6F8 /* MWMEditorSwitchTableViewCell.xib in Resources */, - 349A358D1B53EABC009677EE /* MWMSearchDownloadMapRequest.xib in Resources */, 9DA46A121C47E95700EF52BA /* drules_proto_legacy.bin in Resources */, 4A23D15B1B8B4DD700D4EB6F /* drules_proto_clear.bin in Resources */, 340C21131C3FFE3100111D22 /* MWMCuisineEditorTableViewCell.xib in Resources */, + 3419AAA91BDFD0B0003DC110 /* MWMUpdateMapsAlert.xib in Resources */, 341C2A5B1B720B8A00AD41A1 /* MWMAPIBarView.xib in Resources */, 34B82AC51B84608600180497 /* MWMSearchHistoryClearCell.xib in Resources */, F6BB6CC01BB17D7000DF1DF2 /* MWMRoutePointCell.xib in Resources */, @@ -3018,19 +3058,20 @@ 342F539D1C529AF100229014 /* WorldCoasts_migrate.mwm in Resources */, F6CB21621AEE902B00FB8963 /* PlacePageLinkCell.xib in Resources */, 3401CD781C3CED1E0028C6F8 /* MWMEditorSelectTableViewCell.xib in Resources */, - 34181E971C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */, + 34212C071BE897C200DB4B18 /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */, 349A35841B53E967009677EE /* MWMDownloadMapRequest.xib in Resources */, F6E0047B1B908CF5003BF5D8 /* MWMNiPadNavigationDashboard.xib in Resources */, 34B82AD11B846B2C00180497 /* MWMSearchBookmarksCell.xib in Resources */, 4A7D89C61B2EBF3B00AC843E /* resources-mdpi_dark in Resources */, F6BC1E541ACBF9AB00EF0360 /* MWMFacebookAlert.xib in Resources */, + 347FD8691C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */, F607C1871C032A8800B53A87 /* resources-hdpi_clear in Resources */, F6CB21641AEFC42800FB8963 /* PlacePageActionBar.xib in Resources */, + 34AF5FC51BE3B66C002AEAEE /* MWMMapDownloaderTableViewHeader.xib in Resources */, 34F45E901B96E8B100AC93F8 /* MWMSearchTabButtonsView.xib in Resources */, F6BD337A1B62400E00F2CE18 /* MWMPortraitNavigationDashboard.xib in Resources */, F64F4B6F1B46A5380081A24A /* MWMDownloaderDialogCell.xib in Resources */, 3485C0131B85C20E00F7712D /* MWMSearchTableViewController.xib in Resources */, - 34181EA31C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */, F6ED13931B1EFA2F0095C6DE /* MWMBookmarkDescriptionViewController.xib in Resources */, 4A23D15E1B8B4DD700D4EB6F /* resources-xhdpi_clear in Resources */, F64F199A1AB81A00006EAF7E /* MWMAlertViewController.xib in Resources */, @@ -3066,14 +3107,16 @@ 6741A94E1BF340DE002C974C /* MWMLandscapeNavigationDashboard.xib in Resources */, F653CE0E1C6DEB2E00A453F1 /* MWMDropDown.xib in Resources */, 6741A94F1BF340DE002C974C /* MWMDefaultAlert.xib in Resources */, + 34DDD5381BFDB0DA00407F2F /* MWMMapDownloaderCountryTableViewCell.xib in Resources */, 6741A9501BF340DE002C974C /* fonts_whitelist.txt in Resources */, 6741A9511BF340DE002C974C /* MWMDownloaderDialogHeader.xib in Resources */, 6741A9521BF340DE002C974C /* World.mwm in Resources */, - 34181EB21C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */, F607C18A1C032A8800B53A87 /* resources-hdpi_dark in Resources */, + 34DDD5401BFDB10100407F2F /* MWMMapDownloaderTableViewHeader.xib in Resources */, 6741A9531BF340DE002C974C /* 01_dejavusans.ttf in Resources */, 6741A9541BF340DE002C974C /* 02_droidsans-fallback.ttf in Resources */, 6741A9551BF340DE002C974C /* resources-xxhdpi_dark in Resources */, + 347FD86E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */, 9DA46A0D1C47E92100EF52BA /* resources-xhdpi_legacy in Resources */, 9DA46A0F1C47E92100EF52BA /* resources-xxhdpi_legacy in Resources */, 6741A9561BF340DE002C974C /* MWMZoomButtonsView.xib in Resources */, @@ -3081,37 +3124,38 @@ 6741A9581BF340DE002C974C /* 04_padauk.ttf in Resources */, 6741A9591BF340DE002C974C /* 05_khmeros.ttf in Resources */, 677A2DE21C0DD50900635A00 /* resources-default in Resources */, + 34DDD53C1BFDB0EF00407F2F /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */, 6741A95A1BF340DE002C974C /* me.maps.entitlements in Resources */, 3476B8E11BFDD33A00874594 /* tts-how-to-set-up-voice-img in Resources */, 6741A95B1BF340DE002C974C /* 06_code2000.ttf in Resources */, 6741A95C1BF340DE002C974C /* categories.txt in Resources */, 6741A95D1BF340DE002C974C /* types.txt in Resources */, - 34181E901C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */, - 34181E9C1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */, 6741A95F1BF340DE002C974C /* InfoPlist.strings in Resources */, 6741A9601BF340DE002C974C /* MWMRoutingDisclaimerAlert.xib in Resources */, 6741A9611BF340DE002C974C /* resources-xhdpi_dark in Resources */, 6741A9631BF340DE002C974C /* Images.xcassets in Resources */, 6741A9641BF340DE002C974C /* MWMSearchDownloadViewController.xib in Resources */, + 347FD8881C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.xib in Resources */, 9DA46A151C47E95700EF52BA /* resources-6plus_legacy in Resources */, 342F539C1C529AF100229014 /* packed_polygons_migrate.bin in Resources */, + 347FD8721C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */, 342F539A1C529AF100229014 /* countries_migrate.txt in Resources */, 34F9FB931C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.xib in Resources */, 6741A9651BF340DE002C974C /* LocalNotifications.plist in Resources */, 6741A9661BF340DE002C974C /* MWMSearchHistoryRequestCell.xib in Resources */, 6741A9671BF340DE002C974C /* LaunchScreen.storyboard in Resources */, - 34181EA41C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */, 3476B8DD1BFDD30B00874594 /* tts-how-to-set-up-voice.html in Resources */, 6741A9681BF340DE002C974C /* faq.html in Resources */, 3491E7CE1C06F1F10042FE24 /* MWMPlacePageButtonCell.xib in Resources */, 6741A9691BF340DE002C974C /* PlacePageView.xib in Resources */, - 34181EA01C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */, 6741A96B1BF340DE002C974C /* MWMBottomMenuViewController.xib in Resources */, 6741A96C1BF340DE002C974C /* MWMDownloadTransitMapAlert.xib in Resources */, 6741A96D1BF340DE002C974C /* MWMLocationAlert.xib in Resources */, + 347FD8761C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.xib in Resources */, 6741A96E1BF340DE002C974C /* MWMRoutePreview.xib in Resources */, 6741A96F1BF340DE002C974C /* MWMSearchSuggestionCell.xib in Resources */, 9DA46A0B1C47E92100EF52BA /* resources-mdpi_legacy in Resources */, + 347FD88C1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */, 6741A9701BF340DE002C974C /* MWMiPadRoutePreview.xib in Resources */, 6741A9711BF340DE002C974C /* copyright.html in Resources */, 6741A9721BF340DE002C974C /* MWMSearchCommonCell.xib in Resources */, @@ -3138,38 +3182,40 @@ 6741A9831BF340DE002C974C /* Mapsme.storyboard in Resources */, 6741A9841BF340DE002C974C /* MWMSearchShowOnMapCell.xib in Resources */, 6741A9851BF340DE002C974C /* MWMBottomMenuCollectionViewPortraitCell.xib in Resources */, - 6741A9861BF340DE002C974C /* MWMSearchDownloadMapRequest.xib in Resources */, + 34DDD5331BFDB00D00407F2F /* MWMUpdateMapsAlert.xib in Resources */, 9DA46A131C47E95700EF52BA /* drules_proto_legacy.bin in Resources */, 340C21141C3FFE3100111D22 /* MWMCuisineEditorTableViewCell.xib in Resources */, 6741A9871BF340DE002C974C /* drules_proto_clear.bin in Resources */, 6741A9881BF340DE002C974C /* MWMAPIBarView.xib in Resources */, + 347FD87A1C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.xib in Resources */, 6741A9891BF340DE002C974C /* MWMSearchHistoryClearCell.xib in Resources */, + 347FD86A1C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */, 6741A98A1BF340DE002C974C /* MWMRoutePointCell.xib in Resources */, 342F539E1C529AF100229014 /* WorldCoasts_migrate.mwm in Resources */, + 34DDD53A1BFDB0E500407F2F /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */, 6741A98B1BF340DE002C974C /* MWMCircularProgress.xib in Resources */, 6741A98C1BF340DE002C974C /* PlacePageLinkCell.xib in Resources */, 6741A98D1BF340DE002C974C /* MWMDownloadMapRequest.xib in Resources */, 6741A98E1BF340DE002C974C /* MWMNiPadNavigationDashboard.xib in Resources */, + 34DDD53E1BFDB0F900407F2F /* MWMMapDownloaderSubplaceTableViewCell.xib in Resources */, 6741A98F1BF340DE002C974C /* MWMSearchBookmarksCell.xib in Resources */, - 34181EB61C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.xib in Resources */, 6741A9901BF340DE002C974C /* resources-mdpi_dark in Resources */, 6741A9911BF340DE002C974C /* MWMFacebookAlert.xib in Resources */, F607C1881C032A8800B53A87 /* resources-hdpi_clear in Resources */, 6741A9921BF340DE002C974C /* PlacePageActionBar.xib in Resources */, - 34181E941C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */, 6741A9931BF340DE002C974C /* MWMSearchTabButtonsView.xib in Resources */, 6741A9941BF340DE002C974C /* MWMPortraitNavigationDashboard.xib in Resources */, 6741A9951BF340DE002C974C /* MWMDownloaderDialogCell.xib in Resources */, 6741A9961BF340DE002C974C /* MWMSearchTableViewController.xib in Resources */, 6741A9971BF340DE002C974C /* MWMBookmarkDescriptionViewController.xib in Resources */, 6741A9981BF340DE002C974C /* resources-xhdpi_clear in Resources */, + 347FD87E1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.xib in Resources */, 6741A9991BF340DE002C974C /* MWMAlertViewController.xib in Resources */, 6741A99A1BF340DE002C974C /* MWMBookmarkColorViewController.xib in Resources */, 6741A99B1BF340DE002C974C /* PlacePageInfoCell.xib in Resources */, 6741A99D1BF340DE002C974C /* MWMPedestrianShareAlert.xib in Resources */, 6741A99E1BF340DE002C974C /* MWMNextTurnPanel.xib in Resources */, 6741A99F1BF340DE002C974C /* 07_roboto_medium.ttf in Resources */, - 34181E981C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3206,17 +3252,15 @@ 978D4A291996C17300D72CA7 /* RichTextVC.mm in Sources */, 9747278418338F0C006B7CB7 /* UIViewController+Navigation.mm in Sources */, F6BC1E521ACBF98600EF0360 /* MWMFacebookAlert.mm in Sources */, + 34AF5FBA1BE39473002AEAEE /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */, F64F199D1AB81A00006EAF7E /* MWMDefaultAlert.mm in Sources */, - 34181E911C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */, 3438CDF81B8616760051AA78 /* MWMSearchShowOnMapCell.mm in Sources */, - 976D86F119C877E600C920EF /* MapCell.mm in Sources */, 34F45E8E1B96E88100AC93F8 /* MWMSearchTabButtonsView.mm in Sources */, + 347FD86B1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */, F6C934401AE64E4200DDC624 /* MWMSpringAnimation.mm in Sources */, 34B82ACA1B8465C100180497 /* MWMSearchCategoryCell.mm in Sources */, - 977E26C219E31BCC00BA2219 /* ActiveMapsVC.mm in Sources */, 1D3623260D0F684500981E51 /* MapsAppDelegate.mm in Sources */, 341522BF1B666A550077AA8F /* MWMAPIBarView.mm in Sources */, - 34181E991C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, 349A35831B53E967009677EE /* MWMDownloadMapRequest.mm in Sources */, 349C26B51BB02C6F0005DF2F /* MWMBottomMenuViewController.mm in Sources */, 3438CDF41B85F1170051AA78 /* MWMConsole.mm in Sources */, @@ -3226,6 +3270,7 @@ F6791B131C43DEA7007A8A6E /* MWMStartButton.mm in Sources */, 46F26CD810F623BA00ECCA39 /* EAGLView.mm in Sources */, 34F9FB8B1C438ADB00F71201 /* MWMStreetEditorViewController.mm in Sources */, + 34AF5FC31BE3B656002AEAEE /* MWMMapDownloaderTableViewHeader.mm in Sources */, EED10A4511F78D120095FAD4 /* MapViewController.mm in Sources */, 34CCFDD11C21945500F28959 /* MWMPlacePageOpeningHoursDayView.mm in Sources */, 3445CEAE1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm in Sources */, @@ -3239,32 +3284,34 @@ F6588E2C1B15C26700EE1E58 /* MWMTextView.mm in Sources */, 34FE4C451BCC013500066718 /* MWMMapWidgets.mm in Sources */, F61B0F2C1B8B82DB00C08258 /* MWMNextTurnPanel.mm in Sources */, + 347FD8831C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm in Sources */, F6F722F81AE1572400DA3DA1 /* MWMiPhonePortraitPlacePage.mm in Sources */, F6CB21681AEFC6AA00FB8963 /* MWMPlacePageActionBar.mm in Sources */, - 34181EAF1C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */, F68E6BD21B8DB7AE0040566D /* MWMRouteHelperPanel.mm in Sources */, 34ABA6341C2D64D400FE1BEC /* MWMAuthorizationForgottenPasswordViewController.mm in Sources */, + 347FD87B1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */, 34BC72291B0DECAE0012A34B /* MWMZoomButtons.mm in Sources */, 340C20E31C3E565600111D22 /* MWMCuisineEditorViewController.mm in Sources */, 34B82ADE1B84A4A000180497 /* MWMSearchCommonCell.mm in Sources */, F66A8FA81B09F052001B9C97 /* MWMiPhoneLandscapePlacePage.mm in Sources */, 974386DD19373EA400FD5659 /* ToastView.mm in Sources */, F6C9343C1AE4F94A00DDC624 /* MWMAnimator.mm in Sources */, + 347FD8771C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */, 342EE4111C43DAA7009F6A49 /* MWMAuthorizationWebViewLoginViewController.mm in Sources */, 3438CDFC1B862F5C0051AA78 /* MWMSearchContentView.mm in Sources */, + 34479C7C1C60C6130065D261 /* MWMFrameworkListener.mm in Sources */, 3485C0121B85C20E00F7712D /* MWMSearchTableViewController.mm in Sources */, - 977E26B919E2E64200BA2219 /* MapsObservers.mm in Sources */, 34CFFE8B1B7DE6FD009D0C9F /* MWMSearchManager.mm in Sources */, 34ABA62C1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */, 34ABA6161C2D185C00FE1BEC /* MWMAuthorizationOSMLoginViewController.mm in Sources */, - 3492CC121C6DF00E0057D8E8 /* ProgressView.mm in Sources */, + 3492CC121C6DF00E0057D8E8 /* (null) in Sources */, F6BBF2C61B4FFB72000CF8E2 /* MWMLocationAlert.mm in Sources */, F66A8FB01B09F268001B9C97 /* MWMPlacePage.mm in Sources */, F6ED13911B1EF96B0095C6DE /* MWMBookmarkDescriptionViewController.mm in Sources */, 349A35851B53E967009677EE /* MWMDownloadMapRequestView.mm in Sources */, F64F19991AB81A00006EAF7E /* MWMAlertViewController.mm in Sources */, + 341223BB1BEB58FA007227E9 /* MWMMapCountryDownloaderViewController.mm in Sources */, FAFCB63613366E78001A5C59 /* WebViewController.mm in Sources */, - 34181EA11C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */, 34C9BD091C6DBCDA000DC38D /* MWMNavigationController.mm in Sources */, 340C21111C3FFE3100111D22 /* MWMCuisineEditorTableViewCell.mm in Sources */, 34C9BD021C6DB693000DC38D /* MWMTableViewController.mm in Sources */, @@ -3273,16 +3320,13 @@ F607C18E1C047FDC00B53A87 /* MWMSegue.mm in Sources */, F6FE2C0F1B03A006009814AA /* MWMPlacePageNavigationBar.mm in Sources */, F64A37D01B9EE24C00180464 /* MWMRouteHelperPanelsDrawer.mm in Sources */, - 34FF2CB51C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm in Sources */, 341138801C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */, 340F24631B14910500F874CD /* RouteState.mm in Sources */, F6830F111B85F6B900C42AAE /* MWMLanesPanel.mm in Sources */, 9747264318323080006B7CB7 /* UIKitCategories.mm in Sources */, F6BD33811B62403B00F2CE18 /* MWMRoutePreview.mm in Sources */, F6BB6CC31BB1860D00DF1DF2 /* MWMRoutePointLayout.mm in Sources */, - 977E26BE19E31BBE00BA2219 /* CountryTreeVC.mm in Sources */, 34BF0CC61C31304A00D097EB /* MWMAuthorizationCommon.mm in Sources */, - 97F0817E19AF72590098FB0B /* BadgeView.mm in Sources */, 34B82AC41B84608600180497 /* MWMSearchHistoryClearCell.mm in Sources */, F64F4B741B4A45FD0081A24A /* MWMDownloaderDialogHeader.mm in Sources */, 34F8ADD91B97229A004184CC /* MWMSearchTableView.mm in Sources */, @@ -3291,25 +3335,27 @@ F6CB216D1AF13EBD00FB8963 /* MWMPlacePageBookmarkCell.mm in Sources */, F653D4231AE9398700282659 /* MWMPlacePageViewManager.mm in Sources */, F65243351B0B634F00BFA9D4 /* MWMPlacePage+Animation.mm in Sources */, - 34181EB31C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, 349A357C1B53D4C9009677EE /* MWMCircularProgressView.mm in Sources */, 3465E7D81B6658C000854C4D /* MWMAPIBar.mm in Sources */, FA29FDAA141E77F8004ADF66 /* Preferences.mm in Sources */, F6588E371B15D87A00EE1E58 /* MWMBookmarkColorCell.mm in Sources */, F6D409FA1B319BD70041730F /* ContextViews.mm in Sources */, 342CC5F11C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm in Sources */, + 347FD8851C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */, 34EB84581C073DF70004689F /* MWMOpeningHoursEditorViewController.mm in Sources */, 349A357A1B53D4C9009677EE /* MWMCircularProgress.mm in Sources */, FAA5C2A2144F135F005337F6 /* LocationManager.mm in Sources */, 34B82ADA1B847FFC00180497 /* MWMSearchCell.mm in Sources */, F6FEA82D1C58E89B007223CC /* MWMButton.mm in Sources */, - 34181E8D1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */, F66A8FAC1B09F137001B9C97 /* MWMiPadPlacePage.mm in Sources */, 978F9240183B660F000D6C7C /* SettingsViewController.mm in Sources */, F6BD33871B62412E00F2CE18 /* MWMNavigationDashboardEntity.mm in Sources */, + 34D7B0531BE8E947003C2A60 /* MWMMapDownloaderTableViewCell.mm in Sources */, F6CB21601AEE7A5B00FB8963 /* MWMPlacePageInfoCell.mm in Sources */, + 3419AAA71BDFD047003DC110 /* MWMUpdateMapsAlert.mm in Sources */, 340E10601B944DAB00D975D5 /* MWMSearchHistoryManager.mm in Sources */, F6DBF9B61AA8779300F2EC2C /* CALayer+RuntimeAttributes.mm in Sources */, + 347FD8731C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, FA36B80D15403A4F004560CC /* BookmarksVC.mm in Sources */, F668F6561BCD4507002D6FFC /* MWMTTSSettingsViewController.mm in Sources */, 34ABA61B1C2D4DCC00FE1BEC /* UITextField+RuntimeAttributes.mm in Sources */, @@ -3321,15 +3367,14 @@ F6C641B01C15BBE6008FCAF3 /* MWMRecentTrackSettingsController.mm in Sources */, F6588E2F1B15D2BC00EE1E58 /* MWMBookmarkColorViewController.mm in Sources */, 34BC1E561C2ADBD3009BBF51 /* MWMOpeningHoursCommon.mm in Sources */, - 349A358E1B53EABC009677EE /* MWMSearchDownloadMapRequestView.mm in Sources */, A32B6D4D1A14980500E54A65 /* iosOGLContextFactory.mm in Sources */, - FAF457E715597D4600DCCC49 /* Framework.cpp in Sources */, + 347FD8671C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */, FA054612155C465E001F4E37 /* SelectSetVC.mm in Sources */, FAA614B8155F16950031C345 /* AddSetVC.mm in Sources */, 34ABA6301C2D58F300FE1BEC /* MWMInputEmailValidator.mm in Sources */, - 977E26C619E31BDF00BA2219 /* DownloaderParentVC.mm in Sources */, 34CC4C121B82120700E44C1F /* MWMSearchTabbedViewLayout.mm in Sources */, F681DE971BFB390A00B547C7 /* MWMWhatsNewController.mm in Sources */, + 34AF5FBD1BE398E6002AEAEE /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */, FAAEA7D5161D8D3100CCD661 /* BookmarksRootVC.mm in Sources */, 3401CD671C3C03A80028C6F8 /* MWMEditorTextTableViewCell.mm in Sources */, 340837131B7243CE00B5C185 /* MWMActivityViewController.mm in Sources */, @@ -3340,19 +3385,20 @@ 345FDD261C3BB3AF0070C459 /* MWMEditorViewController.mm in Sources */, 34B82ABA1B837FFD00180497 /* MWMSearchHistoryRequestCell.mm in Sources */, 34BAB6E91BB2DA0C00DB941B /* MWMBottomMenuLayout.mm in Sources */, + 56D545621C74A41900E3719C /* Framework.cpp in Sources */, F785EB4016386FC4003A38A8 /* BookmarkCell.mm in Sources */, 34BAB6ED1BB2DFCE00DB941B /* MWMBottomMenuCollectionViewCell.mm in Sources */, 34CCFDE01C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.mm in Sources */, + 34AF5FB71BE38F51002AEAEE /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */, 34BC72241B0DECAE0012A34B /* MWMMapViewControlsManager.mm in Sources */, F6B2E61F1C3D5F31005562DF /* MWMNightModeController.mm in Sources */, F6BD33791B62400E00F2CE18 /* MWMNavigationDashboard.mm in Sources */, + 347FD8891C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, 974D041D1977DE430081D0A7 /* LocalNotificationManager.mm in Sources */, 97C98522186AE3CF00AF7E9E /* AppInfo.mm in Sources */, F6A750B91BE8C74400981B41 /* MWMSearchHistoryMyPositionCell.mm in Sources */, - 34181E9D1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */, 34ABA6201C2D517500FE1BEC /* MWMInputValidator.mm in Sources */, 978F9242183B660F000D6C7C /* SelectableCell.mm in Sources */, - 34181E951C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */, 34ABA6241C2D551900FE1BEC /* MWMInputValidatorFactory.mm in Sources */, 34B82AE21B84AC5E00180497 /* MWMSearchCategoriesManager.mm in Sources */, 34BC722A1B0DECAE0012A34B /* MWMZoomButtonsView.mm in Sources */, @@ -3361,14 +3407,17 @@ 34C9BD041C6DB693000DC38D /* MWMViewController.mm in Sources */, CB252D6F16FF82C9001E41E9 /* Statistics.mm in Sources */, F6D5822D1BFDB7C6009409E8 /* MWMPageController.mm in Sources */, + 342AF0E01BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm in Sources */, 6BA0BCD11B74DDBA00CC9969 /* MWMCustomFacebookEvents.mm in Sources */, 978F9244183B660F000D6C7C /* SwitchCell.mm in Sources */, + 34AF5FB41BE38863002AEAEE /* MWMMapDownloaderCountryTableViewCell.mm in Sources */, 342AD7721B53D32F00E0B997 /* UIView+RuntimeAttributes.mm in Sources */, F626D52E1C3E6CAA00C17D15 /* MWMTableViewCell.mm in Sources */, 34F9FB871C438ADB00F71201 /* MWMStreetEditorCommonTableViewCell.mm in Sources */, F64F4B6D1B46A51F0081A24A /* MWMDownloaderDialogCell.mm in Sources */, 3491E7CB1C06F1F10042FE24 /* MWMPlacePageButtonCell.mm in Sources */, 97508423199522D300A7457D /* SettingsAndMoreVC.mm in Sources */, + 347FD86F1C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */, F6ED13541B1643900095C6DE /* MWMDirectionView.mm in Sources */, F63774EA1B59376F00BCF54D /* MWMRoutingDisclaimerAlert.mm in Sources */, F64F19A31AB81A00006EAF7E /* MWMDownloadTransitMapAlert.mm in Sources */, @@ -3378,7 +3427,6 @@ 3472EC051B4D44BE0085CB79 /* UIFont+MapsMeFonts.mm in Sources */, 342AD76F1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm in Sources */, 349C26B91BB04ED30005DF2F /* MWMBottomMenuView.mm in Sources */, - 349A358C1B53EABC009677EE /* MWMSearchDownloadMapRequest.mm in Sources */, F63732961AE9431E00A03764 /* MWMBasePlacePageView.mm in Sources */, F64F199B1AB81A00006EAF7E /* MWMAlert.mm in Sources */, ED48BBB517C267F5003E7E92 /* ColorPickerView.mm in Sources */, @@ -3403,15 +3451,16 @@ 6741A9A51BF340DE002C974C /* MWMShareLocationActivityItem.mm in Sources */, 34F9FB911C43AF2400F71201 /* MWMStreetEditorEditTableViewCell.mm in Sources */, 6741A9A61BF340DE002C974C /* RichTextVC.mm in Sources */, + 34DDD5361BFDB0CF00407F2F /* MWMMapDownloaderTableViewCell.mm in Sources */, 6741A9A71BF340DE002C974C /* UIViewController+Navigation.mm in Sources */, 6741A9A81BF340DE002C974C /* MWMFacebookAlert.mm in Sources */, 6741A9A91BF340DE002C974C /* MWMDefaultAlert.mm in Sources */, 6741A9AA1BF340DE002C974C /* MWMSearchShowOnMapCell.mm in Sources */, - 6741A9AB1BF340DE002C974C /* MapCell.mm in Sources */, 6741A9AC1BF340DE002C974C /* MWMSearchTabButtonsView.mm in Sources */, 6741A9AD1BF340DE002C974C /* MWMSpringAnimation.mm in Sources */, + 347FD86C1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */, 6741A9AE1BF340DE002C974C /* MWMSearchCategoryCell.mm in Sources */, - 6741A9AF1BF340DE002C974C /* ActiveMapsVC.mm in Sources */, + 34DDD53D1BFDB0F500407F2F /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */, 6741A9B01BF340DE002C974C /* MapsAppDelegate.mm in Sources */, 6741A9B11BF340DE002C974C /* MWMAPIBarView.mm in Sources */, 6741A9B21BF340DE002C974C /* MWMDownloadMapRequest.mm in Sources */, @@ -3423,7 +3472,6 @@ 6741A9B71BF340DE002C974C /* EAGLView.mm in Sources */, 6741A9B81BF340DE002C974C /* MapViewController.mm in Sources */, 34F9FB8C1C438ADB00F71201 /* MWMStreetEditorViewController.mm in Sources */, - 34181E8E1C0ECF210081B586 /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */, 34CCFDD21C21945500F28959 /* MWMPlacePageOpeningHoursDayView.mm in Sources */, 3445CEAF1C2D9E08006F4226 /* MWMAuthorizationSignupViewController.mm in Sources */, 6741A9B91BF340DE002C974C /* MWMRateAlert.mm in Sources */, @@ -3432,10 +3480,11 @@ 347D7C6A1C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm in Sources */, 6741A9BE1BF340DE002C974C /* UILabel+RuntimeAttributes.mm in Sources */, 6741A9BF1BF340DE002C974C /* MWMSearchTabbedCollectionViewCell.mm in Sources */, + 34DDD5321BFDAFFE00407F2F /* MWMUpdateMapsAlert.mm in Sources */, 6741A9C01BF340DE002C974C /* MWMTextView.mm in Sources */, - 34181EB41C0ECF210081B586 /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, 6741A9C11BF340DE002C974C /* MWMNextTurnPanel.mm in Sources */, 6741A9C21BF340DE002C974C /* MWMiPhonePortraitPlacePage.mm in Sources */, + 347FD8841C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm in Sources */, 6741A9C31BF340DE002C974C /* MWMPlacePageActionBar.mm in Sources */, 6741A9C41BF340DE002C974C /* MWMRouteHelperPanel.mm in Sources */, 6741A9C51BF340DE002C974C /* MWMZoomButtons.mm in Sources */, @@ -3447,16 +3496,18 @@ F6D5822E1BFDC9FF009409E8 /* MWMWhatsNewController.mm in Sources */, 6741A9CA1BF340DE002C974C /* MWMAnimator.mm in Sources */, 6741A9CB1BF340DE002C974C /* MWMSearchContentView.mm in Sources */, + 347FD8781C60B2CE002FB65E /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */, 342EE4121C43DAA7009F6A49 /* MWMAuthorizationWebViewLoginViewController.mm in Sources */, 6741A9CC1BF340DE002C974C /* MWMSearchTableViewController.mm in Sources */, + 34479C7D1C60C6130065D261 /* MWMFrameworkListener.mm in Sources */, F6791B141C43DF0B007A8A6E /* MWMStartButton.mm in Sources */, - 6741A9CD1BF340DE002C974C /* MapsObservers.mm in Sources */, + 34DDD5351BFDB0C600407F2F /* MWMMapCountryDownloaderViewController.mm in Sources */, 6741A9CE1BF340DE002C974C /* MWMSearchManager.mm in Sources */, 6741A9CF1BF340DE002C974C /* MWMLocationAlert.mm in Sources */, 34ABA62D1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */, 34ABA6171C2D185C00FE1BEC /* MWMAuthorizationOSMLoginViewController.mm in Sources */, 6741A9D01BF340DE002C974C /* MWMPlacePage.mm in Sources */, - 3492CC131C6DF00F0057D8E8 /* ProgressView.mm in Sources */, + 3492CC131C6DF00F0057D8E8 /* (null) in Sources */, 6741A9D21BF340DE002C974C /* MWMBookmarkDescriptionViewController.mm in Sources */, 6741A9D31BF340DE002C974C /* MWMDownloadMapRequestView.mm in Sources */, 3476B8CC1BFDCB6700874594 /* MWMTTSSettingsViewController.mm in Sources */, @@ -3473,11 +3524,11 @@ 6741A9D91BF340DE002C974C /* MWMLanesPanel.mm in Sources */, 676507631C1055BB00830BB3 /* MWMTTSLanguageViewController.mm in Sources */, 341138811C15B50B002E3B3E /* MWMOpeningHoursModel.mm in Sources */, + 34DDD5391BFDB0E100407F2F /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */, 6741A9DA1BF340DE002C974C /* UIKitCategories.mm in Sources */, + 34DDD53B1BFDB0EC00407F2F /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */, 6741A9DB1BF340DE002C974C /* MWMRoutePreview.mm in Sources */, 6741A9DC1BF340DE002C974C /* MWMRoutePointLayout.mm in Sources */, - 6741A9DD1BF340DE002C974C /* CountryTreeVC.mm in Sources */, - 6741A9DE1BF340DE002C974C /* BadgeView.mm in Sources */, F6F6ACFC1C15C1010060FDD0 /* MWMRecentTrackSettingsController.mm in Sources */, 34BF0CC71C31304A00D097EB /* MWMAuthorizationCommon.mm in Sources */, 6741A9DF1BF340DE002C974C /* MWMSearchHistoryClearCell.mm in Sources */, @@ -3493,7 +3544,7 @@ 6741A9E81BF340DE002C974C /* MWMAPIBar.mm in Sources */, 6741A9E91BF340DE002C974C /* Preferences.mm in Sources */, 6741A9EA1BF340DE002C974C /* MWMBookmarkColorCell.mm in Sources */, - 34181E921C0ECF210081B586 /* MWMOpeningHoursAddScheduleTableViewCell.mm in Sources */, + 347FD8861C60B2CE002FB65E /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */, 6741A9EB1BF340DE002C974C /* ContextViews.mm in Sources */, 6741A9EC1BF340DE002C974C /* MWMCircularProgress.mm in Sources */, 342CC5F21C2D7730005F3FE5 /* MWMAuthorizationLoginViewController.mm in Sources */, @@ -3505,37 +3556,36 @@ 6741A9F21BF340DE002C974C /* MWMPlacePageInfoCell.mm in Sources */, 6741A9F31BF340DE002C974C /* MWMSearchHistoryManager.mm in Sources */, 6741A9F41BF340DE002C974C /* CALayer+RuntimeAttributes.mm in Sources */, + 56C74C391C74A3BC00B71B9F /* MWMInputEmailValidator.mm in Sources */, 6741A9F51BF340DE002C974C /* BookmarksVC.mm in Sources */, 6741A9F61BF340DE002C974C /* MWMExtendedPlacePageView.mm in Sources */, 6741A9F71BF340DE002C974C /* MWMPedestrianShareAlert.mm in Sources */, + 347FD8741C60B2CE002FB65E /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, 6741A9F81BF340DE002C974C /* MWMSharePedestrianRoutesToastActivityItem.mm in Sources */, 6741A9F91BF340DE002C974C /* MWMSearchSuggestionCell.mm in Sources */, - 34181E961C0ECF210081B586 /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */, 34ABA61C1C2D4DCC00FE1BEC /* UITextField+RuntimeAttributes.mm in Sources */, 6741A9FA1BF340DE002C974C /* MWMBookmarkColorViewController.mm in Sources */, 3401CD7E1C3CF1BE0028C6F8 /* MWMEditorSwitchTableViewCell.mm in Sources */, - 6741A9FB1BF340DE002C974C /* MWMSearchDownloadMapRequestView.mm in Sources */, 34EB84591C073DF70004689F /* MWMOpeningHoursEditorViewController.mm in Sources */, 6741A9FC1BF340DE002C974C /* iosOGLContextFactory.mm in Sources */, - 6741A9FD1BF340DE002C974C /* Framework.cpp in Sources */, + 34DDD5371BFDB0D300407F2F /* MWMMapDownloaderCountryTableViewCell.mm in Sources */, 6741A9FE1BF340DE002C974C /* SelectSetVC.mm in Sources */, 34BC1E571C2ADBD3009BBF51 /* MWMOpeningHoursCommon.mm in Sources */, + 347FD8681C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */, 6741A9FF1BF340DE002C974C /* AddSetVC.mm in Sources */, - 6741AA001BF340DE002C974C /* DownloaderParentVC.mm in Sources */, 6741AA011BF340DE002C974C /* MWMSearchTabbedViewLayout.mm in Sources */, + 34DDD53F1BFDB0FD00407F2F /* MWMMapDownloaderTableViewHeader.mm in Sources */, 6741AA021BF340DE002C974C /* BookmarksRootVC.mm in Sources */, 6741AA031BF340DE002C974C /* MWMActivityViewController.mm in Sources */, - 34ABA6311C2D58F300FE1BEC /* MWMInputEmailValidator.mm in Sources */, + 34DDD5341BFDB0B600407F2F /* MWMMapDownloaderViewController.mm in Sources */, 6741AA041BF340DE002C974C /* MWMNavigationDashboardManager.mm in Sources */, 6741AA051BF340DE002C974C /* MWMSearchDownloadViewController.mm in Sources */, 6741AA061BF340DE002C974C /* MWMSearchHistoryRequestCell.mm in Sources */, F626D52F1C3E83F800C17D15 /* MWMTableViewCell.mm in Sources */, - 34FF2CB61C0F13FA007A6FD2 /* MWMOpeningHoursTableViewCell.mm in Sources */, 3401CD681C3C03A80028C6F8 /* MWMEditorTextTableViewCell.mm in Sources */, F653CE121C6DEC8E00A453F1 /* MWMDropDown.mm in Sources */, 6741AA071BF340DE002C974C /* MWMBottomMenuLayout.mm in Sources */, 3401CD771C3CED1E0028C6F8 /* MWMEditorSelectTableViewCell.mm in Sources */, - 34181E9E1C0ECF210081B586 /* MWMOpeningHoursDaysSelectorTableViewCell.mm in Sources */, 345FDD271C3BB3AF0070C459 /* MWMEditorViewController.mm in Sources */, 6741AA091BF340DE002C974C /* BookmarkCell.mm in Sources */, 6741AA0A1BF340DE002C974C /* MWMBottomMenuCollectionViewCell.mm in Sources */, @@ -3544,9 +3594,9 @@ 6741AA0C1BF340DE002C974C /* MWMNavigationDashboard.mm in Sources */, 34CCFDE11C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.mm in Sources */, 6741AA0D1BF340DE002C974C /* LocalNotificationManager.mm in Sources */, + 347FD88A1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */, 6741AA0E1BF340DE002C974C /* AppInfo.mm in Sources */, 6741AA0F1BF340DE002C974C /* MWMSearchHistoryMyPositionCell.mm in Sources */, - 34181EA21C0ECF210081B586 /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */, 6741AA101BF340DE002C974C /* SelectableCell.mm in Sources */, 6741AA111BF340DE002C974C /* MWMSearchCategoriesManager.mm in Sources */, 34ABA6211C2D517500FE1BEC /* MWMInputValidator.mm in Sources */, @@ -3554,7 +3604,6 @@ 6741AA131BF340DE002C974C /* UIColor+MapsMeColor.mm in Sources */, 34ABA6251C2D551900FE1BEC /* MWMInputValidatorFactory.mm in Sources */, 6741AA141BF340DE002C974C /* MWMMultilineLabel.mm in Sources */, - 34181EB01C0ECF210081B586 /* MWMOpeningHoursTimeSelectorTableViewCell.mm in Sources */, 6741AA151BF340DE002C974C /* Statistics.mm in Sources */, 34C9BD051C6DB693000DC38D /* MWMViewController.mm in Sources */, 6741AA161BF340DE002C974C /* MWMCustomFacebookEvents.mm in Sources */, @@ -3569,21 +3618,21 @@ 6741AA1C1BF340DE002C974C /* MWMRoutingDisclaimerAlert.mm in Sources */, 6741AA1D1BF340DE002C974C /* MWMDownloadTransitMapAlert.mm in Sources */, 6741AA1E1BF340DE002C974C /* LinkCell.mm in Sources */, + 347FD8701C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */, 6741AA1F1BF340DE002C974C /* MWMSearchBookmarksCell.mm in Sources */, 6741AA221BF340DE002C974C /* MWMNavigationView.mm in Sources */, 6741AA231BF340DE002C974C /* UIFont+MapsMeFonts.mm in Sources */, 674A7E301C0DB10B003D48E1 /* MWMMapWidgets.mm in Sources */, + 34EF94291C05A6F30050B714 /* MWMSegue.mm in Sources */, 6741AA241BF340DE002C974C /* UIButton+RuntimeAttributes.mm in Sources */, 6741AA251BF340DE002C974C /* MWMBottomMenuView.mm in Sources */, - 6741AA261BF340DE002C974C /* MWMSearchDownloadMapRequest.mm in Sources */, F6FEA82E1C58F108007223CC /* MWMButton.mm in Sources */, 6741AA271BF340DE002C974C /* MWMBasePlacePageView.mm in Sources */, 6741AA281BF340DE002C974C /* MWMAlert.mm in Sources */, 6741AA291BF340DE002C974C /* ColorPickerView.mm in Sources */, - 34EB844C1C07337B0004689F /* MWMSegue.mm in Sources */, 6741AA2B1BF340DE002C974C /* CircleView.mm in Sources */, + 56D545631C74A41900E3719C /* Framework.cpp in Sources */, 6741AA2C1BF340DE002C974C /* MWMSearchBookmarksManager.mm in Sources */, - 34181E9A1C0ECF210081B586 /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */, 6741AA2D1BF340DE002C974C /* AddSetTableViewCell.mm in Sources */, 6741AA2E1BF340DE002C974C /* MWMSearchView.mm in Sources */, 6741AA2F1BF340DE002C974C /* MWMPlacePageEntity.mm in Sources */, diff --git a/iphone/Maps/Statistics/MWMCustomFacebookEvents.mm b/iphone/Maps/Statistics/MWMCustomFacebookEvents.mm index 122edc5900..572e62f5c9 100644 --- a/iphone/Maps/Statistics/MWMCustomFacebookEvents.mm +++ b/iphone/Maps/Statistics/MWMCustomFacebookEvents.mm @@ -75,7 +75,7 @@ static int gStorageSubscriptionId = kNotSubscribed; { if (gStorageSubscriptionId == kNotSubscribed) { - gStorageSubscriptionId = GetFramework().Storage().Subscribe([](storage::TIndex const &) + gStorageSubscriptionId = GetFramework().Storage().Subscribe([](storage::TCountryId const &) { if (GetFramework().Storage().GetDownloadedFilesCount() >= 2) { @@ -89,7 +89,7 @@ static int gStorageSubscriptionId = kNotSubscribed; }); [Alohalytics logEvent:kDownloadedSecondMapEvent]; } - }, [](storage::TIndex const &, storage::LocalAndRemoteSizeT const &){}); + }, [](storage::TCountryId const &, storage::LocalAndRemoteSizeT const &){}); } } } diff --git a/iphone/Maps/UIFont+MapsMeFonts.mm b/iphone/Maps/UIFont+MapsMeFonts.mm index 189bd02e08..0fa48ec1a4 100644 --- a/iphone/Maps/UIFont+MapsMeFonts.mm +++ b/iphone/Maps/UIFont+MapsMeFonts.mm @@ -1,141 +1,208 @@ +#import "Common.h" #import "UIFont+MapsMeFonts.h" -static NSString * const kRegularFont = @"HelveticaNeue"; -static NSString * const kMediumFont = @"HelveticaNeue-Medium"; -static NSString * const kLightFont = @"HelveticaNeue-Light"; -static NSString * const kBoldFont = @"HelveticaNeue-Bold"; +#include "std/map.hpp" + +typedef NS_ENUM(NSUInteger, FontWeight) +{ + FontWeightRegular, + FontWeightMedium, + FontWeightLight, + FontWeightBold +}; + +NSString * fontName(FontWeight weight, CGFloat size) +{ + if (!isIOSVersionLessThan(9)) + { + if (size < 20) + { + switch (weight) + { + case FontWeightRegular: return @".SFUIText-Regular"; + case FontWeightMedium: return @".SFUIText-Medium"; + case FontWeightLight: return @".SFUIText-Light"; + case FontWeightBold: return @".SFUIText-Bold"; + } + } + else + { + switch (weight) + { + case FontWeightRegular: return @".SFUIDisplay-Regular"; + case FontWeightMedium: return @".SFUIDisplay-Medium"; + case FontWeightLight: return @".SFUIDisplay-Light"; + case FontWeightBold: return @".SFUIDisplay-Bold"; + } + } + } + switch (weight) + { + case FontWeightRegular: return @"HelveticaNeue"; + case FontWeightMedium: return @"HelveticaNeue-Medium"; + case FontWeightLight: return @"HelveticaNeue-Light"; + case FontWeightBold: return @"HelveticaNeue-Bold"; + } +} @implementation UIFont (MapsMeFonts) + (UIFont *)regular10 { - return [UIFont fontWithName:kRegularFont size:10]; + CGFloat const size = 10; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular12 { - return [UIFont fontWithName:kRegularFont size:12]; + CGFloat const size = 12; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular14 { - return [UIFont fontWithName:kRegularFont size:14]; + CGFloat const size = 14; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular15 { - return [UIFont fontWithName:kRegularFont size:15]; + CGFloat const size = 15; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular16 { - return [UIFont fontWithName:kRegularFont size:16]; + CGFloat const size = 16; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular17 { - return [UIFont fontWithName:kRegularFont size:17]; + CGFloat const size = 17; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular18 { - return [UIFont fontWithName:kRegularFont size:18]; + CGFloat const size = 18; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular24 { - return [UIFont fontWithName:kRegularFont size:24]; + CGFloat const size = 24; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular32 { - return [UIFont fontWithName:kRegularFont size:32]; + CGFloat const size = 32; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)regular52 { - return [UIFont fontWithName:kRegularFont size:52]; + CGFloat const size = 52; + return [UIFont fontWithName:fontName(FontWeightRegular, size) size:size]; } + (UIFont *)medium10 { - return [UIFont fontWithName:kMediumFont size:10]; + CGFloat const size = 10; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium14 { - return [UIFont fontWithName:kMediumFont size:14]; + CGFloat const size = 14; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium16 { - return [UIFont fontWithName:kMediumFont size:16]; + CGFloat const size = 16; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium17 { - return [UIFont fontWithName:kMediumFont size:17]; + CGFloat const size = 17; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium18 { - return [UIFont fontWithName:kMediumFont size:18]; + CGFloat const size = 18; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium20 { - return [UIFont fontWithName:kMediumFont size:20]; + CGFloat const size = 20; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium24 { - return [UIFont fontWithName:kMediumFont size:24]; + CGFloat const size = 24; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium36 { - return [UIFont fontWithName:kMediumFont size:36]; + CGFloat const size = 36; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium40 { - return [UIFont fontWithName:kMediumFont size:40.]; + CGFloat const size = 40; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)medium44 { - return [UIFont fontWithName:kMediumFont size:44.]; + CGFloat const size = 44; + return [UIFont fontWithName:fontName(FontWeightMedium, size) size:size]; } + (UIFont *)light10 { - return [UIFont fontWithName:kLightFont size:10]; + CGFloat const size = 10; + return [UIFont fontWithName:fontName(FontWeightLight, size) size:size]; } + (UIFont *)light12 { - return [UIFont fontWithName:kLightFont size:12]; + CGFloat const size = 12; + return [UIFont fontWithName:fontName(FontWeightLight, size) size:size]; } + (UIFont *)light16 { - return [UIFont fontWithName:kLightFont size:16]; + CGFloat const size = 16; + return [UIFont fontWithName:fontName(FontWeightLight, size) size:size]; } + (UIFont *)light17 { - return [UIFont fontWithName:kLightFont size:17]; + CGFloat const size = 17; + return [UIFont fontWithName:fontName(FontWeightLight, size) size:size]; } + (UIFont *)bold16 { - return [UIFont fontWithName:kBoldFont size:16]; + CGFloat const size = 16; + return [UIFont fontWithName:fontName(FontWeightBold, size) size:size]; } + (UIFont *)bold17 { - return [UIFont fontWithName:kBoldFont size:17]; + CGFloat const size = 17; + return [UIFont fontWithName:fontName(FontWeightBold, size) size:size]; } + (UIFont *)bold48 { - return [UIFont fontWithName:kBoldFont size:48]; + CGFloat const size = 48; + return [UIFont fontWithName:fontName(FontWeightBold, size) size:size]; } + (UIFont *)fontWithName:(NSString *)fontName diff --git a/storage/countries.cpp b/storage/countries.cpp deleted file mode 100644 index 02646e1326..0000000000 --- a/storage/countries.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "storage/countries.hpp" -#include "storage/simple_tree.hpp" - -#include "base/string_utils.hpp" - -#include "geometry/cellid.hpp" - -#include "std/iostream.hpp" - -typedef m2::CellId<9> CountryCellId; - -namespace mapinfo -{ - void CountryTreeNode::AddCellId(string const & cellId) - { - CountryCellId id = CountryCellId::FromString(cellId); - m_ids.push_back(static_cast(id.ToBitsAndLevel().first)); - ASSERT_EQUAL(CountryCellId::FromBitsAndLevel(m_ids.back(), 8).ToString(), cellId, ()); - } - - bool LoadCountries(SimpleTree & tree, std::istream & stream) - { - std::string line; - CountryTreeNode * value = &tree.Value(); - while (stream.good()) - { - std::getline(stream, line); - if (line.empty()) - continue; - - // calculate spaces - depth inside the tree - int spaces = 0; - for (size_t i = 0; i < line.size(); ++i) - { - if (line[i] == ' ') - ++spaces; - else - break; - } - switch (spaces) - { - case 0: // this is value for current node - value->AddCellId(line);; - break; - case 1: // country group - case 2: // country name - case 3: // region - value = &tree.AddAtDepth(spaces - 1, CountryTreeNode(line.substr(spaces))); - break; - default: - return false; - } - } - return true; - } -} diff --git a/storage/countries.hpp b/storage/countries.hpp deleted file mode 100644 index f41e402492..0000000000 --- a/storage/countries.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once -#include "base/base.hpp" - -#include "std/string.hpp" -#include "std/vector.hpp" - -template class SimpleTree; - -namespace mapinfo -{ - /// used in SimpleTree when loading countries.txt - class CountryTreeNode - { - /// group, country or region - string m_name; - /// cell ids for the country - vector m_ids; - - public: - CountryTreeNode(string const & name = string()) : m_name(name) {} - - bool operator<(CountryTreeNode const & other) const - { - return m_name < other.m_name; - } - - string const & Name() const { return m_name; } - - void AddCellId(string const & cellId); - }; - - /// loads tree from given stream - bool LoadCountries(SimpleTree & tree, std::istream & stream); -} diff --git a/storage/storage_helpers.cpp b/storage/storage_helpers.cpp index fbcc4ff526..421e95a1d7 100644 --- a/storage/storage_helpers.cpp +++ b/storage/storage_helpers.cpp @@ -13,4 +13,9 @@ bool IsPointCoveredByDownloadedMaps(m2::PointD const & position, return storage.IsNodeDownloaded(countryInfoGetter.GetRegionCountryId(position)); } +bool IsDownloadFailed(TStatus status) +{ + return status == TStatus::EDownloadFailed || status == TStatus::EOutOfMemFailed || + status == TStatus::EUnknown; +} } // namespace storage diff --git a/storage/storage_helpers.hpp b/storage/storage_helpers.hpp index 9fa04fd5c2..d0ce5c9f0d 100644 --- a/storage/storage_helpers.hpp +++ b/storage/storage_helpers.hpp @@ -2,6 +2,8 @@ #include "geometry/point2d.hpp" +#include "storage_defines.hpp" + namespace storage { class CountryInfoGetter; @@ -14,4 +16,5 @@ bool IsPointCoveredByDownloadedMaps(m2::PointD const & position, Storage const & storage, CountryInfoGetter const & countryInfoGetter); +bool IsDownloadFailed(TStatus status); } // namespace storage diff --git a/storage/storage_tests/storage_tests.cpp b/storage/storage_tests/storage_tests.cpp index 8c596f249c..b9adbf7a8f 100644 --- a/storage/storage_tests/storage_tests.cpp +++ b/storage/storage_tests/storage_tests.cpp @@ -815,7 +815,7 @@ UNIT_TEST(StorageTest_DeleteCountry) TEST(Platform::IsFileExistsByFullPath(bitsPath), (bitsPath)); storage.DeleteCustomCountryVersion(file); - TEST(!map.Exists(), ()) + TEST(!map.Exists(), ()); TEST(!Platform::IsFileExistsByFullPath(bitsPath), (bitsPath)); map.Reset(); diff --git a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj index 3b045b37a5..08c999d192 100644 --- a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj +++ b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj @@ -7,8 +7,10 @@ objects = { /* Begin PBXBuildFile section */ - 3413E3431C0DCAB800D14D24 /* requested_tiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3413E3411C0DCAB800D14D24 /* requested_tiles.cpp */; }; - 3413E3441C0DCAB800D14D24 /* requested_tiles.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3413E3421C0DCAB800D14D24 /* requested_tiles.hpp */; }; + 56BF56DA1C7608C0006DD7CB /* choose_position_mark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56BF56D81C7608C0006DD7CB /* choose_position_mark.cpp */; }; + 56BF56DB1C7608C0006DD7CB /* choose_position_mark.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56BF56D91C7608C0006DD7CB /* choose_position_mark.hpp */; }; + 56D545661C74A44900E3719C /* overlay_batcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D545641C74A44900E3719C /* overlay_batcher.cpp */; }; + 56D545671C74A44900E3719C /* overlay_batcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D545651C74A44900E3719C /* overlay_batcher.hpp */; }; 670947911BDF9BE1005014C0 /* intrusive_vector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947421BDF9BE0005014C0 /* intrusive_vector.hpp */; }; 670947921BDF9BE1005014C0 /* kinetic_scroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947431BDF9BE0005014C0 /* kinetic_scroller.cpp */; }; 670947931BDF9BE1005014C0 /* kinetic_scroller.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947441BDF9BE0005014C0 /* kinetic_scroller.hpp */; }; @@ -70,10 +72,6 @@ 670947CD1BDF9BE1005014C0 /* tile_info.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6709477E1BDF9BE0005014C0 /* tile_info.hpp */; }; 670947CE1BDF9BE1005014C0 /* tile_key.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6709477F1BDF9BE0005014C0 /* tile_key.cpp */; }; 670947CF1BDF9BE1005014C0 /* tile_key.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947801BDF9BE0005014C0 /* tile_key.hpp */; }; - 670947D01BDF9BE1005014C0 /* tile_tree_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947811BDF9BE0005014C0 /* tile_tree_builder.cpp */; }; - 670947D11BDF9BE1005014C0 /* tile_tree_builder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947821BDF9BE0005014C0 /* tile_tree_builder.hpp */; }; - 670947D21BDF9BE1005014C0 /* tile_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947831BDF9BE0005014C0 /* tile_tree.cpp */; }; - 670947D31BDF9BE1005014C0 /* tile_tree.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947841BDF9BE0005014C0 /* tile_tree.hpp */; }; 670947D41BDF9BE1005014C0 /* tile_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947851BDF9BE0005014C0 /* tile_utils.cpp */; }; 670947D51BDF9BE1005014C0 /* tile_utils.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947861BDF9BE0005014C0 /* tile_utils.hpp */; }; 670947D61BDF9BE1005014C0 /* user_event_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947871BDF9BE0005014C0 /* user_event_stream.cpp */; }; @@ -193,8 +191,10 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 3413E3411C0DCAB800D14D24 /* requested_tiles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = requested_tiles.cpp; sourceTree = ""; }; - 3413E3421C0DCAB800D14D24 /* requested_tiles.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = requested_tiles.hpp; sourceTree = ""; }; + 56BF56D81C7608C0006DD7CB /* choose_position_mark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = choose_position_mark.cpp; sourceTree = ""; }; + 56BF56D91C7608C0006DD7CB /* choose_position_mark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = choose_position_mark.hpp; sourceTree = ""; }; + 56D545641C74A44900E3719C /* overlay_batcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = overlay_batcher.cpp; sourceTree = ""; }; + 56D545651C74A44900E3719C /* overlay_batcher.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = overlay_batcher.hpp; sourceTree = ""; }; 6709473A1BDF9B82005014C0 /* libdrape_frontend.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libdrape_frontend.a; sourceTree = BUILT_PRODUCTS_DIR; }; 670947421BDF9BE0005014C0 /* intrusive_vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = intrusive_vector.hpp; sourceTree = ""; }; 670947431BDF9BE0005014C0 /* kinetic_scroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kinetic_scroller.cpp; sourceTree = ""; }; @@ -259,10 +259,6 @@ 6709477E1BDF9BE0005014C0 /* tile_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tile_info.hpp; sourceTree = ""; }; 6709477F1BDF9BE0005014C0 /* tile_key.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tile_key.cpp; sourceTree = ""; }; 670947801BDF9BE0005014C0 /* tile_key.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tile_key.hpp; sourceTree = ""; }; - 670947811BDF9BE0005014C0 /* tile_tree_builder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tile_tree_builder.cpp; sourceTree = ""; }; - 670947821BDF9BE0005014C0 /* tile_tree_builder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tile_tree_builder.hpp; sourceTree = ""; }; - 670947831BDF9BE0005014C0 /* tile_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tile_tree.cpp; sourceTree = ""; }; - 670947841BDF9BE0005014C0 /* tile_tree.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tile_tree.hpp; sourceTree = ""; }; 670947851BDF9BE0005014C0 /* tile_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tile_utils.cpp; sourceTree = ""; }; 670947861BDF9BE0005014C0 /* tile_utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tile_utils.hpp; sourceTree = ""; }; 670947871BDF9BE0005014C0 /* user_event_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = user_event_stream.cpp; sourceTree = ""; }; @@ -412,6 +408,8 @@ 670947411BDF9B99005014C0 /* drape_frontend */ = { isa = PBXGroup; children = ( + 56D545641C74A44900E3719C /* overlay_batcher.cpp */, + 56D545651C74A44900E3719C /* overlay_batcher.hpp */, 670E39361C46C59000E9C0A6 /* batch_merge_helper.cpp */, 670E39371C46C59000E9C0A6 /* batch_merge_helper.hpp */, 670E39381C46C59000E9C0A6 /* color_constants.cpp */, @@ -513,10 +511,6 @@ 6709477E1BDF9BE0005014C0 /* tile_info.hpp */, 6709477F1BDF9BE0005014C0 /* tile_key.cpp */, 670947801BDF9BE0005014C0 /* tile_key.hpp */, - 670947811BDF9BE0005014C0 /* tile_tree_builder.cpp */, - 670947821BDF9BE0005014C0 /* tile_tree_builder.hpp */, - 670947831BDF9BE0005014C0 /* tile_tree.cpp */, - 670947841BDF9BE0005014C0 /* tile_tree.hpp */, 670947851BDF9BE0005014C0 /* tile_utils.cpp */, 670947861BDF9BE0005014C0 /* tile_utils.hpp */, 670947871BDF9BE0005014C0 /* user_event_stream.cpp */, @@ -559,6 +553,8 @@ 670948061BDF9C15005014C0 /* gui */ = { isa = PBXGroup; children = ( + 56BF56D81C7608C0006DD7CB /* choose_position_mark.cpp */, + 56BF56D91C7608C0006DD7CB /* choose_position_mark.hpp */, 670948211BDF9C48005014C0 /* button.cpp */, 670948221BDF9C48005014C0 /* button.hpp */, 670948231BDF9C48005014C0 /* compass.cpp */, @@ -630,8 +626,8 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 670947D31BDF9BE1005014C0 /* tile_tree.hpp in Headers */, 670947971BDF9BE1005014C0 /* line_shape.hpp in Headers */, + 56BF56DB1C7608C0006DD7CB /* choose_position_mark.hpp in Headers */, 670948031BDF9BF5005014C0 /* drape_engine.hpp in Headers */, 6709486A1BDF9C7F005014C0 /* brush_info.hpp in Headers */, 670948401BDF9C48005014C0 /* country_status_helper.hpp in Headers */, @@ -666,6 +662,7 @@ 670947951BDF9BE1005014C0 /* line_shape_helper.hpp in Headers */, 670948501BDF9C48005014C0 /* skin.hpp in Headers */, 6709481B1BDF9C39005014C0 /* model_view_animation.hpp in Headers */, + 56D545671C74A44900E3719C /* overlay_batcher.hpp in Headers */, 670947B21BDF9BE1005014C0 /* read_mwm_task.hpp in Headers */, 670947C91BDF9BE1005014C0 /* text_shape.hpp in Headers */, 6709483A1BDF9C48005014C0 /* button.hpp in Headers */, @@ -675,7 +672,6 @@ 6709479C1BDF9BE1005014C0 /* memory_feature_index.hpp in Headers */, 670947E51BDF9BEC005014C0 /* engine_context.hpp in Headers */, 6743D3701C3A9F090095054B /* framebuffer.hpp in Headers */, - 670947D11BDF9BE1005014C0 /* tile_tree_builder.hpp in Headers */, F6B283141C1B04680081957A /* gps_track_shape.hpp in Headers */, 670947BE1BDF9BE1005014C0 /* rule_drawer.hpp in Headers */, 6709487C1BDF9C7F005014C0 /* pen_info.hpp in Headers */, @@ -786,6 +782,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 56BF56DA1C7608C0006DD7CB /* choose_position_mark.cpp in Sources */, 67E91C751BDFC85E005CEE88 /* feature_processor.cpp in Sources */, 6743D36D1C3A9F090095054B /* arrow3d.cpp in Sources */, 670E393A1C46C59000E9C0A6 /* batch_merge_helper.cpp in Sources */, @@ -798,8 +795,6 @@ 67E91C7D1BDFC85E005CEE88 /* user_marks_provider.cpp in Sources */, 67E91C7E1BDFC85E005CEE88 /* visual_params.cpp in Sources */, 6709486E1BDF9C7F005014C0 /* default_font.cpp in Sources */, - 670947D01BDF9BE1005014C0 /* tile_tree_builder.cpp in Sources */, - 670947D21BDF9BE1005014C0 /* tile_tree.cpp in Sources */, 675D21661BFB785900717E4F /* ruler.cpp in Sources */, 675D218F1BFB871D00717E4F /* software_renderer.cpp in Sources */, 670947CE1BDF9BE1005014C0 /* tile_key.cpp in Sources */, @@ -862,6 +857,7 @@ 670948181BDF9C39005014C0 /* interpolations.cpp in Sources */, 670948021BDF9BF5005014C0 /* drape_engine.cpp in Sources */, 6709483F1BDF9C48005014C0 /* country_status_helper.cpp in Sources */, + 56D545661C74A44900E3719C /* overlay_batcher.cpp in Sources */, 6709481C1BDF9C39005014C0 /* opacity_animation.cpp in Sources */, 6709479B1BDF9BE1005014C0 /* memory_feature_index.cpp in Sources */, 670947E61BDF9BEC005014C0 /* frontend_renderer.cpp in Sources */, diff --git a/xcode/geometry/geometry.xcodeproj/project.pbxproj b/xcode/geometry/geometry.xcodeproj/project.pbxproj index 9a87251e44..ed711807b0 100644 --- a/xcode/geometry/geometry.xcodeproj/project.pbxproj +++ b/xcode/geometry/geometry.xcodeproj/project.pbxproj @@ -9,8 +9,10 @@ /* Begin PBXBuildFile section */ 347F33701C454205009758CC /* triangle2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F336E1C454205009758CC /* triangle2d.cpp */; }; 347F33711C454205009758CC /* triangle2d.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F336F1C454205009758CC /* triangle2d.hpp */; }; - 3492CC161C6DF05A0057D8E8 /* segment2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3492CC141C6DF05A0057D8E8 /* segment2d.cpp */; }; - 3492CC171C6DF05A0057D8E8 /* segment2d.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3492CC151C6DF05A0057D8E8 /* segment2d.hpp */; }; + 56D5456A1C74A46D00E3719C /* algorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D545681C74A46D00E3719C /* algorithm.cpp */; }; + 56D5456B1C74A46D00E3719C /* algorithm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D545691C74A46D00E3719C /* algorithm.hpp */; }; + 56EB1ED01C6B6DF30022D831 /* segment2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56EB1ECE1C6B6DF30022D831 /* segment2d.cpp */; }; + 56EB1ED11C6B6DF30022D831 /* segment2d.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56EB1ECF1C6B6DF30022D831 /* segment2d.hpp */; }; 670F296A1BA9D3C200F2ABF4 /* equality.hpp in Sources */ = {isa = PBXBuildFile; fileRef = 670F29291BA9D2E700F2ABF4 /* equality.hpp */; }; 670F296C1BA9D3C200F2ABF4 /* large_polygon.hpp in Sources */ = {isa = PBXBuildFile; fileRef = 670F292B1BA9D2E700F2ABF4 /* large_polygon.hpp */; }; 670F297A1BA9D3C200F2ABF4 /* test_regions.hpp in Sources */ = {isa = PBXBuildFile; fileRef = 670F29391BA9D2E700F2ABF4 /* test_regions.hpp */; }; @@ -95,8 +97,10 @@ /* Begin PBXFileReference section */ 347F336E1C454205009758CC /* triangle2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = triangle2d.cpp; sourceTree = ""; }; 347F336F1C454205009758CC /* triangle2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = triangle2d.hpp; sourceTree = ""; }; - 3492CC141C6DF05A0057D8E8 /* segment2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = segment2d.cpp; sourceTree = ""; }; - 3492CC151C6DF05A0057D8E8 /* segment2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = segment2d.hpp; sourceTree = ""; }; + 56D545681C74A46D00E3719C /* algorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = algorithm.cpp; sourceTree = ""; }; + 56D545691C74A46D00E3719C /* algorithm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = algorithm.hpp; sourceTree = ""; }; + 56EB1ECE1C6B6DF30022D831 /* segment2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = segment2d.cpp; sourceTree = ""; }; + 56EB1ECF1C6B6DF30022D831 /* segment2d.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = segment2d.hpp; sourceTree = ""; }; 670D05A51B0E01FF0013A7AC /* defaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = defaults.xcconfig; path = ../defaults.xcconfig; sourceTree = ""; }; 670F29221BA9D2E700F2ABF4 /* angle_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = angle_test.cpp; sourceTree = ""; }; 670F29231BA9D2E700F2ABF4 /* anyrect_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = anyrect_test.cpp; sourceTree = ""; }; @@ -258,8 +262,10 @@ 675344931A3F684600A0A8C3 /* geometry */ = { isa = PBXGroup; children = ( - 3492CC141C6DF05A0057D8E8 /* segment2d.cpp */, - 3492CC151C6DF05A0057D8E8 /* segment2d.hpp */, + 56D545681C74A46D00E3719C /* algorithm.cpp */, + 56D545691C74A46D00E3719C /* algorithm.hpp */, + 56EB1ECE1C6B6DF30022D831 /* segment2d.cpp */, + 56EB1ECF1C6B6DF30022D831 /* segment2d.hpp */, 347F336E1C454205009758CC /* triangle2d.cpp */, 347F336F1C454205009758CC /* triangle2d.hpp */, E92D8BD21C15AFAA00A98D17 /* mercator.cpp */, @@ -321,9 +327,10 @@ 675344E01A3F68F900A0A8C3 /* boost_concept.hpp in Headers */, 675344C01A3F687400A0A8C3 /* cellid.hpp in Headers */, 675344CB1A3F687400A0A8C3 /* polyline2d.hpp in Headers */, - 3492CC171C6DF05A0057D8E8 /* segment2d.hpp in Headers */, + 56EB1ED11C6B6DF30022D831 /* segment2d.hpp in Headers */, 675344D21A3F687400A0A8C3 /* screenbase.hpp in Headers */, E92D8BD51C15AFAA00A98D17 /* mercator.hpp in Headers */, + 56D5456B1C74A46D00E3719C /* algorithm.hpp in Headers */, 675344BF1A3F687400A0A8C3 /* avg_vector.hpp in Headers */, 675344D31A3F687400A0A8C3 /* simplification.hpp in Headers */, 675344CC1A3F687400A0A8C3 /* rect_intersect.hpp in Headers */, @@ -462,6 +469,7 @@ files = ( 675344C31A3F687400A0A8C3 /* distance_on_sphere.cpp in Sources */, 675344CF1A3F687400A0A8C3 /* robust_orientation.cpp in Sources */, + 56D5456A1C74A46D00E3719C /* algorithm.cpp in Sources */, 675344D41A3F687400A0A8C3 /* spline.cpp in Sources */, 675344D11A3F687400A0A8C3 /* screenbase.cpp in Sources */, 347F33701C454205009758CC /* triangle2d.cpp in Sources */, @@ -471,7 +479,7 @@ E92D8BD11C15AF9100A98D17 /* mercator_test.cpp in Sources */, 675344C61A3F687400A0A8C3 /* packer.cpp in Sources */, 675344DE1A3F68F900A0A8C3 /* binary_operators.cpp in Sources */, - 3492CC161C6DF05A0057D8E8 /* segment2d.cpp in Sources */, + 56EB1ED01C6B6DF30022D831 /* segment2d.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/xcode/indexer/indexer.xcodeproj/project.pbxproj b/xcode/indexer/indexer.xcodeproj/project.pbxproj index 54aebc83f4..3f8c061adc 100644 --- a/xcode/indexer/indexer.xcodeproj/project.pbxproj +++ b/xcode/indexer/indexer.xcodeproj/project.pbxproj @@ -17,6 +17,25 @@ 347F33811C454242009758CC /* trie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33781C454242009758CC /* trie.hpp */; }; 347F33821C454242009758CC /* types_skipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F33791C454242009758CC /* types_skipper.cpp */; }; 347F33831C454242009758CC /* types_skipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F337A1C454242009758CC /* types_skipper.hpp */; }; + 56C74C1C1C749E4700B71B9F /* categories_holder_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C121C749E4700B71B9F /* categories_holder_loader.cpp */; }; + 56C74C1D1C749E4700B71B9F /* categories_holder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C131C749E4700B71B9F /* categories_holder.cpp */; }; + 56C74C1E1C749E4700B71B9F /* categories_holder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C141C749E4700B71B9F /* categories_holder.hpp */; }; + 56C74C1F1C749E4700B71B9F /* displacement_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C151C749E4700B71B9F /* displacement_manager.hpp */; }; + 56C74C201C749E4700B71B9F /* edits_migration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C161C749E4700B71B9F /* edits_migration.cpp */; }; + 56C74C211C749E4700B71B9F /* edits_migration.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C171C749E4700B71B9F /* edits_migration.hpp */; }; + 56C74C221C749E4700B71B9F /* search_delimiters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C181C749E4700B71B9F /* search_delimiters.cpp */; }; + 56C74C231C749E4700B71B9F /* search_delimiters.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C191C749E4700B71B9F /* search_delimiters.hpp */; }; + 56C74C241C749E4700B71B9F /* search_string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C1A1C749E4700B71B9F /* search_string_utils.cpp */; }; + 56C74C251C749E4700B71B9F /* search_string_utils.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C1B1C749E4700B71B9F /* search_string_utils.hpp */; }; + 56C74C2F1C749E8100B71B9F /* categories_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C261C749E8100B71B9F /* categories_test.cpp */; }; + 56C74C301C749E8100B71B9F /* drules_selector_parser_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C271C749E8100B71B9F /* drules_selector_parser_test.cpp */; }; + 56C74C311C749E8100B71B9F /* feature_metadata_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C281C749E8100B71B9F /* feature_metadata_test.cpp */; }; + 56C74C321C749E8100B71B9F /* feature_xml_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C291C749E8100B71B9F /* feature_xml_test.cpp */; }; + 56C74C331C749E8100B71B9F /* rank_table_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C2A1C749E8100B71B9F /* rank_table_test.cpp */; }; + 56C74C341C749E8100B71B9F /* search_string_utils_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C2B1C749E8100B71B9F /* search_string_utils_test.cpp */; }; + 56C74C351C749E8100B71B9F /* succinct_trie_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C2C1C749E8100B71B9F /* succinct_trie_test.cpp */; }; + 56C74C361C749E8100B71B9F /* test_mwm_set.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56C74C2D1C749E8100B71B9F /* test_mwm_set.hpp */; }; + 56C74C371C749E8100B71B9F /* trie_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56C74C2E1C749E8100B71B9F /* trie_test.cpp */; }; 670C610D1AB065B100C38A8C /* cell_coverer_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C60FA1AB065B100C38A8C /* cell_coverer_test.cpp */; }; 670C610E1AB065B100C38A8C /* cell_id_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C60FB1AB065B100C38A8C /* cell_id_test.cpp */; }; 670C610F1AB065B100C38A8C /* checker_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C60FC1AB065B100C38A8C /* checker_test.cpp */; }; @@ -34,7 +53,6 @@ 670C611C1AB065B100C38A8C /* test_polylines.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670C61091AB065B100C38A8C /* test_polylines.hpp */; }; 670C611D1AB065B100C38A8C /* test_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C610A1AB065B100C38A8C /* test_type.cpp */; }; 670C611E1AB065B100C38A8C /* visibility_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C610B1AB065B100C38A8C /* visibility_test.cpp */; }; - 670C61201AB065E100C38A8C /* testingmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C611F1AB065E100C38A8C /* testingmain.cpp */; }; 670C612C1AB0663400C38A8C /* testingmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670C611F1AB065E100C38A8C /* testingmain.cpp */; }; 670C61401AB066CD00C38A8C /* libindexer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6753409A1A3F53CB00A0A8C3 /* libindexer.a */; }; 670C61421AB0670700C38A8C /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 670C61411AB0670700C38A8C /* libplatform.a */; }; @@ -156,6 +174,25 @@ 347F33781C454242009758CC /* trie.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = trie.hpp; sourceTree = ""; }; 347F33791C454242009758CC /* types_skipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types_skipper.cpp; sourceTree = ""; }; 347F337A1C454242009758CC /* types_skipper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = types_skipper.hpp; sourceTree = ""; }; + 56C74C121C749E4700B71B9F /* categories_holder_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = categories_holder_loader.cpp; sourceTree = ""; }; + 56C74C131C749E4700B71B9F /* categories_holder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = categories_holder.cpp; sourceTree = ""; }; + 56C74C141C749E4700B71B9F /* categories_holder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = categories_holder.hpp; sourceTree = ""; }; + 56C74C151C749E4700B71B9F /* displacement_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = displacement_manager.hpp; sourceTree = ""; }; + 56C74C161C749E4700B71B9F /* edits_migration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = edits_migration.cpp; sourceTree = ""; }; + 56C74C171C749E4700B71B9F /* edits_migration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = edits_migration.hpp; sourceTree = ""; }; + 56C74C181C749E4700B71B9F /* search_delimiters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_delimiters.cpp; sourceTree = ""; }; + 56C74C191C749E4700B71B9F /* search_delimiters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_delimiters.hpp; sourceTree = ""; }; + 56C74C1A1C749E4700B71B9F /* search_string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_string_utils.cpp; sourceTree = ""; }; + 56C74C1B1C749E4700B71B9F /* search_string_utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_string_utils.hpp; sourceTree = ""; }; + 56C74C261C749E8100B71B9F /* categories_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = categories_test.cpp; sourceTree = ""; }; + 56C74C271C749E8100B71B9F /* drules_selector_parser_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drules_selector_parser_test.cpp; sourceTree = ""; }; + 56C74C281C749E8100B71B9F /* feature_metadata_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_metadata_test.cpp; sourceTree = ""; }; + 56C74C291C749E8100B71B9F /* feature_xml_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_xml_test.cpp; sourceTree = ""; }; + 56C74C2A1C749E8100B71B9F /* rank_table_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rank_table_test.cpp; sourceTree = ""; }; + 56C74C2B1C749E8100B71B9F /* search_string_utils_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_string_utils_test.cpp; sourceTree = ""; }; + 56C74C2C1C749E8100B71B9F /* succinct_trie_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = succinct_trie_test.cpp; sourceTree = ""; }; + 56C74C2D1C749E8100B71B9F /* test_mwm_set.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_mwm_set.hpp; sourceTree = ""; }; + 56C74C2E1C749E8100B71B9F /* trie_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trie_test.cpp; sourceTree = ""; }; 670C60FA1AB065B100C38A8C /* cell_coverer_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cell_coverer_test.cpp; sourceTree = ""; }; 670C60FB1AB065B100C38A8C /* cell_id_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cell_id_test.cpp; sourceTree = ""; }; 670C60FC1AB065B100C38A8C /* checker_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = checker_test.cpp; sourceTree = ""; }; @@ -307,6 +344,15 @@ 670C60F81AB0657700C38A8C /* indexer_tests */ = { isa = PBXGroup; children = ( + 56C74C261C749E8100B71B9F /* categories_test.cpp */, + 56C74C271C749E8100B71B9F /* drules_selector_parser_test.cpp */, + 56C74C281C749E8100B71B9F /* feature_metadata_test.cpp */, + 56C74C291C749E8100B71B9F /* feature_xml_test.cpp */, + 56C74C2A1C749E8100B71B9F /* rank_table_test.cpp */, + 56C74C2B1C749E8100B71B9F /* search_string_utils_test.cpp */, + 56C74C2C1C749E8100B71B9F /* succinct_trie_test.cpp */, + 56C74C2D1C749E8100B71B9F /* test_mwm_set.hpp */, + 56C74C2E1C749E8100B71B9F /* trie_test.cpp */, 670C61571AB068C100C38A8C /* Libs */, 670C611F1AB065E100C38A8C /* testingmain.cpp */, 670C60FA1AB065B100C38A8C /* cell_coverer_test.cpp */, @@ -383,6 +429,16 @@ 6753409C1A3F53CB00A0A8C3 /* indexer */ = { isa = PBXGroup; children = ( + 56C74C121C749E4700B71B9F /* categories_holder_loader.cpp */, + 56C74C131C749E4700B71B9F /* categories_holder.cpp */, + 56C74C141C749E4700B71B9F /* categories_holder.hpp */, + 56C74C151C749E4700B71B9F /* displacement_manager.hpp */, + 56C74C161C749E4700B71B9F /* edits_migration.cpp */, + 56C74C171C749E4700B71B9F /* edits_migration.hpp */, + 56C74C181C749E4700B71B9F /* search_delimiters.cpp */, + 56C74C191C749E4700B71B9F /* search_delimiters.hpp */, + 56C74C1A1C749E4700B71B9F /* search_string_utils.cpp */, + 56C74C1B1C749E4700B71B9F /* search_string_utils.hpp */, 347F33721C454242009758CC /* rank_table.cpp */, 347F33731C454242009758CC /* rank_table.hpp */, 347F33741C454242009758CC /* succinct_trie_builder.hpp */, @@ -497,6 +553,7 @@ 675341341A3F540F00A0A8C3 /* interval_index.hpp in Headers */, 675341241A3F540F00A0A8C3 /* feature_visibility.hpp in Headers */, 6753411D1A3F540F00A0A8C3 /* feature_loader_base.hpp in Headers */, + 56C74C231C749E4700B71B9F /* search_delimiters.hpp in Headers */, 675341131A3F540F00A0A8C3 /* feature_algo.hpp in Headers */, 6726C1D21A49DAAC005EEA39 /* feature_meta.hpp in Headers */, 347F337F1C454242009758CC /* trie_builder.hpp in Headers */, @@ -507,6 +564,8 @@ 670EE56D1B60033A001E8064 /* unique_index.hpp in Headers */, 6753412B1A3F540F00A0A8C3 /* geometry_coding.hpp in Headers */, 675340FF1A3F540F00A0A8C3 /* cell_coverer.hpp in Headers */, + 56C74C361C749E8100B71B9F /* test_mwm_set.hpp in Headers */, + 56C74C251C749E4700B71B9F /* search_string_utils.hpp in Headers */, 6753410C1A3F540F00A0A8C3 /* drawing_rule_def.hpp in Headers */, 675341001A3F540F00A0A8C3 /* cell_id.hpp in Headers */, 670D04AD1B0BA8580013A7AC /* interval_index_101.hpp in Headers */, @@ -520,6 +579,7 @@ 6753413C1A3F540F00A0A8C3 /* point_to_int64.hpp in Headers */, 6758AED41BB4413000C26E27 /* drules_selector.hpp in Headers */, 675341061A3F540F00A0A8C3 /* coding_params.hpp in Headers */, + 56C74C211C749E4700B71B9F /* edits_migration.hpp in Headers */, 6753412F1A3F540F00A0A8C3 /* index_builder.hpp in Headers */, 675341411A3F540F00A0A8C3 /* scales.hpp in Headers */, 675341321A3F540F00A0A8C3 /* interval_index_builder.hpp in Headers */, @@ -530,7 +590,9 @@ 674125141B4C02F100A3E828 /* map_style_reader.hpp in Headers */, 675341221A3F540F00A0A8C3 /* feature_utils.hpp in Headers */, 347F337E1C454242009758CC /* succinct_trie_reader.hpp in Headers */, + 56C74C1F1C749E4700B71B9F /* displacement_manager.hpp in Headers */, 675341171A3F540F00A0A8C3 /* feature_data.hpp in Headers */, + 56C74C1E1C749E4700B71B9F /* categories_holder.hpp in Headers */, 347F33811C454242009758CC /* trie.hpp in Headers */, 6753410F1A3F540F00A0A8C3 /* drules_include.hpp in Headers */, 675341311A3F540F00A0A8C3 /* index.hpp in Headers */, @@ -631,15 +693,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 56C74C321C749E8100B71B9F /* feature_xml_test.cpp in Sources */, + 56C74C241C749E4700B71B9F /* search_string_utils.cpp in Sources */, 340DF9D01C1FF04D00B5C7EC /* osm_editor.cpp in Sources */, 67F183731BD4FCF500AB1840 /* map_style.cpp in Sources */, 670D04AB1B0BA8580013A7AC /* feature_loader_101.cpp in Sources */, 6758AED31BB4413000C26E27 /* drules_selector.cpp in Sources */, 6753411A1A3F540F00A0A8C3 /* feature_impl.cpp in Sources */, 670C61111AB065B100C38A8C /* geometry_coding_test.cpp in Sources */, + 56C74C1C1C749E4700B71B9F /* categories_holder_loader.cpp in Sources */, 6753410D1A3F540F00A0A8C3 /* drawing_rules.cpp in Sources */, 670C611E1AB065B100C38A8C /* visibility_test.cpp in Sources */, 675341301A3F540F00A0A8C3 /* index.cpp in Sources */, + 56C74C201C749E4700B71B9F /* edits_migration.cpp in Sources */, 6753414D1A3F540F00A0A8C3 /* types_mapping.cpp in Sources */, 6753412A1A3F540F00A0A8C3 /* geometry_coding.cpp in Sources */, 670C61191AB065B100C38A8C /* scales_test.cpp in Sources */, @@ -647,22 +713,28 @@ 675341211A3F540F00A0A8C3 /* feature_utils.cpp in Sources */, 670C61151AB065B100C38A8C /* interval_index_test.cpp in Sources */, 670C61121AB065B100C38A8C /* geometry_serialization_test.cpp in Sources */, + 56C74C341C749E8100B71B9F /* search_string_utils_test.cpp in Sources */, 675341231A3F540F00A0A8C3 /* feature_visibility.cpp in Sources */, + 56C74C301C749E8100B71B9F /* drules_selector_parser_test.cpp in Sources */, + 56C74C221C749E4700B71B9F /* search_delimiters.cpp in Sources */, 347F337B1C454242009758CC /* rank_table.cpp in Sources */, 670C610F1AB065B100C38A8C /* checker_test.cpp in Sources */, 347F33821C454242009758CC /* types_skipper.cpp in Sources */, + 56C74C331C749E8100B71B9F /* rank_table_test.cpp in Sources */, 675341161A3F540F00A0A8C3 /* feature_data.cpp in Sources */, 675341031A3F540F00A0A8C3 /* classificator.cpp in Sources */, - 670C61201AB065E100C38A8C /* testingmain.cpp in Sources */, 670C610E1AB065B100C38A8C /* cell_id_test.cpp in Sources */, 670C61131AB065B100C38A8C /* index_builder_test.cpp in Sources */, 675341401A3F540F00A0A8C3 /* scales.cpp in Sources */, 6753411E1A3F540F00A0A8C3 /* feature_loader.cpp in Sources */, + 56C74C351C749E8100B71B9F /* succinct_trie_test.cpp in Sources */, 675341051A3F540F00A0A8C3 /* coding_params.cpp in Sources */, 670C610D1AB065B100C38A8C /* cell_coverer_test.cpp in Sources */, 670C61171AB065B100C38A8C /* mwm_set_test.cpp in Sources */, 675341251A3F540F00A0A8C3 /* feature.cpp in Sources */, 675341091A3F540F00A0A8C3 /* data_header.cpp in Sources */, + 56C74C371C749E8100B71B9F /* trie_test.cpp in Sources */, + 56C74C311C749E8100B71B9F /* feature_metadata_test.cpp in Sources */, 6753412C1A3F540F00A0A8C3 /* geometry_serialization.cpp in Sources */, 670EE56C1B60033A001E8064 /* features_vector.cpp in Sources */, 6726C1D11A49DAAC005EEA39 /* feature_meta.cpp in Sources */, @@ -677,9 +749,11 @@ 670C611B1AB065B100C38A8C /* test_polylines.cpp in Sources */, 674125131B4C02F100A3E828 /* map_style_reader.cpp in Sources */, 675341141A3F540F00A0A8C3 /* feature_covering.cpp in Sources */, + 56C74C1D1C749E4700B71B9F /* categories_holder.cpp in Sources */, 675341371A3F540F00A0A8C3 /* mwm_set.cpp in Sources */, 675341181A3F540F00A0A8C3 /* feature_decl.cpp in Sources */, 6753410B1A3F540F00A0A8C3 /* drawing_rule_def.cpp in Sources */, + 56C74C2F1C749E8100B71B9F /* categories_test.cpp in Sources */, 670C61141AB065B100C38A8C /* index_test.cpp in Sources */, 670C615B1AB0691900C38A8C /* features_offsets_table.cpp in Sources */, 675341281A3F540F00A0A8C3 /* ftypes_matcher.cpp in Sources */, diff --git a/xcode/platform/platform.xcodeproj/project.pbxproj b/xcode/platform/platform.xcodeproj/project.pbxproj index 1ed3d5f215..5264fe04ce 100644 --- a/xcode/platform/platform.xcodeproj/project.pbxproj +++ b/xcode/platform/platform.xcodeproj/project.pbxproj @@ -7,10 +7,10 @@ objects = { /* Begin PBXBuildFile section */ - 3492CC221C6DF0CC0057D8E8 /* mwm_traits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3492CC1E1C6DF0CC0057D8E8 /* mwm_traits.cpp */; }; - 3492CC231C6DF0CC0057D8E8 /* mwm_traits.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3492CC1F1C6DF0CC0057D8E8 /* mwm_traits.hpp */; }; - 3492CC241C6DF0CC0057D8E8 /* file_logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3492CC201C6DF0CC0057D8E8 /* file_logging.cpp */; }; - 3492CC251C6DF0CC0057D8E8 /* file_logging.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3492CC211C6DF0CC0057D8E8 /* file_logging.hpp */; }; + 56EB1EDC1C6B6E6C0022D831 /* file_logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56EB1ED81C6B6E6C0022D831 /* file_logging.cpp */; }; + 56EB1EDD1C6B6E6C0022D831 /* file_logging.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56EB1ED91C6B6E6C0022D831 /* file_logging.hpp */; }; + 56EB1EDE1C6B6E6C0022D831 /* mwm_traits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56EB1EDA1C6B6E6C0022D831 /* mwm_traits.cpp */; }; + 56EB1EDF1C6B6E6C0022D831 /* mwm_traits.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56EB1EDB1C6B6E6C0022D831 /* mwm_traits.hpp */; }; 670E8C761BB318AB00094197 /* platform_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 670E8C741BB318AB00094197 /* platform_ios.mm */; }; 670E8C911BB31A2F00094197 /* ios_video_timer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 670E8C901BB31A2F00094197 /* ios_video_timer.mm */; }; 671C62061AE9014C00076BD0 /* measurement_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 671C62041AE9014C00076BD0 /* measurement_utils.cpp */; }; @@ -102,10 +102,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 3492CC1E1C6DF0CC0057D8E8 /* mwm_traits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mwm_traits.cpp; sourceTree = ""; }; - 3492CC1F1C6DF0CC0057D8E8 /* mwm_traits.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mwm_traits.hpp; sourceTree = ""; }; - 3492CC201C6DF0CC0057D8E8 /* file_logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_logging.cpp; sourceTree = ""; }; - 3492CC211C6DF0CC0057D8E8 /* file_logging.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = file_logging.hpp; sourceTree = ""; }; + 56EB1ED81C6B6E6C0022D831 /* file_logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_logging.cpp; sourceTree = ""; }; + 56EB1ED91C6B6E6C0022D831 /* file_logging.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = file_logging.hpp; sourceTree = ""; }; + 56EB1EDA1C6B6E6C0022D831 /* mwm_traits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mwm_traits.cpp; sourceTree = ""; }; + 56EB1EDB1C6B6E6C0022D831 /* mwm_traits.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mwm_traits.hpp; sourceTree = ""; }; 670D05A71B0E03BF0013A7AC /* defaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = defaults.xcconfig; path = ../defaults.xcconfig; sourceTree = ""; }; 670E8C741BB318AB00094197 /* platform_ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = platform_ios.mm; sourceTree = ""; }; 670E8C901BB31A2F00094197 /* ios_video_timer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ios_video_timer.mm; sourceTree = ""; }; @@ -303,10 +303,10 @@ 6753437A1A3F5CF500A0A8C3 /* platform */ = { isa = PBXGroup; children = ( - 3492CC1E1C6DF0CC0057D8E8 /* mwm_traits.cpp */, - 3492CC1F1C6DF0CC0057D8E8 /* mwm_traits.hpp */, - 3492CC201C6DF0CC0057D8E8 /* file_logging.cpp */, - 3492CC211C6DF0CC0057D8E8 /* file_logging.hpp */, + 56EB1ED81C6B6E6C0022D831 /* file_logging.cpp */, + 56EB1ED91C6B6E6C0022D831 /* file_logging.hpp */, + 56EB1EDA1C6B6E6C0022D831 /* mwm_traits.cpp */, + 56EB1EDB1C6B6E6C0022D831 /* mwm_traits.hpp */, 670E8C901BB31A2F00094197 /* ios_video_timer.mm */, 67AB92E81B7B3E9100AB5194 /* get_text_by_id.cpp */, 67AB92E91B7B3E9100AB5194 /* get_text_by_id.hpp */, @@ -379,9 +379,9 @@ buildActionMask = 2147483647; files = ( 675343B71A3F5D5A00A0A8C3 /* http_request.hpp in Headers */, - 3492CC231C6DF0CC0057D8E8 /* mwm_traits.hpp in Headers */, 6741250B1B4C00CC00A3E828 /* country_file.hpp in Headers */, 675343B81A3F5D5A00A0A8C3 /* http_thread_apple.h in Headers */, + 56EB1EDF1C6B6E6C0022D831 /* mwm_traits.hpp in Headers */, 675343C21A3F5D5A00A0A8C3 /* location.hpp in Headers */, 67AB92EB1B7B3E9100AB5194 /* get_text_by_id.hpp in Headers */, 675343D41A3F5D5A00A0A8C3 /* settings.hpp in Headers */, @@ -398,7 +398,7 @@ 675343D81A3F5D5A00A0A8C3 /* video_timer.hpp in Headers */, 6741250F1B4C00CC00A3E828 /* local_country_file.hpp in Headers */, 675343CF1A3F5D5A00A0A8C3 /* preferred_languages.hpp in Headers */, - 3492CC251C6DF0CC0057D8E8 /* file_logging.hpp in Headers */, + 56EB1EDD1C6B6E6C0022D831 /* file_logging.hpp in Headers */, 6741250D1B4C00CC00A3E828 /* local_country_file_utils.hpp in Headers */, 675343DA1A3F5D5A00A0A8C3 /* wifi_info.hpp in Headers */, 671C62071AE9014C00076BD0 /* measurement_utils.hpp in Headers */, @@ -531,7 +531,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3492CC221C6DF0CC0057D8E8 /* mwm_traits.cpp in Sources */, 675343D11A3F5D5A00A0A8C3 /* servers_list.cpp in Sources */, 675343C91A3F5D5A00A0A8C3 /* platform_unix_impl.cpp in Sources */, 67AB92DC1B7B3D7300AB5194 /* mwm_version.cpp in Sources */, @@ -542,6 +541,7 @@ 670E8C761BB318AB00094197 /* platform_ios.mm in Sources */, 67A2526A1BB40E100063F8A8 /* platform_qt.cpp in Sources */, 675343D91A3F5D5A00A0A8C3 /* wifi_info_windows.cpp in Sources */, + 56EB1EDE1C6B6E6C0022D831 /* mwm_traits.cpp in Sources */, 67247FFD1C60BD6500EDE56A /* write_dir_changer.cpp in Sources */, 6741250C1B4C00CC00A3E828 /* local_country_file_utils.cpp in Sources */, 67AB92EA1B7B3E9100AB5194 /* get_text_by_id.cpp in Sources */, @@ -549,7 +549,7 @@ 675343B61A3F5D5A00A0A8C3 /* http_request.cpp in Sources */, 675343CC1A3F5D5A00A0A8C3 /* platform.cpp in Sources */, 675343DB1A3F5D5A00A0A8C3 /* wifi_location_service.cpp in Sources */, - 3492CC241C6DF0CC0057D8E8 /* file_logging.cpp in Sources */, + 56EB1EDC1C6B6E6C0022D831 /* file_logging.cpp in Sources */, 675343D01A3F5D5A00A0A8C3 /* pthread_video_timer.cpp in Sources */, 675343B11A3F5D5A00A0A8C3 /* apple_location_service.mm in Sources */, 675343B31A3F5D5A00A0A8C3 /* chunks_download_strategy.cpp in Sources */, diff --git a/xcode/search/search.xcodeproj/project.pbxproj b/xcode/search/search.xcodeproj/project.pbxproj index b66aeeb33e..9e58974f21 100644 --- a/xcode/search/search.xcodeproj/project.pbxproj +++ b/xcode/search/search.xcodeproj/project.pbxproj @@ -8,8 +8,6 @@ /* Begin PBXBuildFile section */ 347F33161C4540A8009758CC /* cancel_exception.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F32FB1C4540A8009758CC /* cancel_exception.hpp */; }; - 347F33171C4540A8009758CC /* categories_holder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F32FC1C4540A8009758CC /* categories_holder.cpp */; }; - 347F33181C4540A8009758CC /* categories_holder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F32FD1C4540A8009758CC /* categories_holder.hpp */; }; 347F33191C4540A8009758CC /* dummy_rank_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F32FE1C4540A8009758CC /* dummy_rank_table.cpp */; }; 347F331A1C4540A8009758CC /* dummy_rank_table.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F32FF1C4540A8009758CC /* dummy_rank_table.hpp */; }; 347F331B1C4540A8009758CC /* interval_set.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33001C4540A8009758CC /* interval_set.hpp */; }; @@ -23,13 +21,9 @@ 347F33251C4540A8009758CC /* retrieval.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F330A1C4540A8009758CC /* retrieval.hpp */; }; 347F33261C4540A8009758CC /* reverse_geocoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F330B1C4540A8009758CC /* reverse_geocoder.cpp */; }; 347F33271C4540A8009758CC /* reverse_geocoder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F330C1C4540A8009758CC /* reverse_geocoder.hpp */; }; - 347F33281C4540A8009758CC /* search_delimiters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F330D1C4540A8009758CC /* search_delimiters.cpp */; }; - 347F33291C4540A8009758CC /* search_delimiters.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F330E1C4540A8009758CC /* search_delimiters.hpp */; }; 347F332A1C4540A8009758CC /* search_index_values.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F330F1C4540A8009758CC /* search_index_values.hpp */; }; 347F332B1C4540A8009758CC /* search_query_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F33101C4540A8009758CC /* search_query_base.cpp */; }; 347F332C1C4540A8009758CC /* search_query_base.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33111C4540A8009758CC /* search_query_base.hpp */; }; - 347F332D1C4540A8009758CC /* search_string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F33121C4540A8009758CC /* search_string_utils.cpp */; }; - 347F332E1C4540A8009758CC /* search_string_utils.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33131C4540A8009758CC /* search_string_utils.hpp */; }; 347F332F1C4540A8009758CC /* search_trie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33141C4540A8009758CC /* search_trie.hpp */; }; 347F33301C4540A8009758CC /* suggest.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33151C4540A8009758CC /* suggest.hpp */; }; 347F33561C45413C009758CC /* features_filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F333E1C45413C009758CC /* features_filter.cpp */; }; @@ -56,13 +50,15 @@ 347F336B1C45413C009758CC /* search_query_v2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33531C45413C009758CC /* search_query_v2.hpp */; }; 347F336C1C45413C009758CC /* street_vicinity_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347F33541C45413C009758CC /* street_vicinity_loader.cpp */; }; 347F336D1C45413C009758CC /* street_vicinity_loader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347F33551C45413C009758CC /* street_vicinity_loader.hpp */; }; - 3492CC1B1C6DF0830057D8E8 /* locality_scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3492CC181C6DF0830057D8E8 /* locality_scorer.cpp */; }; - 3492CC1C1C6DF0830057D8E8 /* locality_scorer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3492CC191C6DF0830057D8E8 /* locality_scorer.hpp */; }; - 3492CC1D1C6DF0830057D8E8 /* stats_cache.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3492CC1A1C6DF0830057D8E8 /* stats_cache.hpp */; }; 34E44E701C4922E40057A5C4 /* intersection_result.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34E44E6E1C4922E40057A5C4 /* intersection_result.cpp */; }; 34E44E711C4922E40057A5C4 /* intersection_result.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34E44E6F1C4922E40057A5C4 /* intersection_result.hpp */; }; 34E44E741C4923100057A5C4 /* cbv_ptr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34E44E721C4923100057A5C4 /* cbv_ptr.cpp */; }; 34E44E751C4923100057A5C4 /* cbv_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34E44E731C4923100057A5C4 /* cbv_ptr.hpp */; }; + 56D5456E1C74A48C00E3719C /* mode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D5456C1C74A48C00E3719C /* mode.cpp */; }; + 56D5456F1C74A48C00E3719C /* mode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D5456D1C74A48C00E3719C /* mode.hpp */; }; + 56EB1ED51C6B6E130022D831 /* locality_scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56EB1ED21C6B6E130022D831 /* locality_scorer.cpp */; }; + 56EB1ED61C6B6E130022D831 /* locality_scorer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56EB1ED31C6B6E130022D831 /* locality_scorer.hpp */; }; + 56EB1ED71C6B6E130022D831 /* stats_cache.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56EB1ED41C6B6E130022D831 /* stats_cache.hpp */; }; 670EE5631B600255001E8064 /* search_query_factory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670EE5601B600255001E8064 /* search_query_factory.hpp */; }; 670EE5641B600255001E8064 /* search_query_params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670EE5611B600255001E8064 /* search_query_params.cpp */; }; 670EE5651B600255001E8064 /* search_query_params.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670EE5621B600255001E8064 /* search_query_params.hpp */; }; @@ -134,8 +130,6 @@ /* Begin PBXFileReference section */ 347F32FB1C4540A8009758CC /* cancel_exception.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cancel_exception.hpp; sourceTree = ""; }; - 347F32FC1C4540A8009758CC /* categories_holder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = categories_holder.cpp; sourceTree = ""; }; - 347F32FD1C4540A8009758CC /* categories_holder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = categories_holder.hpp; sourceTree = ""; }; 347F32FE1C4540A8009758CC /* dummy_rank_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dummy_rank_table.cpp; sourceTree = ""; }; 347F32FF1C4540A8009758CC /* dummy_rank_table.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = dummy_rank_table.hpp; sourceTree = ""; }; 347F33001C4540A8009758CC /* interval_set.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = interval_set.hpp; sourceTree = ""; }; @@ -149,13 +143,9 @@ 347F330A1C4540A8009758CC /* retrieval.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = retrieval.hpp; sourceTree = ""; }; 347F330B1C4540A8009758CC /* reverse_geocoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reverse_geocoder.cpp; sourceTree = ""; }; 347F330C1C4540A8009758CC /* reverse_geocoder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = reverse_geocoder.hpp; sourceTree = ""; }; - 347F330D1C4540A8009758CC /* search_delimiters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_delimiters.cpp; sourceTree = ""; }; - 347F330E1C4540A8009758CC /* search_delimiters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_delimiters.hpp; sourceTree = ""; }; 347F330F1C4540A8009758CC /* search_index_values.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_index_values.hpp; sourceTree = ""; }; 347F33101C4540A8009758CC /* search_query_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_query_base.cpp; sourceTree = ""; }; 347F33111C4540A8009758CC /* search_query_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_query_base.hpp; sourceTree = ""; }; - 347F33121C4540A8009758CC /* search_string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_string_utils.cpp; sourceTree = ""; }; - 347F33131C4540A8009758CC /* search_string_utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_string_utils.hpp; sourceTree = ""; }; 347F33141C4540A8009758CC /* search_trie.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_trie.hpp; sourceTree = ""; }; 347F33151C4540A8009758CC /* suggest.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = suggest.hpp; sourceTree = ""; }; 347F333E1C45413C009758CC /* features_filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = features_filter.cpp; sourceTree = ""; }; @@ -182,13 +172,15 @@ 347F33531C45413C009758CC /* search_query_v2.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_query_v2.hpp; sourceTree = ""; }; 347F33541C45413C009758CC /* street_vicinity_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = street_vicinity_loader.cpp; sourceTree = ""; }; 347F33551C45413C009758CC /* street_vicinity_loader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = street_vicinity_loader.hpp; sourceTree = ""; }; - 3492CC181C6DF0830057D8E8 /* locality_scorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = locality_scorer.cpp; sourceTree = ""; }; - 3492CC191C6DF0830057D8E8 /* locality_scorer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = locality_scorer.hpp; sourceTree = ""; }; - 3492CC1A1C6DF0830057D8E8 /* stats_cache.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stats_cache.hpp; sourceTree = ""; }; 34E44E6E1C4922E40057A5C4 /* intersection_result.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intersection_result.cpp; sourceTree = ""; }; 34E44E6F1C4922E40057A5C4 /* intersection_result.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = intersection_result.hpp; sourceTree = ""; }; 34E44E721C4923100057A5C4 /* cbv_ptr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cbv_ptr.cpp; sourceTree = ""; }; 34E44E731C4923100057A5C4 /* cbv_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cbv_ptr.hpp; sourceTree = ""; }; + 56D5456C1C74A48C00E3719C /* mode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mode.cpp; sourceTree = ""; }; + 56D5456D1C74A48C00E3719C /* mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mode.hpp; sourceTree = ""; }; + 56EB1ED21C6B6E130022D831 /* locality_scorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = locality_scorer.cpp; sourceTree = ""; }; + 56EB1ED31C6B6E130022D831 /* locality_scorer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = locality_scorer.hpp; sourceTree = ""; }; + 56EB1ED41C6B6E130022D831 /* stats_cache.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stats_cache.hpp; sourceTree = ""; }; 670D05A31B0DF3C30013A7AC /* defaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = defaults.xcconfig; path = ../defaults.xcconfig; sourceTree = ""; }; 670EE5601B600255001E8064 /* search_query_factory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = search_query_factory.hpp; sourceTree = ""; }; 670EE5611B600255001E8064 /* search_query_params.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = search_query_params.cpp; sourceTree = ""; }; @@ -281,9 +273,9 @@ 347F333D1C45413C009758CC /* v2 */ = { isa = PBXGroup; children = ( - 3492CC181C6DF0830057D8E8 /* locality_scorer.cpp */, - 3492CC191C6DF0830057D8E8 /* locality_scorer.hpp */, - 3492CC1A1C6DF0830057D8E8 /* stats_cache.hpp */, + 56EB1ED21C6B6E130022D831 /* locality_scorer.cpp */, + 56EB1ED31C6B6E130022D831 /* locality_scorer.hpp */, + 56EB1ED41C6B6E130022D831 /* stats_cache.hpp */, 34E44E721C4923100057A5C4 /* cbv_ptr.cpp */, 34E44E731C4923100057A5C4 /* cbv_ptr.hpp */, 34E44E6E1C4922E40057A5C4 /* intersection_result.cpp */, @@ -375,10 +367,10 @@ 675346B21A4055CF00A0A8C3 /* search */ = { isa = PBXGroup; children = ( + 56D5456C1C74A48C00E3719C /* mode.cpp */, + 56D5456D1C74A48C00E3719C /* mode.hpp */, 347F333D1C45413C009758CC /* v2 */, 347F32FB1C4540A8009758CC /* cancel_exception.hpp */, - 347F32FC1C4540A8009758CC /* categories_holder.cpp */, - 347F32FD1C4540A8009758CC /* categories_holder.hpp */, 347F32FE1C4540A8009758CC /* dummy_rank_table.cpp */, 347F32FF1C4540A8009758CC /* dummy_rank_table.hpp */, 347F33001C4540A8009758CC /* interval_set.hpp */, @@ -392,13 +384,9 @@ 347F330A1C4540A8009758CC /* retrieval.hpp */, 347F330B1C4540A8009758CC /* reverse_geocoder.cpp */, 347F330C1C4540A8009758CC /* reverse_geocoder.hpp */, - 347F330D1C4540A8009758CC /* search_delimiters.cpp */, - 347F330E1C4540A8009758CC /* search_delimiters.hpp */, 347F330F1C4540A8009758CC /* search_index_values.hpp */, 347F33101C4540A8009758CC /* search_query_base.cpp */, 347F33111C4540A8009758CC /* search_query_base.hpp */, - 347F33121C4540A8009758CC /* search_string_utils.cpp */, - 347F33131C4540A8009758CC /* search_string_utils.hpp */, 347F33141C4540A8009758CC /* search_trie.hpp */, 347F33151C4540A8009758CC /* suggest.hpp */, A1347D4F1B8758C3009050FF /* query_saver.cpp */, @@ -464,13 +452,13 @@ 347F33231C4540A8009758CC /* region.hpp in Headers */, 347F33691C45413C009758CC /* search_model.hpp in Headers */, 347F33301C4540A8009758CC /* suggest.hpp in Headers */, + 56D5456F1C74A48C00E3719C /* mode.hpp in Headers */, 347F332A1C4540A8009758CC /* search_index_values.hpp in Headers */, 347F33161C4540A8009758CC /* cancel_exception.hpp in Headers */, 347F33631C45413C009758CC /* house_to_street_table.hpp in Headers */, 347F335B1C45413C009758CC /* features_layer_matcher.hpp in Headers */, - 347F33291C4540A8009758CC /* search_delimiters.hpp in Headers */, 675346DE1A40560D00A0A8C3 /* approximate_string_match.hpp in Headers */, - 3492CC1C1C6DF0830057D8E8 /* locality_scorer.hpp in Headers */, + 56EB1ED61C6B6E130022D831 /* locality_scorer.hpp in Headers */, 675346F31A40560D00A0A8C3 /* search_common.hpp in Headers */, 675346EE1A40560D00A0A8C3 /* locality_finder.hpp in Headers */, 675346EC1A40560D00A0A8C3 /* latlon_match.hpp in Headers */, @@ -482,9 +470,7 @@ 347F33211C4540A8009758CC /* projection_on_street.hpp in Headers */, 347F331B1C4540A8009758CC /* interval_set.hpp in Headers */, 670EE5651B600255001E8064 /* search_query_params.hpp in Headers */, - 347F332E1C4540A8009758CC /* search_string_utils.hpp in Headers */, 675346DF1A40560D00A0A8C3 /* feature_offset_match.hpp in Headers */, - 347F33181C4540A8009758CC /* categories_holder.hpp in Headers */, 675346F51A40560D00A0A8C3 /* search_engine.hpp in Headers */, 347F331A1C4540A8009758CC /* dummy_rank_table.hpp in Headers */, 347F335F1C45413C009758CC /* geocoder.hpp in Headers */, @@ -495,7 +481,7 @@ 675346DC1A40560D00A0A8C3 /* algos.hpp in Headers */, 675346E81A40560D00A0A8C3 /* keyword_lang_matcher.hpp in Headers */, 347F33271C4540A8009758CC /* reverse_geocoder.hpp in Headers */, - 3492CC1D1C6DF0830057D8E8 /* stats_cache.hpp in Headers */, + 56EB1ED71C6B6E130022D831 /* stats_cache.hpp in Headers */, 675346F21A40560D00A0A8C3 /* result.hpp in Headers */, 347F33251C4540A8009758CC /* retrieval.hpp in Headers */, ); @@ -611,11 +597,9 @@ 347F33601C45413C009758CC /* house_numbers_matcher.cpp in Sources */, 347F33191C4540A8009758CC /* dummy_rank_table.cpp in Sources */, 675346F11A40560D00A0A8C3 /* result.cpp in Sources */, - 347F332D1C4540A8009758CC /* search_string_utils.cpp in Sources */, - 3492CC1B1C6DF0830057D8E8 /* locality_scorer.cpp in Sources */, + 56EB1ED51C6B6E130022D831 /* locality_scorer.cpp in Sources */, 347F33581C45413C009758CC /* features_layer.cpp in Sources */, 347F33221C4540A8009758CC /* region.cpp in Sources */, - 347F33281C4540A8009758CC /* search_delimiters.cpp in Sources */, 347F33641C45413C009758CC /* mwm_context.cpp in Sources */, 34E44E701C4922E40057A5C4 /* intersection_result.cpp in Sources */, 347F335A1C45413C009758CC /* features_layer_matcher.cpp in Sources */, @@ -625,10 +609,10 @@ 347F33661C45413C009758CC /* rank_table_cache.cpp in Sources */, 675346F41A40560D00A0A8C3 /* search_engine.cpp in Sources */, 347F33241C4540A8009758CC /* retrieval.cpp in Sources */, - 347F33171C4540A8009758CC /* categories_holder.cpp in Sources */, A1347D551B8758E9009050FF /* query_saver_tests.cpp in Sources */, 347F335E1C45413C009758CC /* geocoder.cpp in Sources */, 675346ED1A40560D00A0A8C3 /* locality_finder.cpp in Sources */, + 56D5456E1C74A48C00E3719C /* mode.cpp in Sources */, 347F33681C45413C009758CC /* search_model.cpp in Sources */, 675346F61A40560D00A0A8C3 /* search_query.cpp in Sources */, 675346EB1A40560D00A0A8C3 /* latlon_match.cpp in Sources */, diff --git a/xcode/storage/storage.xcodeproj/project.pbxproj b/xcode/storage/storage.xcodeproj/project.pbxproj index 1b595e6533..b2d74b6838 100644 --- a/xcode/storage/storage.xcodeproj/project.pbxproj +++ b/xcode/storage/storage.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 34B093221C61F9BA0066F4C3 /* storage_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B0931D1C61F9BA0066F4C3 /* storage_helpers.cpp */; }; + 34B093231C61F9BA0066F4C3 /* storage_helpers.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34B0931E1C61F9BA0066F4C3 /* storage_helpers.hpp */; }; + 34B093261C61F9BA0066F4C3 /* app_store.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34B093211C61F9BA0066F4C3 /* app_store.hpp */; }; 67247FCF1C60BA8A00EDE56A /* fake_map_files_downloader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67247FC51C60BA8A00EDE56A /* fake_map_files_downloader.hpp */; }; 67247FD41C60BA8A00EDE56A /* task_runner.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67247FCA1C60BA8A00EDE56A /* task_runner.hpp */; }; 67247FD61C60BA8A00EDE56A /* test_map_files_downloader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67247FCC1C60BA8A00EDE56A /* test_map_files_downloader.hpp */; }; @@ -92,6 +95,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 34B0931D1C61F9BA0066F4C3 /* storage_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = storage_helpers.cpp; sourceTree = ""; }; + 34B0931E1C61F9BA0066F4C3 /* storage_helpers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = storage_helpers.hpp; sourceTree = ""; }; + 34B093211C61F9BA0066F4C3 /* app_store.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = app_store.hpp; sourceTree = ""; }; 670D05A81B0E04450013A7AC /* defaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = defaults.xcconfig; path = ../defaults.xcconfig; sourceTree = ""; }; 67247FBC1C60B89B00EDE56A /* storage_tests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = storage_tests; sourceTree = BUILT_PRODUCTS_DIR; }; 67247FC31C60BA8A00EDE56A /* country_info_getter_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = country_info_getter_test.cpp; sourceTree = ""; }; @@ -271,6 +277,9 @@ 675342E21A3F59EF00A0A8C3 /* storage */ = { isa = PBXGroup; children = ( + 34B0931D1C61F9BA0066F4C3 /* storage_helpers.cpp */, + 34B0931E1C61F9BA0066F4C3 /* storage_helpers.hpp */, + 34B093211C61F9BA0066F4C3 /* app_store.hpp */, 67AF49FE1BC579DD0048B1ED /* country_info_getter.cpp */, 67AF49FF1BC579DD0048B1ED /* country_info_getter.hpp */, 674125181B4C05FA00A3E828 /* http_map_files_downloader.cpp */, @@ -309,6 +318,7 @@ 67247FD41C60BA8A00EDE56A /* task_runner.hpp in Headers */, 6753430F1A3F5A2600A0A8C3 /* country.hpp in Headers */, 675343181A3F5A2600A0A8C3 /* simple_tree.hpp in Headers */, + 34B093261C61F9BA0066F4C3 /* app_store.hpp in Headers */, 6753430A1A3F5A2600A0A8C3 /* country_decl.hpp in Headers */, 67247FCF1C60BA8A00EDE56A /* fake_map_files_downloader.hpp in Headers */, 67AF4A011BC579DD0048B1ED /* country_info_getter.hpp in Headers */, @@ -316,6 +326,7 @@ 6753431B1A3F5A2600A0A8C3 /* storage.hpp in Headers */, 67247FD61C60BA8A00EDE56A /* test_map_files_downloader.hpp in Headers */, 675343171A3F5A2600A0A8C3 /* index.hpp in Headers */, + 34B093231C61F9BA0066F4C3 /* storage_helpers.hpp in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -445,6 +456,7 @@ files = ( 6753430E1A3F5A2600A0A8C3 /* country.cpp in Sources */, 67AF4A001BC579DD0048B1ED /* country_info_getter.cpp in Sources */, + 34B093221C61F9BA0066F4C3 /* storage_helpers.cpp in Sources */, 675343091A3F5A2600A0A8C3 /* country_decl.cpp in Sources */, 674125211B4C05FA00A3E828 /* queued_country.cpp in Sources */, 6753431A1A3F5A2600A0A8C3 /* storage.cpp in Sources */, @@ -700,6 +712,7 @@ 6724800C1C60CE3D00EDE56A /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 675342DB1A3F59EF00A0A8C3 /* Build configuration list for PBXProject "storage" */ = { isa = XCConfigurationList;