[MAPSME-4614] [ios] Added yandex taxi support.

This commit is contained in:
Ilya Grechuhin 2017-06-30 15:14:03 +03:00 committed by Sergey Yershov
parent 43bb9ec178
commit 3a5efc96f1
22 changed files with 356 additions and 290 deletions

View file

@ -24,6 +24,7 @@
#import "MWMNoMapsViewController.h"
#import "MWMPlacePageButtonsProtocol.h"
#import "MWMPlacePageCellUpdateProtocol.h"
#import "MWMPlacePageTaxiProvider.h"
#import "MWMPushNotifications.h"
#import "MWMRouter.h"
#import "MWMSearchItemType.h"

View file

@ -1,10 +0,0 @@
namespace taxi
{
struct Product;
}
@interface MWMTaxiPreviewCell : UICollectionViewCell
- (void)configWithProduct:(taxi::Product const &)product;
@end

View file

@ -1,38 +0,0 @@
#import "MWMTaxiPreviewCell.h"
#import "SwiftBridge.h"
#include "partners_api/taxi_provider.hpp"
#include "base/string_utils.hpp"
@interface MWMTaxiPreviewCell ()
@property(weak, nonatomic) IBOutlet UIImageView * icon;
@property(weak, nonatomic) IBOutlet UILabel * product;
@property(weak, nonatomic) IBOutlet UILabel * waitingTime;
@property(weak, nonatomic) IBOutlet UILabel * price;
@end
@implementation MWMTaxiPreviewCell
- (void)awakeFromNib
{
[super awakeFromNib];
[self.icon layoutIfNeeded];
}
- (void)configWithProduct:(taxi::Product const &)product;
{
self.product.text = @(product.m_name.c_str());
NSTimeInterval time;
if (!strings::to_double(product.m_time, time))
NSAssert(false, @"Incorrect time");
NSString * formatted = [NSDateComponentsFormatter etaStringFrom:time];
NSString * pattern = [L(@"taxi_wait") stringByReplacingOccurrencesOfString:@"%s" withString:@"%@"];
self.waitingTime.text = [NSString stringWithFormat:pattern, formatted];
self.price.text = @(product.m_price.c_str());
}
@end

View file

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="MWMTaxiPreviewCell" id="gTV-IL-0wX" customClass="MWMTaxiPreviewCell">
<rect key="frame" x="0.0" y="0.0" width="270" height="84"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="270" height="84"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_logo_uber" translatesAutoresizingMaskIntoConstraints="NO" id="fMe-7t-K8o">
<constraints>
<constraint firstAttribute="width" constant="24" id="RdA-cX-VRi"/>
<constraint firstAttribute="height" constant="24" id="uri-90-2qt"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="UberX" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="til-vK-WGY">
<constraints>
<constraint firstAttribute="height" constant="20" id="MxN-03-m1e"/>
</constraints>
<fontDescription key="fontDescription" name=".SFNSText" family=".SF NS Text" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Ожидание 9 мин" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TWl-RV-DGe">
<constraints>
<constraint firstAttribute="height" constant="18" id="BrQ-ay-buz"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular13"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="350-400 Р" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eYn-L4-OCN">
<constraints>
<constraint firstAttribute="height" constant="18" id="rAL-Ax-Ysl"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular13"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
</view>
<constraints>
<constraint firstItem="eYn-L4-OCN" firstAttribute="top" secondItem="TWl-RV-DGe" secondAttribute="bottom" constant="4" id="0YJ-Lg-yEw"/>
<constraint firstAttribute="trailing" secondItem="eYn-L4-OCN" secondAttribute="trailing" constant="10" id="2r2-HX-UnE"/>
<constraint firstAttribute="trailing" secondItem="til-vK-WGY" secondAttribute="trailing" constant="10" id="38l-q4-z1d"/>
<constraint firstItem="til-vK-WGY" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="8" id="7NZ-Z6-aZ6"/>
<constraint firstAttribute="trailing" secondItem="TWl-RV-DGe" secondAttribute="trailing" constant="10" id="8bt-hC-Tuj"/>
<constraint firstItem="fMe-7t-K8o" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="16" id="Mkd-eB-WZt"/>
<constraint firstItem="TWl-RV-DGe" firstAttribute="leading" secondItem="fMe-7t-K8o" secondAttribute="trailing" constant="20" id="OYA-eN-WkZ"/>
<constraint firstItem="fMe-7t-K8o" firstAttribute="centerY" secondItem="gTV-IL-0wX" secondAttribute="centerY" id="XJt-oc-jnH"/>
<constraint firstItem="eYn-L4-OCN" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="60" id="do5-VC-wsa"/>
<constraint firstItem="til-vK-WGY" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="60" id="hJO-IB-Vm7"/>
<constraint firstItem="TWl-RV-DGe" firstAttribute="top" secondItem="til-vK-WGY" secondAttribute="bottom" constant="4" id="nPU-Y1-NJP"/>
</constraints>
<size key="customSize" width="251" height="44"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="icon" destination="fMe-7t-K8o" id="Q6r-Xu-ubl"/>
<outlet property="price" destination="eYn-L4-OCN" id="fbl-b4-YcH"/>
<outlet property="product" destination="til-vK-WGY" id="niL-a9-azs"/>
<outlet property="waitingTime" destination="TWl-RV-DGe" id="a9L-QW-Ekf"/>
</connections>
<point key="canvasLocation" x="-46" y="75"/>
</collectionViewCell>
</objects>
<resources>
<image name="ic_logo_uber" width="24" height="24"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
</simulatedMetricsContainer>
</document>

View file

@ -16,7 +16,7 @@
completion:(MWMVoidBlock)completion
failure:(MWMStringBlock)failure;
- (NSURL *)taxiURL;
- (void)taxiURL:(MWMURLBlock)block;
- (BOOL)isTaxiInstalled;
@end

View file

