diff --git a/iphone/Maps/Classes/MWMOpeningHoursCell.mm b/iphone/Maps/Classes/MWMOpeningHoursCell.mm index 3d88c25dd2..6667caa636 100644 --- a/iphone/Maps/Classes/MWMOpeningHoursCell.mm +++ b/iphone/Maps/Classes/MWMOpeningHoursCell.mm @@ -2,6 +2,8 @@ #import "Common.h" #import "MWMOpeningHours.h" #import "MWMPlacePageCellUpdateProtocol.h" +#import "UIColor+MapsMeColor.h" +#import "UIFont+MapsMeFonts.h" #include "std/array.hpp" @@ -11,17 +13,49 @@ array kOHClasses = {{@"_MWMOHHeaderCell", @"_MWMOHSubCell"}}; void * kContext = &kContext; NSString * const kTableViewContentSizeKeyPath = @"contentSize"; +NSAttributedString * richStringFromDay(osmoh::Day const & day, BOOL isClosedNow) +{ + auto const richString = ^NSMutableAttributedString * (NSString * str, UIFont * font, UIColor * color) + { + return [[NSMutableAttributedString alloc] initWithString:str + attributes:@{NSFontAttributeName : font, + NSForegroundColorAttributeName : color}]; + }; + + auto str = richString(day.TodayTime(), [UIFont regular17], day.m_isOpen ? [UIColor blackPrimaryText] : + [UIColor red]); + if (day.m_isOpen) + { + auto lineBreak = [[NSAttributedString alloc] initWithString:@"\n"]; + + if (day.m_breaks.length) + { + [str appendAttributedString:lineBreak]; + [str appendAttributedString:richString(day.m_breaks, [UIFont regular13], [UIColor blackSecondaryText])]; + } + + if (isClosedNow) + { + [str appendAttributedString:lineBreak]; + [str appendAttributedString:richString(L(@"closed_now"), [UIFont regular13], [UIColor red])]; + } + + auto paragraphStyle = [[NSMutableParagraphStyle alloc] init]; + paragraphStyle.lineSpacing = 4; + + [str addAttributes:@{NSParagraphStyleAttributeName : paragraphStyle} range:{0, str.length}]; + } + return str; +} + } // namespace #pragma mark - _MWMOHHeaderCell @interface _MWMOHHeaderCell : MWMTableViewCell -@property(weak, nonatomic) IBOutlet UILabel * today; -@property(weak, nonatomic) IBOutlet UILabel * breaks; -@property(weak, nonatomic) IBOutlet UILabel * closedNow; +@property(weak, nonatomic) IBOutlet UILabel * text; @property(weak, nonatomic) IBOutlet UIImageView * arrowIcon; -@property(weak, nonatomic) IBOutlet UIImageView * separator; @property(copy, nonatomic) TMWMVoidBlock tapAction; @@ -120,15 +154,13 @@ NSString * const kTableViewContentSizeKeyPath = @"contentSize"; cellForRowAtIndexPath:(NSIndexPath *)indexPath { auto const & day = m_days[indexPath.row]; - BOOL const isSeparatorHidden = - self.isExtended ? indexPath.row == 0 : indexPath.row == m_days.size() - 1; + if (indexPath.row == 0) { _MWMOHHeaderCell * cell = [tableView dequeueReusableCellWithIdentifier:[_MWMOHHeaderCell className]]; - cell.today.text = day.TodayTime(); - cell.breaks.text = day.m_breaks; - cell.closedNow.text = self.isClosedNow ? L(@"closed_now") : nil; + cell.text.attributedText = richStringFromDay(day, self.isClosedNow); + if (m_days.size() > 1) { cell.tapAction = ^{ @@ -153,7 +185,6 @@ NSString * const kTableViewContentSizeKeyPath = @"contentSize"; cell.tapAction = nil; cell.arrowIcon.hidden = YES; } - cell.separator.hidden = isSeparatorHidden; return cell; } else @@ -162,7 +193,7 @@ NSString * const kTableViewContentSizeKeyPath = @"contentSize"; cell.days.text = day.m_workingDays; cell.schedule.text = day.m_workingTimes ? day.m_workingTimes : L(@"closed"); cell.breaks.text = day.m_breaks; - cell.separator.hidden = isSeparatorHidden; + cell.separator.hidden = indexPath.row == m_days.size() - 1; return cell; } } diff --git a/iphone/Maps/Classes/MWMPlacePageData.mm b/iphone/Maps/Classes/MWMPlacePageData.mm index b323d98c88..5e3a0128fb 100644 --- a/iphone/Maps/Classes/MWMPlacePageData.mm +++ b/iphone/Maps/Classes/MWMPlacePageData.mm @@ -294,7 +294,7 @@ using namespace place_page; case MetainfoRows::Website: return @(m_info.GetWebsite().c_str()); case MetainfoRows::Email: return @(m_info.GetEmail().c_str()); case MetainfoRows::Cuisine: - return @(strings::JoinStrings(m_info.GetCuisines(), Info::kSubtitleSeparator).c_str()); + return @(strings::JoinStrings(m_info.GetLocalizedCuisines(), Info::kSubtitleSeparator).c_str()); case MetainfoRows::Operator: return @(m_info.GetOperator().c_str()); case MetainfoRows::Internet: return L(@"WiFi_available"); case MetainfoRows::Coordinate: diff --git a/iphone/Maps/Classes/MWMPlacePageLayout.mm b/iphone/Maps/Classes/MWMPlacePageLayout.mm index 1f24cb3138..525c51c6a0 100644 --- a/iphone/Maps/Classes/MWMPlacePageLayout.mm +++ b/iphone/Maps/Classes/MWMPlacePageLayout.mm @@ -266,10 +266,14 @@ void animate(TMWMVoidBlock animate, TMWMVoidBlock completion = nil) return s.height > s.width; } +- (CGFloat)openContentOffset +{ + return self.isPortrait ? self.portraitOpenContentOffset : self.landscapeOpenContentOffset; +} + - (CGFloat)topContentOffset { - auto const target = - self.isPortrait ? self.portraitOpenContentOffset : self.landscapeOpenContentOffset; + auto const target = self.openContentOffset; if (target > self.placePageView.height) return self.placePageView.height; @@ -448,11 +452,6 @@ void animate(TMWMVoidBlock animate, TMWMVoidBlock completion = nil) : CGAffineTransformIdentity; } -- (CGFloat)openContentOffset -{ - return self.isPortrait ? self.portraitOpenContentOffset : self.landscapeOpenContentOffset; -} - #pragma mark - UITableViewDelegate & UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView @@ -503,7 +502,7 @@ void animate(TMWMVoidBlock animate, TMWMVoidBlock completion = nil) else { self.state = State::Top; - offset = self.openContentOffset; + offset = self.topContentOffset; } animate(^{ [self.scrollView setContentOffset:{0, offset} animated:YES]; }); }]; diff --git a/iphone/Maps/Classes/_MWMOHHeaderCell.xib b/iphone/Maps/Classes/_MWMOHHeaderCell.xib index efa188bfad..71c771f6ef 100644 --- a/iphone/Maps/Classes/_MWMOHHeaderCell.xib +++ b/iphone/Maps/Classes/_MWMOHHeaderCell.xib @@ -1,5 +1,5 @@ - - + + @@ -8,66 +8,36 @@ - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + - + - diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index 2d5e30b1bf..9cd2997405 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -72,6 +72,11 @@ string Info::GetSubtitle() const // Type. values.push_back(GetLocalizedType()); + // Flats. + string const flats = GetFlats(); + if (!flats.empty()) + values.push_back(flats); + // Cuisines. for (string const & cuisine : GetLocalizedCuisines()) values.push_back(cuisine);