@ -1,7 +1,6 @@
#import "MWMTaxiPreviewDataSource.h"
#import "MWMCommon.h"
#import "MWMNetworkPolicy.h"
#import "MWMTaxiPreviewCell.h"
#import "SwiftBridge.h"
#include "Framework.h"
@ -10,12 +9,6 @@
#include "partners_api/taxi_provider.hpp"
namespace
{
CGFloat const kPageControlHeight = 6;
} // namespace
@interface MWMTaxiCollectionView ()
@property(nonatomic) UIPageControl * pageControl;
@ -38,10 +31,9 @@ CGFloat const kPageControlHeight = 6;
- (void)layoutSubviews
{
[super layoutSubviews];
self.pageControl.height = kPageControlHeight;
self.pageControl.width = self.width;
self.pageControl.maxY = self.height - kPageControlHeight;
self.pageControl.midX = self.center.x;
self.pageControl.height = 8;
self.pageControl.minY = 4;
self.pageControl.midX = self.superview.superview.center.x;
}
- (UIPageControl *)pageControl
@ -49,6 +41,7 @@ CGFloat const kPageControlHeight = 6;
if (!_pageControl)
{
_pageControl = [[UIPageControl alloc] init];
_pageControl.backgroundColor = [UIColor clearColor];
[self.superview addSubview:_pageControl];
}
return _pageControl;
@ -68,6 +61,7 @@ using namespace taxi;
@property(weak, nonatomic) MWMTaxiCollectionView * collectionView;
@property(nonatomic) BOOL isNeedToConstructURLs;
@property(nonatomic) RoutePreviewTaxiCellType type;
@end
@ -83,19 +77,11 @@ using namespace taxi;
collectionView.delegate = self;
collectionView.showsVerticalScrollIndicator = NO;
collectionView.showsHorizontalScrollIndicator = NO;
[collectionView registerWithCellClass:[MWMTaxiPreviewCell class]];
[collectionView registerWithCellClass:[RoutePreviewTaxiCell class]];
}
return self;
}
- (void)dealloc
{
MWMTaxiCollectionView * cv = self.collectionView;
cv.dataSource = nil;
cv.delegate = nil;
self.collectionView = nil;
}
- (void)requestTaxiFrom:(MWMRoutePoint *)from
to:(MWMRoutePoint *)to
completion:(MWMVoidBlock)completion
@ -109,90 +95,116 @@ using namespace taxi;
cv.hidden = YES;
cv.pageControl.hidden = YES;
// TODO Dummy, must be changed by IOS developer.
// network_policy::CallPartnersApi(
// [self, completion, failure](platform::NetworkPolicy const & canUseNetwork) {
// auto const engine = GetFramework().GetTaxiEngine(canUseNetwork);
// if (!engine) {
// failure(L(@"dialog_taxi_error"));
// return;
// }
//
// auto success = [self, completion](taxi::ProvidersContainer const & providers,
// uint64_t const requestId) {
// if (self->m_requestId != requestId)
// return;
// auto const & products = providers.GetProducts();
// runAsyncOnMainQueue([self, completion, products] {
//
// self->m_products = products;
// auto cv = self.collectionView;
// cv.hidden = NO;
// cv.pageControl.hidden = NO;
// cv.numberOfPages = self->m_products.size();
// [cv reloadData];
// cv.contentOffset = {};
// cv.currentPage = 0;
// completion();
// });
//
// };
// auto error = [self, failure](taxi::ErrorsContainer const & errors, uint64_t const
// requestId) {
// if (self->m_requestId != requestId)
// return;
//
// runAsyncOnMainQueue(^{
// switch (code)
// {
// case taxi::ErrorCode::NoProducts:
// failure(L(@"taxi_not_found"));
// break;
// case taxi::ErrorCode::RemoteError:
// failure(L(@"dialog_taxi_error"));
// break;
// }
// });
// };
//
// auto const topmostCountryIds = GetFramework().GetTopmostCountries(m_from);
// m_requestId = engine->GetAvailableProducts(m_from, m_to, topmostCountryIds, success,
// error);
// },
// true /* force */);
network_policy::CallPartnersApi(
[self, completion, failure](platform::NetworkPolicy const & canUseNetwork) {
auto const engine = GetFramework().GetTaxiEngine(canUseNetwork);
if (!engine) {
failure(L(@"dialog_taxi_error"));
return;
}
auto success = [self, completion](taxi::ProvidersContainer const & providers,
uint64_t const requestId) {
if (self->m_requestId != requestId)
return;
if (providers.empty())
{
NSCAssert(false, @"Providers container is empty");
return;
}
auto const & provider = providers.front();
auto const & products = provider.GetProducts();
auto const type = provider.GetType();
runAsyncOnMainQueue([self, completion, products, type] {
self->m_products = products;
switch (type)
{
case taxi::Provider::Type::Uber:
self.type = RoutePreviewTaxiCellTypeUber;
break;
case taxi::Provider::Type::Yandex:
self.type = RoutePreviewTaxiCellTypeYandex;
break;
}
auto cv = self.collectionView;
cv.hidden = NO;
cv.pageControl.hidden = products.size() == 1;
cv.numberOfPages = products.size();
cv.contentOffset = {};
cv.currentPage = 0;
[cv reloadData];
completion();
});
};
auto error = [self, failure](taxi::ErrorsContainer const & errors, uint64_t const
requestId) {
if (self->m_requestId != requestId)
return;
if (errors.empty())
{
NSCAssert(false, @"Errors container is empty");
return;
}
auto const & errorCode = errors.front().m_code;
runAsyncOnMainQueue(^{
switch (errorCode)
{
case taxi::ErrorCode::NoProducts:
failure(L(@"taxi_not_found"));
break;
case taxi::ErrorCode::RemoteError:
failure(L(@"dialog_taxi_error"));
break;
case taxi::ErrorCode::NoProvider:
failure(L(@"taxi_no_provider"));
break;
}
});
};
m_requestId = engine->GetAvailableProducts(m_from, m_to, success, error);
});
}
- (BOOL)isTaxiInstalled
{
// TODO(Vlad): Not the best solution, need to store url's scheme of product in the uber::Product
// instead of just "uber://".
NSURL * url = [NSURL URLWithString:@"uber://"];
NSURL * url;
switch (self.type)
{
case RoutePreviewTaxiCellTypeTaxi: return NO;
case RoutePreviewTaxiCellTypeUber: url = [NSURL URLWithString:@"uber://"]; break;
case RoutePreviewTaxiCellTypeYandex: url = [NSURL URLWithString:@"yandextaxi://"]; break;
}
return [[UIApplication sharedApplication] canOpenURL:url];
}
- (NSURL *)taxiURL;
- (void)taxiURL:(MWMURLBlock)block
{
if (m_products.empty())
return nil;
return;
auto const index = [self.collectionView indexPathsForVisibleItems].firstObject.row;
auto const productId = m_products[index].m_productId;
RideRequestLinks links;
// TODO Dummy, must be changed by IOS developer.
// network_policy::CallPartnersApi(
// [self](platform::NetworkPolicy const & canUseNetwork) {
// auto const engine = GetFramework().GetTaxiEngine(canUseNetwork);
// if (!engine) {
// // TODO Dummy, should be implemented
// return;
// }
//
// links = engine->GetRideRequestLinks(productId, m_from, m_to);
// },
// true /* force */);
network_policy::CallPartnersApi(
[self, productId, block](platform::NetworkPolicy const & canUseNetwork)
{
auto const engine = GetFramework().GetTaxiEngine(canUseNetwork);
if (!engine)
return;
Provider::Type type;
switch (self.type)
{
case RoutePreviewTaxiCellTypeTaxi: return;
case RoutePreviewTaxiCellTypeUber: type = Provider::Type::Uber; break;
case RoutePreviewTaxiCellTypeYandex: type = Provider::Type::Yandex; break;
}
return [NSURL URLWithString:self.isTaxiInstalled ? @(links.m_deepLink.c_str()) :
@(links.m_universalLink.c_str())];
auto links = engine->GetRideRequestLinks(type, productId, m_from, m_to);
auto url = [NSURL URLWithString:self.isTaxiInstalled ? @(links.m_deepLink.c_str()) :
@(links.m_universalLink.c_str())];
block(url);
});
}
#pragma mark - UICollectionViewDataSource
@ -204,10 +216,15 @@ using namespace taxi;
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
Class cls = [MWMTaxiPreviewCell class];
auto cell = static_cast<MWMTaxiPreviewCell *>(
Class cls = [RoutePreviewTaxiCell class];
auto cell = static_cast<RoutePreviewTaxiCell *>(
[collectionView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
[cell configWithProduct:m_products[indexPath.row]];
auto const & product = m_products[indexPath.row];
[cell configWithType:self.type
title:@(product.m_name.c_str())
eta:@(product.m_time.c_str())
price:@(product.m_price.c_str())
currency:@(product.m_currency.c_str())];
return cell;
}

View file

@ -0,0 +1,69 @@
@objc
enum RoutePreviewTaxiCellType: Int {
case taxi
case uber
case yandex
}
@objc
final class RoutePreviewTaxiCell: UICollectionViewCell {
@IBOutlet private weak var icon: UIImageView!
@IBOutlet private weak var title: UILabel! {
didSet {
title.font = UIFont.bold14()
title.textColor = UIColor.blackPrimaryText()
}
}
@IBOutlet private weak var info: UILabel! {
didSet {
info.font = UIFont.regular14()
info.textColor = UIColor.blackSecondaryText()
}
}
func config(type: RoutePreviewTaxiCellType, title: String, eta: String, price: String, currency: String) {
let iconImage = { () -> UIImage in
switch type {
case .taxi: return #imageLiteral(resourceName: "icTaxiTaxi")
case .uber: return #imageLiteral(resourceName: "icTaxiUber")
case .yandex: return #imageLiteral(resourceName: "icTaxiYandex")
}
}
let titleString = { () -> String in
switch type {
case .taxi: fallthrough
case .uber: return title
case .yandex: return L("yandex_taxi_title")
}
}
let priceString = { () -> String in
switch type {
case .taxi: fallthrough
case .uber: return price
case .yandex:
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = currency
formatter.maximumFractionDigits = 0
if let number = UInt(price), let formattedPrice = formatter.string(from: NSNumber(value: number)) {
return formattedPrice
} else {
return "\(currency) \(price)"
}
}
}
let timeString = { () -> String in
let timeValue = DateComponentsFormatter.etaString(from: TimeInterval(eta)!)!
let format = L("taxi_wait").replacingOccurrences(of: "%s", with: "%@")
return String(format: format, arguments: [timeValue])
}
icon.image = iconImage()
self.title.text = titleString()
info.text = "~ \(priceString())\(timeString())"
}
}

View file

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="RoutePreviewTaxiCell" id="gTV-IL-0wX" customClass="RoutePreviewTaxiCell" customModule="cm_beta" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="270" height="64"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="270" height="64"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_logo_uber" translatesAutoresizingMaskIntoConstraints="NO" id="fMe-7t-K8o">
<rect key="frame" x="10" y="16" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="RdA-cX-VRi"/>
<constraint firstAttribute="height" constant="40" id="uri-90-2qt"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2yW-tR-hvX">
<rect key="frame" x="60" y="19" width="210" height="34"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="UberX" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="til-vK-WGY">
<rect key="frame" x="0.0" y="0.0" width="210" height="17"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Ожидание 9 мин" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TWl-RV-DGe">
<rect key="frame" x="0.0" y="17" width="210" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="TWl-RV-DGe" firstAttribute="top" secondItem="til-vK-WGY" secondAttribute="bottom" id="BfN-qi-3av"/>
<constraint firstAttribute="trailing" secondItem="til-vK-WGY" secondAttribute="trailing" id="Ehl-JM-Ucv"/>
<constraint firstItem="TWl-RV-DGe" firstAttribute="leading" secondItem="2yW-tR-hvX" secondAttribute="leading" id="FXa-5k-wcC"/>
<constraint firstAttribute="bottom" secondItem="TWl-RV-DGe" secondAttribute="bottom" id="GOJ-oY-jzQ"/>
<constraint firstItem="til-vK-WGY" firstAttribute="leading" secondItem="2yW-tR-hvX" secondAttribute="leading" id="WI9-sI-8MN"/>
<constraint firstAttribute="trailing" secondItem="TWl-RV-DGe" secondAttribute="trailing" id="X6R-tz-8h2"/>
<constraint firstItem="til-vK-WGY" firstAttribute="top" secondItem="2yW-tR-hvX" secondAttribute="top" id="fCY-QV-vWn"/>
</constraints>
</view>
</subviews>
</view>
<constraints>
<constraint firstItem="fMe-7t-K8o" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="16" id="5bX-nv-qAH"/>
<constraint firstAttribute="trailing" secondItem="2yW-tR-hvX" secondAttribute="trailing" id="I2S-wY-mil"/>
<constraint firstItem="fMe-7t-K8o" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="10" id="Mkd-eB-WZt"/>
<constraint firstItem="2yW-tR-hvX" firstAttribute="leading" secondItem="fMe-7t-K8o" secondAttribute="trailing" constant="10" id="jN3-D6-ys1"/>
<constraint firstItem="2yW-tR-hvX" firstAttribute="centerY" secondItem="fMe-7t-K8o" secondAttribute="centerY" id="rLh-XX-3BM"/>
</constraints>
<size key="customSize" width="251" height="44"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="icon" destination="fMe-7t-K8o" id="qnl-i9-6sf"/>
<outlet property="info" destination="TWl-RV-DGe" id="CtG-PC-6kF"/>
<outlet property="title" destination="til-vK-WGY" id="pDz-kV-Ors"/>
</connections>
<point key="canvasLocation" x="-46" y="75"/>
</collectionViewCell>
</objects>
<resources>
<image name="ic_logo_uber" width="24" height="24"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4_7.fullscreen"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,5 +1,6 @@
typedef void (^MWMVoidBlock)();
typedef void (^MWMStringBlock)(NSString *);
typedef void (^MWMURLBlock)(NSURL *);
typedef NS_ENUM(NSUInteger, MWMDayTime) { MWMDayTimeDay, MWMDayTimeNight };

View file

@ -252,6 +252,7 @@ static NSString * const kStatVehicle = @"Vehicle";
static NSString * const kStatVisible = @"Visible";
static NSString * const kStatWhatsNew = @"What's New";
static NSString * const kStatWifi = @"wifi";
static NSString * const kStatYandex = @"Yandex";
static NSString * const kStatYes = @"Yes";
static NSString * const kStatZoom = @"Zoom";
static NSString * const kStatiPad = @"iPad";

View file

@ -98,7 +98,9 @@ char const * kRenderAltitudeImagesQueueLabel = "mapsme.mwmrouter.renderAltitudeI
[[Crashlytics sharedInstance] recordError:err];
}
[[UIApplication sharedApplication] openURL:taxiDataSource.taxiURL];
[taxiDataSource taxiURL:^(NSURL * url) {
[[UIApplication sharedApplication] openURL:url];
}];
}
+ (void)stopRouting

View file

@ -167,6 +167,9 @@
3451F4ED1F026DAF00A981F2 /* PlacePageTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4EC1F026DAF00A981F2 /* PlacePageTaxiCell.swift */; };
3451F4EE1F026DAF00A981F2 /* PlacePageTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4EC1F026DAF00A981F2 /* PlacePageTaxiCell.swift */; };
3451F4EF1F026DAF00A981F2 /* PlacePageTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4EC1F026DAF00A981F2 /* PlacePageTaxiCell.swift */; };
3451F4F11F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4F01F02935300A981F2 /* RoutePreviewTaxiCell.swift */; };
3451F4F21F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4F01F02935300A981F2 /* RoutePreviewTaxiCell.swift */; };
3451F4F31F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3451F4F01F02935300A981F2 /* RoutePreviewTaxiCell.swift */; };
3454D7B81E07F045004AF2AD /* CALayer+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3454D79A1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm */; };
3454D7B91E07F045004AF2AD /* CALayer+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3454D79A1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm */; };
3454D7BA1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3454D79A1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm */; };
@ -219,6 +222,9 @@
34574A661E3B85F80061E839 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34574A651E3B85F80061E839 /* ThemeManager.swift */; };
34574A671E3B85F80061E839 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34574A651E3B85F80061E839 /* ThemeManager.swift */; };
34574A681E3B85F80061E839 /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34574A651E3B85F80061E839 /* ThemeManager.swift */; };
345D661D1F0665880069E925 /* MAPSME.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D1107310486CEB800E47090 /* MAPSME.plist */; };
345D661E1F0665890069E925 /* MAPSME.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D1107310486CEB800E47090 /* MAPSME.plist */; };
345D661F1F0665890069E925 /* MAPSME.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D1107310486CEB800E47090 /* MAPSME.plist */; };
3462258E1DDC5DBA001E8752 /* MWMSearchNoResultsAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3462258D1DDC5DBA001E8752 /* MWMSearchNoResultsAlert.mm */; };
3462258F1DDC5DBA001E8752 /* MWMSearchNoResultsAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3462258D1DDC5DBA001E8752 /* MWMSearchNoResultsAlert.mm */; };
346225911DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 346225901DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib */; };
@ -728,7 +734,7 @@
849CF5F61DE842290024A8A5 /* resources-6plus_clear in Resources */ = {isa = PBXBuildFile; fileRef = 4A23D1571B8B4DD700D4EB6F /* resources-6plus_clear */; };
849CF5F81DE842290024A8A5 /* unicode_blocks.txt in Resources */ = {isa = PBXBuildFile; fileRef = EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */; };
849CF5F91DE842290024A8A5 /* fonts_blacklist.txt in Resources */ = {isa = PBXBuildFile; fileRef = EEFE7C1212F8C9E1006AF8C3 /* fonts_blacklist.txt */; };
849CF5FA1DE842290024A8A5 /* MWMTaxiPreviewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib */; };
849CF5FA1DE842290024A8A5 /* RoutePreviewTaxiCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib */; };
849CF5FC1DE842290024A8A5 /* resources-xxhdpi_clear in Resources */ = {isa = PBXBuildFile; fileRef = 4A23D15A1B8B4DD700D4EB6F /* resources-xxhdpi_clear */; };
849CF5FE1DE842290024A8A5 /* MWMDefaultAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F64F198C1AB81A00006EAF7E /* MWMDefaultAlert.xib */; };
849CF5FF1DE842290024A8A5 /* fonts_whitelist.txt in Resources */ = {isa = PBXBuildFile; fileRef = EEFE7C1312F8C9E1006AF8C3 /* fonts_whitelist.txt */; };
@ -853,7 +859,6 @@
849CF7631DE842290024A8A5 /* MWMAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F64F19861AB81A00006EAF7E /* MWMAlert.mm */; };
849CF7651DE842290024A8A5 /* ColorPickerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED48BBB417C267F5003E7E92 /* ColorPickerView.mm */; };
849CF7671DE842290024A8A5 /* CircleView.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED48BBB917C2B1E2003E7E92 /* CircleView.mm */; };
849CF7691DE842290024A8A5 /* MWMTaxiPreviewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68FCB881DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm */; };
849CF76D1DE842290024A8A5 /* AddSetTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34D15BA61BD8F93C00C8BCBE /* AddSetTableViewCell.mm */; };
849CF76E1DE842290024A8A5 /* MWMEditorViralActivityItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6A218481CA3F26800BE2CC6 /* MWMEditorViralActivityItem.mm */; };
849CF7861DE842290024A8A5 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 34570A3A1B13222600E6D4FD /* libz.dylib */; settings = {ATTRIBUTES = (Required, ); }; };
@ -965,10 +970,8 @@
F68BDF071EEA9A830009BB81 /* MyTargetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F68BDF041EEA9A830009BB81 /* MyTargetSDK.framework */; };
F68FCB851DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68FCB841DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.mm */; };
F68FCB861DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68FCB841DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.mm */; };
F68FCB8A1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68FCB881DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm */; };
F68FCB8B1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68FCB881DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm */; };
F68FCB8C1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib */; };
F68FCB8D1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib */; };
F68FCB8C1DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib */; };
F68FCB8D1DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F68FCB891DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib */; };
F69018B81E9E601400B3C10B /* MWMAutoupdateController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F69018B71E9E601400B3C10B /* MWMAutoupdateController.mm */; };
F69018BC1E9F7CB600B3C10B /* MWMAutoupdateController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F69018BB1E9F7CB600B3C10B /* MWMAutoupdateController.xib */; };
F69018BD1E9F7CB600B3C10B /* MWMAutoupdateController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F69018BB1E9F7CB600B3C10B /* MWMAutoupdateController.xib */; };
@ -1677,6 +1680,7 @@
344D63161E795A2D006F17CB /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
345050211E028B8000A8DC59 /* Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
3451F4EC1F026DAF00A981F2 /* PlacePageTaxiCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlacePageTaxiCell.swift; sourceTree = "<group>"; };
3451F4F01F02935300A981F2 /* RoutePreviewTaxiCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoutePreviewTaxiCell.swift; sourceTree = "<group>"; };
3454D7991E07F045004AF2AD /* CALayer+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CALayer+RuntimeAttributes.h"; sourceTree = "<group>"; };
3454D79A1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "CALayer+RuntimeAttributes.mm"; sourceTree = "<group>"; };
3454D79B1E07F045004AF2AD /* CLLocation+Mercator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CLLocation+Mercator.h"; sourceTree = "<group>"; };
@ -1808,6 +1812,7 @@
34ABA62B1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMInputPasswordValidator.mm; sourceTree = "<group>"; };
34ABA62E1C2D58F300FE1BEC /* MWMInputEmailValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMInputEmailValidator.h; sourceTree = "<group>"; };
34ABA62F1C2D58F300FE1BEC /* MWMInputEmailValidator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMInputEmailValidator.mm; sourceTree = "<group>"; };
34AC7F901F06538B0050DE2B /* MWMPlacePageTaxiProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMPlacePageTaxiProvider.h; sourceTree = "<group>"; };
34AC8FB91EFBAD1900E7F910 /* ViatorElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViatorElement.swift; sourceTree = "<group>"; };
34AC8FC71EFC01F500E7F910 /* MWMRoutePoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRoutePoint.mm; sourceTree = "<group>"; };
34AC8FC81EFC01F500E7F910 /* MWMRoutePoint+CPP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MWMRoutePoint+CPP.h"; sourceTree = "<group>"; };
@ -2102,9 +2107,7 @@
F68BDF041EEA9A830009BB81 /* MyTargetSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MyTargetSDK.framework; sourceTree = "<group>"; };
F68FCB831DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWMTaxiPreviewDataSource.h; path = Views/RoutePreview/MWMTaxiPreviewDataSource.h; sourceTree = "<group>"; };
F68FCB841DA7BBA6007CC7D7 /* MWMTaxiPreviewDataSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MWMTaxiPreviewDataSource.mm; path = Views/RoutePreview/MWMTaxiPreviewDataSource.mm; sourceTree = "<group>"; };
F68FCB871DA7BD20007CC7D7 /* MWMTaxiPreviewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMTaxiPreviewCell.h; sourceTree = "<group>"; };
F68FCB881DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMTaxiPreviewCell.mm; sourceTree = "<group>"; };
F68FCB891DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMTaxiPreviewCell.xib; sourceTree = "<group>"; };
F68FCB891DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoutePreviewTaxiCell.xib; sourceTree = "<group>"; };
F69018B61E9E601400B3C10B /* MWMAutoupdateController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAutoupdateController.h; sourceTree = "<group>"; };
F69018B71E9E601400B3C10B /* MWMAutoupdateController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAutoupdateController.mm; sourceTree = "<group>"; };
F69018BB1E9F7CB600B3C10B /* MWMAutoupdateController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMAutoupdateController.xib; sourceTree = "<group>"; };
@ -3313,9 +3316,8 @@
F6BD337E1B62403B00F2CE18 /* MWMRoutePreview.mm */,
F6F778781DABC6D800B603E7 /* MWMTaxiCollectionLayout.h */,
F6F778791DABC6D800B603E7 /* MWMTaxiCollectionLayout.mm */,
F68FCB871DA7BD20007CC7D7 /* MWMTaxiPreviewCell.h */,
F68FCB881DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm */,
F68FCB891DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib */,
F68FCB891DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib */,
3451F4F01F02935300A981F2 /* RoutePreviewTaxiCell.swift */,
);
path = RoutePreview;
sourceTree = "<group>";
@ -4005,6 +4007,7 @@
children = (
F6E2FCC91E097B9F0083EBEC /* PlacePageTaxiCell.xib */,
3451F4EC1F026DAF00A981F2 /* PlacePageTaxiCell.swift */,
34AC7F901F06538B0050DE2B /* MWMPlacePageTaxiProvider.h */,
);
path = TaxiCell;
sourceTree = "<group>";
@ -4576,6 +4579,7 @@
349A13841DEC138C00C7DB60 /* MWMMobileInternetAlert.xib in Resources */,
34D3B04A1E389D05004100F9 /* MWMNoteCell.xib in Resources */,
F6E2FDEE1E097BA00083EBEC /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */,
345D661D1F0665880069E925 /* MAPSME.plist in Resources */,
F6E2FDF41E097BA00083EBEC /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */,
F6E2FDFA1E097BA00083EBEC /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */,
F6E2FE751E097BA00083EBEC /* MWMOpeningHoursCell.xib in Resources */,
@ -4617,7 +4621,7 @@
3490D2E21CE9DD2500D0B838 /* MWMSideButtonsView.xib in Resources */,
346DB82A1E5C4F6700E3123E /* GalleryCell.xib in Resources */,
F6E2FE2D1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.xib in Resources */,
F68FCB8C1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib in Resources */,
F68FCB8C1DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib in Resources */,
349B92701DF0526D007779DD /* MWMToast.xib in Resources */,
3463BA681DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */,
F623DA6B1C9C2731006A3436 /* opening_hours_how_to_edit.html in Resources */,
@ -4747,6 +4751,7 @@
F6E2FDEF1E097BA00083EBEC /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */,
F6E2FDF51E097BA00083EBEC /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */,
F6E2FDFB1E097BA00083EBEC /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */,
345D661E1F0665890069E925 /* MAPSME.plist in Resources */,
342639361EA0E60A0025EB89 /* local_ads_symbols.txt in Resources */,
4554B6EC1E55F0EF0084017F /* drules_proto_vehicle_clear.bin in Resources */,
F6E2FE761E097BA00083EBEC /* MWMOpeningHoursCell.xib in Resources */,
@ -4786,7 +4791,7 @@
3490D2E31CE9DD2500D0B838 /* MWMSideButtonsView.xib in Resources */,
346DB82B1E5C4F6700E3123E /* GalleryCell.xib in Resources */,
F6E2FE2E1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.xib in Resources */,
F68FCB8D1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.xib in Resources */,
F68FCB8D1DA7BD20007CC7D7 /* RoutePreviewTaxiCell.xib in Resources */,
349B92711DF0526D007779DD /* MWMToast.xib in Resources */,
3463BA691DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */,
F623DA6C1C9C2731006A3436 /* opening_hours_how_to_edit.html in Resources */,
@ -4918,6 +4923,7 @@
F6E2FDF01E097BA00083EBEC /* MWMOpeningHoursAddClosedTableViewCell.xib in Resources */,
F6E2FDF61E097BA00083EBEC /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */,
F6E2FDFC1E097BA00083EBEC /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */,
345D661F1F0665890069E925 /* MAPSME.plist in Resources */,
342639381EA0E60B0025EB89 /* local_ads_symbols.txt in Resources */,
F6E2FE771E097BA00083EBEC /* MWMOpeningHoursCell.xib in Resources */,
4554B6ED1E55F0F00084017F /* drules_proto_vehicle_clear.bin in Resources */,
@ -4959,7 +4965,7 @@
849CF6471DE842290024A8A5 /* MWMSideButtonsView.xib in Resources */,
346DB82C1E5C4F6700E3123E /* GalleryCell.xib in Resources */,
F6E2FE2F1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.xib in Resources */,
849CF5FA1DE842290024A8A5 /* MWMTaxiPreviewCell.xib in Resources */,
849CF5FA1DE842290024A8A5 /* RoutePreviewTaxiCell.xib in Resources */,
349B92721DF0526D007779DD /* MWMToast.xib in Resources */,
8408BCE21E080DEF00789784 /* MWMTrafficButtonViewController.xib in Resources */,
849CF6611DE842290024A8A5 /* opening_hours_how_to_edit.html in Resources */,
@ -5375,6 +5381,7 @@
346B42AB1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm in Sources */,
F6E2FF021E097BA00083EBEC /* MWMSearchHistoryClearCell.mm in Sources */,
F63774EA1B59376F00BCF54D /* MWMRoutingDisclaimerAlert.mm in Sources */,
3451F4F11F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */,
340475081E08199E00C92850 /* MWMMyTarget.mm in Sources */,
3404164F1E7C085F00E2B6D6 /* PhotoViewController.swift in Sources */,
F64F19A31AB81A00006EAF7E /* MWMDownloadTransitMapAlert.mm in Sources */,
@ -5400,7 +5407,6 @@
ED48BBBA17C2B1E2003E7E92 /* CircleView.mm in Sources */,
F6E2FEEA1E097BA00083EBEC /* MWMSearchTextField.mm in Sources */,
F6664C121E645A4100E703C2 /* MWMPPReviewCell.mm in Sources */,
F68FCB8A1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm in Sources */,
3451F4ED1F026DAF00A981F2 /* PlacePageTaxiCell.swift in Sources */,
34EE25A91EFA726400F870AB /* ViatorItemModel.swift in Sources */,
3454D7D91E07F045004AF2AD /* UILabel+RuntimeAttributes.mm in Sources */,
@ -5673,6 +5679,7 @@
346B42AC1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm in Sources */,
6741AA221BF340DE002C974C /* MWMNavigationView.mm in Sources */,
F6E2FF031E097BA00083EBEC /* MWMSearchHistoryClearCell.mm in Sources */,
3451F4F21F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */,
340475091E08199E00C92850 /* MWMMyTarget.mm in Sources */,
340416501E7C086000E2B6D6 /* PhotoViewController.swift in Sources */,
674A7E301C0DB10B003D48E1 /* MWMMapWidgets.mm in Sources */,
@ -5698,7 +5705,6 @@
6741AA291BF340DE002C974C /* ColorPickerView.mm in Sources */,
6741AA2B1BF340DE002C974C /* CircleView.mm in Sources */,
F6E2FEEB1E097BA00083EBEC /* MWMSearchTextField.mm in Sources */,
F68FCB8B1DA7BD20007CC7D7 /* MWMTaxiPreviewCell.mm in Sources */,
3451F4EE1F026DAF00A981F2 /* PlacePageTaxiCell.swift in Sources */,
34EE25AA1EFA726400F870AB /* ViatorItemModel.swift in Sources */,
F6E2FD9E1E097BA00083EBEC /* MWMEditBookmarkController.mm in Sources */,
@ -5971,6 +5977,7 @@
3404756F1E081A4600C92850 /* MWMSearch.mm in Sources */,
849CF74C1DE842290024A8A5 /* MWMLocationNotFoundAlert.mm in Sources */,
F6E2FF041E097BA00083EBEC /* MWMSearchHistoryClearCell.mm in Sources */,
3451F4F31F02935300A981F2 /* RoutePreviewTaxiCell.swift in Sources */,
340475541E081A4600C92850 /* MWMCustomFacebookEvents.mm in Sources */,
340416511E7C086000E2B6D6 /* PhotoViewController.swift in Sources */,
3404750A1E08199E00C92850 /* MWMMyTarget.mm in Sources */,
@ -6002,7 +6009,6 @@
849CF7671DE842290024A8A5 /* CircleView.mm in Sources */,
F6E2FD9F1E097BA00083EBEC /* MWMEditBookmarkController.mm in Sources */,
F6E2FE0B1E097BA00083EBEC /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */,
849CF7691DE842290024A8A5 /* MWMTaxiPreviewCell.mm in Sources */,
849CF76D1DE842290024A8A5 /* AddSetTableViewCell.mm in Sources */,
F6E2FED71E097BA00083EBEC /* MWMSearchChangeModeView.mm in Sources */,
849CF76E1DE842290024A8A5 /* MWMEditorViralActivityItem.mm in Sources */,

View file

@ -20,7 +20,7 @@ CGFloat constexpr kAdditionalHeight = 64;
CGFloat constexpr kDefaultMainButtonsHeight = 48;
CGFloat constexpr kBicyclePlanningMainButtonsHeightLandscape = 62;
CGFloat constexpr kBicyclePlanningMainButtonsHeightRegular = 94;
CGFloat constexpr kTaxiPreviewMainButtonHeight = 84.;
CGFloat constexpr kTaxiPreviewMainButtonHeight = 68.;
CGFloat constexpr kDefaultMenuButtonWidth = 60;
CGFloat constexpr kRoutingAdditionalButtonsOffsetCompact = 0;
CGFloat constexpr kRoutingAdditionalButtonsOffsetRegular = 48;
@ -35,7 +35,7 @@ CGFloat constexpr kSpeedDistanceWidthCompact = 72;
CGFloat constexpr kSpeedDistanceWidthLandscape = 128;
CGFloat constexpr kSpeedDistanceWidthRegular = 88;
CGFloat constexpr kGoButtonWidthLandscape = 128;
CGFloat constexpr kGoButtonWidthRegular = 96;
CGFloat constexpr kGoButtonWidthRegular = 80;
CGFloat constexpr kPageControlTopOffsetRegular = 0;
CGFloat constexpr kPageControlTopOffsetLandscape = -8;
CGFloat constexpr kPageControlScaleLandscape = 0.7;

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@ -95,10 +95,10 @@
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Xc-Kl-hAm">
<rect key="frame" x="154" y="12" width="54" height="24"/>
<rect key="frame" x="154" y="12" width="62" height="24"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="150" verticalHuggingPriority="150" horizontalCompressionResistancePriority="240" verticalCompressionResistancePriority="240" translatesAutoresizingMaskIntoConstraints="NO" id="ViI-p6-hUf">
<rect key="frame" x="0.0" y="0.0" width="54" height="24"/>
<rect key="frame" x="0.0" y="0.0" width="62" height="24"/>
</imageView>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
@ -141,10 +141,11 @@
</constraints>
</view>
<button hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="501" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pLD-sZ-ejH" userLabel="Go" customClass="MWMStartButton">
<rect key="frame" x="224" y="0.0" width="96" height="48"/>
<rect key="frame" x="228" y="8" width="80" height="32"/>
<accessibility key="accessibilityConfiguration" identifier="goButton"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="96" id="ZHw-Ha-INX"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="32" id="9LQ-Sj-W8f"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="ZHw-Ha-INX"/>
</constraints>
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="8" maxY="0.0"/>
<state key="normal" title="Start"/>
@ -152,11 +153,14 @@
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.26000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="bold14"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_start"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="white"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="linkBlue"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundHighlightedColorName" value="linkBlueHighlighted"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="6"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="routingStartTouchUpInside" destination="-1" eventType="touchUpInside" id="MfT-Tr-kyw"/>
@ -299,10 +303,10 @@
</connections>
</button>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iYj-za-A2N" userLabel="Taxi View">
<rect key="frame" x="0.0" y="0.0" width="224" height="48"/>
<rect key="frame" x="0.0" y="0.0" width="216" height="48"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="pUj-hX-AzZ" customClass="MWMTaxiCollectionView">
<rect key="frame" x="0.0" y="0.0" width="224" height="48"/>
<rect key="frame" x="0.0" y="0.0" width="216" height="48"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="7nN-GY-zbW" customClass="MWMTaxiCollectionLayout">
<size key="itemSize" width="50" height="50"/>
@ -336,15 +340,14 @@
<constraint firstItem="Z68-6z-5Ph" firstAttribute="centerX" secondItem="c75-ZF-hKn" secondAttribute="centerX" id="AcE-Sk-hhd"/>
<constraint firstAttribute="bottom" secondItem="Z68-6z-5Ph" secondAttribute="bottom" id="BlR-TS-xJa"/>
<constraint firstItem="nD5-wx-7Ui" firstAttribute="trailing" secondItem="4Xc-Kl-hAm" secondAttribute="trailing" priority="250" id="CRC-g9-WLM"/>
<constraint firstAttribute="trailing" secondItem="pLD-sZ-ejH" secondAttribute="trailing" id="E7k-Dh-qE5"/>
<constraint firstAttribute="trailing" secondItem="pLD-sZ-ejH" secondAttribute="trailing" constant="12" id="E7k-Dh-qE5"/>
<constraint firstAttribute="bottom" secondItem="4Xc-Kl-hAm" secondAttribute="bottom" constant="12" id="IBg-Su-7fT"/>
<constraint firstAttribute="bottom" secondItem="3oJ-Rv-JS7" secondAttribute="bottom" id="QSK-8y-lMm"/>
<constraint firstAttribute="bottom" secondItem="mab-rl-ueg" secondAttribute="bottom" id="RM8-hF-4fE"/>
<constraint firstItem="mab-rl-ueg" firstAttribute="width" secondItem="UhW-en-7qq" secondAttribute="width" id="RsJ-Zl-Sbw"/>
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="leading" secondItem="EQy-vz-gyi" secondAttribute="trailing" priority="500" constant="16" id="S6n-p8-BQM"/>
<constraint firstAttribute="bottom" secondItem="pLD-sZ-ejH" secondAttribute="bottom" id="SWA-4d-AZp"/>
<constraint firstItem="UhW-en-7qq" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="SX8-Al-kd6"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="XO3-hI-QYl"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="centerY" secondItem="c75-ZF-hKn" secondAttribute="centerY" id="WrY-b3-G79"/>
<constraint firstItem="3oJ-Rv-JS7" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" id="Y2N-5d-l3x"/>
<constraint firstItem="UhW-en-7qq" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" id="ZCC-xJ-5Vg"/>
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="top" secondItem="EQy-vz-gyi" secondAttribute="bottom" priority="250" constant="8" id="ZCb-We-WNy"/>
@ -353,10 +356,10 @@
<constraint firstItem="Z68-6z-5Ph" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="cpY-Wy-lyr"/>
<constraint firstItem="EQy-vz-gyi" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" constant="16" id="fIE-wa-hE8"/>
<constraint firstItem="EQy-vz-gyi" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" priority="250" constant="12" id="fOa-qL-A5d"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="leading" secondItem="4Xc-Kl-hAm" secondAttribute="trailing" constant="16" id="h3c-E6-aX6"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="leading" secondItem="4Xc-Kl-hAm" secondAttribute="trailing" constant="12" id="h3c-E6-aX6"/>
<constraint firstItem="nD5-wx-7Ui" firstAttribute="centerY" secondItem="EQy-vz-gyi" secondAttribute="centerY" priority="250" id="h5a-LJ-T8H"/>
<constraint firstItem="P9v-a6-EaA" firstAttribute="centerY" secondItem="7hO-Gk-BGJ" secondAttribute="centerY" priority="500" id="hEB-H2-4WJ"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="leading" secondItem="iYj-za-A2N" secondAttribute="trailing" id="i2q-jR-ekX"/>
<constraint firstItem="pLD-sZ-ejH" firstAttribute="leading" secondItem="iYj-za-A2N" secondAttribute="trailing" constant="12" id="i2q-jR-ekX"/>
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" priority="250" constant="12" id="mac-YL-Cyx"/>
<constraint firstItem="3oJ-Rv-JS7" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="plc-KQ-Bxg"/>
<constraint firstItem="iYj-za-A2N" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="sel-y0-6g8"/>

View file

@ -1,3 +1,5 @@
#import "MWMPlacePageTaxiProvider.h"
typedef UIView * _Nullable (^MWMPlacePageButtonsDismissBlock)(NSInteger);
@protocol MWMPlacePageButtonsProtocol<NSObject>
@ -7,7 +9,7 @@ typedef UIView * _Nullable (^MWMPlacePageButtonsDismissBlock)(NSInteger);
- (void)addBusiness;
- (void)book:(BOOL)isDescription;
- (void)editBookmark;
- (void)taxiTo;
- (void)orderTaxi:(MWMPlacePageTaxiProvider)provider;
- (void)showAllReviews;
- (void)showAllFacilities;
- (void)showPhotoAtIndex:(NSInteger)index

View file

@ -160,6 +160,9 @@ using BannerIsReady = void (^)();
- (RouteMarkType)routeMarkType;
- (int8_t)intermediateIndex;
// Taxi
- (std::vector<taxi::Provider::Type>)taxiProviders;
// Banner
- (id<MWMBanner>)nativeAd;

View file

@ -86,7 +86,7 @@ using namespace place_page;
m_sections.push_back(Sections::Metainfo);
[self fillMetaInfoSection];
if (!m_info.ReachableByTaxiProviders().empty())
if (![self taxiProviders].empty())
{
m_sections.push_back(Sections::Ad);
m_adRows.push_back(AdRows::Taxi);
@ -593,6 +593,12 @@ using namespace place_page;
f.GetLocalAdsManager().GetStatistics().RegisterEvent(std::move(event));
}
#pragma mark - Taxi
- (std::vector<taxi::Provider::Type>)taxiProviders
{
return m_info.ReachableByTaxiProviders();
}
#pragma mark - Getters
- (RouteMarkType)routeMarkType { return m_info.m_routeMarkType; }

View file

@ -297,13 +297,20 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
[self shouldClose];
}
- (void)taxiTo
- (void)orderTaxi:(MWMPlacePageTaxiProvider)provider
{
auto data = self.data;
if (!data)
return;
NSString * providerString = nil;
switch (provider)
{
case MWMPlacePageTaxiProviderTaxi: providerString = kStatUnknown;
case MWMPlacePageTaxiProviderUber: providerString = kStatUber;
case MWMPlacePageTaxiProviderYandex: providerString = kStatYandex;
}
[Statistics logEvent:kStatPlacePageTaxiClick
withParameters:@{kStatProvider : kStatUber, kStatTags : data.statisticsTags}];
withParameters:@{kStatProvider : providerString, kStatTags : data.statisticsTags}];
[MWMRouter setType:MWMRouterTypeTaxi];
[MWMRouter buildToPoint:[self routePointWithType:MWMRoutePointTypeFinish] bestRouter:NO];
[self close];

View file

@ -0,0 +1,5 @@
typedef NS_ENUM(NSInteger, MWMPlacePageTaxiProvider) {
MWMPlacePageTaxiProviderTaxi = 0,
MWMPlacePageTaxiProviderUber = 1,
MWMPlacePageTaxiProviderYandex = 2
};

View file

@ -1,10 +1,3 @@
@objc
enum PlacePageTaxiCellType: Int {
case taxi
case uber
case yandex
}
@objc
final class PlacePageTaxiCell: MWMTableViewCell {
@ -29,9 +22,11 @@ final class PlacePageTaxiCell: MWMTableViewCell {
}
private weak var delegate: MWMPlacePageButtonsProtocol!
private var type: MWMPlacePageTaxiProvider!
func config(type: PlacePageTaxiCellType, delegate: MWMPlacePageButtonsProtocol) {
func config(type: MWMPlacePageTaxiProvider, delegate: MWMPlacePageButtonsProtocol) {
self.delegate = delegate
self.type = type
switch type {
case .taxi:
icon.image = #imageLiteral(resourceName: "icTaxiTaxi")
@ -41,11 +36,11 @@ final class PlacePageTaxiCell: MWMTableViewCell {
title.text = L("taxi_uber")
case .yandex:
icon.image = #imageLiteral(resourceName: "icTaxiYandex")
title.text = L("taxi_yandex")
title.text = L("yandex_taxi_title")
}
}
@IBAction func orderAction() {
delegate.taxiTo()
delegate.orderTaxi(type)
}
}

View file

@ -43,7 +43,6 @@
<state key="normal" title="Order"/>
<connections>
<action selector="orderAction" destination="16z-3Y-tuS" eventType="touchUpInside" id="aaO-oV-60G"/>
<action selector="orderTaxi" destination="16z-3Y-tuS" eventType="touchUpInside" id="Yhy-5a-CZU"/>
</connections>
</button>
</subviews>

View file

@ -392,7 +392,16 @@ map<MetainfoRows, Class> const kMetaInfoCells = {
{
Class cls = [PlacePageTaxiCell class];
auto c = static_cast<PlacePageTaxiCell *>([tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
[c configWithType:PlacePageTaxiCellTypeTaxi delegate:delegate];
auto taxiProviders = [data taxiProviders];
NSAssert(!taxiProviders.empty(), @"TaxiProviders can not be empty");
auto const & provider = taxiProviders.front();
auto type = MWMPlacePageTaxiProviderTaxi;
switch (provider)
{
case taxi::Provider::Uber: type = MWMPlacePageTaxiProviderUber; break;
case taxi::Provider::Yandex: type = MWMPlacePageTaxiProviderYandex; break;
}
[c configWithType:type delegate:delegate];
return c;
}
case Sections::Buttons: