[ios] Format all Obj C code via clang-format

Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
This commit is contained in:
Konstantin Pastbin
2025-08-17 16:37:15 +07:00
parent 52e9ddc038
commit aea784ddd7
109 changed files with 5113 additions and 4270 deletions

View File

@@ -2,12 +2,12 @@
#import "MWMAddPlaceNavigationBar.h"
#import "MWMMapDownloadDialog.h"
#import "MWMMapViewControlsManager+AddPlace.h"
#import "MWMMapWidgetsHelper.h"
#import "MWMNetworkPolicy+UI.h"
#import "MWMPlacePageManager.h"
#import "MWMPlacePageProtocol.h"
#import "MWMSideButtons.h"
#import "MWMTrafficButtonViewController.h"
#import "MWMMapWidgetsHelper.h"
#import "MapViewController.h"
#import "MapsAppDelegate.h"
#import "SwiftBridge.h"
@@ -22,8 +22,9 @@
#include "map/place_page_info.hpp"
namespace {
NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
namespace
{
NSString * const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
} // namespace
@interface MWMMapViewControlsManager () <BottomMenuDelegate>
@@ -45,11 +46,13 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
@implementation MWMMapViewControlsManager
+ (MWMMapViewControlsManager *)manager {
+ (MWMMapViewControlsManager *)manager
{
return [MapViewController sharedController].controlsManager;
}
- (instancetype)initWithParentController:(MapViewController *)controller {
- (instancetype)initWithParentController:(MapViewController *)controller
{
if (!controller)
return nil;
self = [super init];
@@ -67,29 +70,31 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
return self;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
- (UIStatusBarStyle)preferredStatusBarStyle
{
BOOL const isNavigationUnderStatusBar = self.navigationManager.state != MWMNavigationDashboardStateHidden &&
self.navigationManager.state != MWMNavigationDashboardStateNavigation;
BOOL const isMenuViewUnderStatusBar = self.menuState == MWMBottomMenuStateActive;
BOOL const isDirectionViewUnderStatusBar = !self.isDirectionViewHidden;
BOOL const isAddPlaceUnderStatusBar =
[self.ownerController.view hasSubviewWithViewClass:[MWMAddPlaceNavigationBar class]];
[self.ownerController.view hasSubviewWithViewClass:[MWMAddPlaceNavigationBar class]];
BOOL const isNightMode = [UIColor isNightMode];
BOOL const isSomethingUnderStatusBar = isNavigationUnderStatusBar ||
isDirectionViewUnderStatusBar || isMenuViewUnderStatusBar ||
isAddPlaceUnderStatusBar;
BOOL const isSomethingUnderStatusBar = isNavigationUnderStatusBar || isDirectionViewUnderStatusBar ||
isMenuViewUnderStatusBar || isAddPlaceUnderStatusBar;
return isSomethingUnderStatusBar || isNightMode ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault;
}
#pragma mark - Layout
- (UIView *)anchorView {
- (UIView *)anchorView
{
return self.tabBarController.view;
}
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[self.trafficButton viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.trackRecordingButton viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.tabBarController viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
@@ -97,14 +102,16 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
#pragma mark - MWMPlacePageViewManager
- (void)searchOnMap:(SearchQuery *)query {
- (void)searchOnMap:(SearchQuery *)query
{
if (![self search:query])
return;
[self.searchManager startSearchingWithIsRouting:NO];
}
- (BOOL)search:(SearchQuery *)query {
- (BOOL)search:(SearchQuery *)query
{
if (query.text.length == 0)
return NO;
@@ -114,22 +121,26 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
}
#pragma mark - BottomMenu
- (void)actionDownloadMaps:(MWMMapDownloaderMode)mode {
- (void)actionDownloadMaps:(MWMMapDownloaderMode)mode
{
[self.ownerController openMapsDownloader:mode];
}
- (void)didFinishAddingPlace {
- (void)didFinishAddingPlace
{
self.isAddingPlace = NO;
self.trafficButtonHidden = NO;
self.menuState = MWMBottomMenuStateInactive;
}
- (void)addPlace {
- (void)addPlace
{
[self addPlace:NO position:nullptr];
}
- (void)addPlace:(BOOL)isBusiness position:(m2::PointD const *)optionalPosition {
MapViewController *ownerController = self.ownerController;
- (void)addPlace:(BOOL)isBusiness position:(m2::PointD const *)optionalPosition
{
MapViewController * ownerController = self.ownerController;
self.isAddingPlace = YES;
[self.searchManager close];
@@ -139,25 +150,24 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
[ownerController dismissPlacePage];
[MWMAddPlaceNavigationBar showInSuperview:ownerController.view
isBusiness:isBusiness
position:optionalPosition
doneBlock:^{
if ([MWMFrameworkHelper canEditMapAtViewportCenter])
[ownerController performSegueWithIdentifier:kMapToCategorySelectorSegue sender:nil];
else
[ownerController.alertController presentIncorrectFeauturePositionAlert];
isBusiness:isBusiness
position:optionalPosition
doneBlock:^{
if ([MWMFrameworkHelper canEditMapAtViewportCenter])
[ownerController performSegueWithIdentifier:kMapToCategorySelectorSegue sender:nil];
else
[ownerController.alertController presentIncorrectFeauturePositionAlert];
[self didFinishAddingPlace];
}
cancelBlock:^{
[self didFinishAddingPlace];
}];
[self didFinishAddingPlace];
}
cancelBlock:^{ [self didFinishAddingPlace]; }];
[ownerController setNeedsStatusBarAppearanceUpdate];
}
#pragma mark - MWMNavigationDashboardManager
- (void)setDisableStandbyOnRouteFollowing:(BOOL)disableStandbyOnRouteFollowing {
- (void)setDisableStandbyOnRouteFollowing:(BOOL)disableStandbyOnRouteFollowing
{
if (_disableStandbyOnRouteFollowing == disableStandbyOnRouteFollowing)
return;
_disableStandbyOnRouteFollowing = disableStandbyOnRouteFollowing;
@@ -169,7 +179,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
#pragma mark - Routing
- (void)onRoutePrepare {
- (void)onRoutePrepare
{
auto nm = self.navigationManager;
[nm onRoutePrepare];
[nm onRoutePointsUpdated];
@@ -177,18 +188,21 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
self.promoButton.hidden = YES;
}
- (void)onRouteRebuild {
- (void)onRouteRebuild
{
[self.ownerController.bookmarksCoordinator close];
[self.navigationManager onRoutePlanning];
self.promoButton.hidden = YES;
}
- (void)onRouteReady:(BOOL)hasWarnings {
- (void)onRouteReady:(BOOL)hasWarnings
{
[self.navigationManager onRouteReady:hasWarnings];
self.promoButton.hidden = YES;
}
- (void)onRouteStart {
- (void)onRouteStart
{
self.hidden = NO;
self.sideButtons.zoomHidden = self.zoomHidden;
self.sideButtonsHidden = NO;
@@ -198,7 +212,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
self.promoButton.hidden = YES;
}
- (void)onRouteStop {
- (void)onRouteStop
{
self.sideButtons.zoomHidden = self.zoomHidden;
[self.navigationManager onRouteStop];
self.disableStandbyOnRouteFollowing = NO;
@@ -208,20 +223,24 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
#pragma mark - Properties
- (MWMSideButtons *)sideButtons {
- (MWMSideButtons *)sideButtons
{
if (!_sideButtons)
_sideButtons = [[MWMSideButtons alloc] initWithParentView:self.ownerController.controlsView];
return _sideButtons;
}
- (MWMTrafficButtonViewController *)trafficButton {
- (MWMTrafficButtonViewController *)trafficButton
{
if (!_trafficButton)
_trafficButton = [[MWMTrafficButtonViewController alloc] init];
return _trafficButton;
}
- (BottomTabBarViewController *)tabBarController {
if (!_tabBarController) {
- (BottomTabBarViewController *)tabBarController
{
if (!_tabBarController)
{
MapViewController * ownerController = _ownerController;
_tabBarController = [BottomTabBarBuilder buildWithMapViewController:ownerController controlsManager:self];
[ownerController addChildViewController:_tabBarController];
@@ -232,13 +251,15 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
return _tabBarController;
}
- (id<MWMPlacePageProtocol>)placePageManager {
- (id<MWMPlacePageProtocol>)placePageManager
{
if (!_placePageManager)
_placePageManager = [[MWMPlacePageManager alloc] init];
return _placePageManager;
}
- (MWMNavigationDashboardManager *)navigationManager {
- (MWMNavigationDashboardManager *)navigationManager
{
if (!_navigationManager)
_navigationManager = [[MWMNavigationDashboardManager alloc] initWithParentView:self.ownerController.controlsView];
return _navigationManager;
@@ -246,7 +267,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
@synthesize menuState = _menuState;
- (void)setHidden:(BOOL)hidden {
- (void)setHidden:(BOOL)hidden
{
if (_hidden == hidden)
return;
// Do not hide the controls view during the place adding process.
@@ -257,77 +279,84 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
self.menuState = hidden ? MWMBottomMenuStateHidden : MWMBottomMenuStateInactive;
}
- (void)setZoomHidden:(BOOL)zoomHidden {
- (void)setZoomHidden:(BOOL)zoomHidden
{
_zoomHidden = zoomHidden;
self.sideButtons.zoomHidden = zoomHidden;
}
- (void)setSideButtonsHidden:(BOOL)sideButtonsHidden {
- (void)setSideButtonsHidden:(BOOL)sideButtonsHidden
{
_sideButtonsHidden = sideButtonsHidden;
self.sideButtons.hidden = self.hidden || sideButtonsHidden;
}
- (void)setTrafficButtonHidden:(BOOL)trafficButtonHidden {
- (void)setTrafficButtonHidden:(BOOL)trafficButtonHidden
{
BOOL const isNavigation = self.navigationManager.state == MWMNavigationDashboardStateNavigation;
_trafficButtonHidden = isNavigation || trafficButtonHidden;
self.trafficButton.hidden = self.hidden || _trafficButtonHidden;
}
- (void)setTrackRecordingButtonState:(TrackRecordingButtonState)state {
if (!_trackRecordingButton) {
- (void)setTrackRecordingButtonState:(TrackRecordingButtonState)state
{
if (!_trackRecordingButton)
_trackRecordingButton = [[TrackRecordingButtonViewController alloc] init];
}
[self.trackRecordingButton setState:state completion:^{
[MWMMapWidgetsHelper updateLayoutForAvailableArea];
}];
[self.trackRecordingButton setState:state completion:^{ [MWMMapWidgetsHelper updateLayoutForAvailableArea]; }];
if (state == TrackRecordingButtonStateClosed)
_trackRecordingButton = nil;
}
- (void)setMenuState:(MWMBottomMenuState)menuState {
- (void)setMenuState:(MWMBottomMenuState)menuState
{
_menuState = menuState;
MapViewController * ownerController = _ownerController;
switch (_menuState) {
case MWMBottomMenuStateActive:
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
switch (_menuState)
{
case MWMBottomMenuStateActive:
_tabBarController.isHidden = NO;
if (_menuController == nil)
{
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
controlsManager:self
delegate:self];
[ownerController presentViewController:_menuController animated:YES completion:nil];
}
break;
case MWMBottomMenuStateLayers:
_tabBarController.isHidden = NO;
if (_menuController == nil)
{
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
controlsManager:self
delegate:self];
[ownerController presentViewController:_menuController animated:YES completion:nil];
}
break;
case MWMBottomMenuStateLayers:
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
controlsManager:self
delegate:self];
[ownerController presentViewController:_menuController animated:YES completion:nil];
}
break;
case MWMBottomMenuStateInactive:
_tabBarController.isHidden = NO;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
case MWMBottomMenuStateHidden:
_tabBarController.isHidden = YES;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
default:
break;
[ownerController presentViewController:_menuController animated:YES completion:nil];
}
break;
case MWMBottomMenuStateInactive:
_tabBarController.isHidden = NO;
if (_menuController != nil)
{
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
case MWMBottomMenuStateHidden:
_tabBarController.isHidden = YES;
if (_menuController != nil)
{
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
default: break;
}
}
#pragma mark - MWMFeatureHolder
- (id<MWMFeatureHolder>)featureHolder {
- (id<MWMFeatureHolder>)featureHolder
{
return self.placePageManager;
}

View File

@@ -37,11 +37,15 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
@implementation MWMSideButtons
- (UIView *)view {
- (UIView *)view
{
return self.sideView;
}
+ (MWMSideButtons *)buttons { return [MWMMapViewControlsManager manager].sideButtons; }
+ (MWMSideButtons *)buttons
{
return [MWMMapViewControlsManager manager].sideButtons;
}
- (instancetype)initWithParentView:(UIView *)view
{
self = [super init];
@@ -56,7 +60,10 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
return self;
}
+ (void)updateAvailableArea:(CGRect)frame { [[self buttons].sideView updateAvailableArea:frame]; }
+ (void)updateAvailableArea:(CGRect)frame
{
[[self buttons].sideView updateAvailableArea:frame];
}
- (void)zoomIn
{
@@ -82,22 +89,25 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
[locBtn.imageView stopRotation];
switch (state)
{
case MWMMyPositionModePendingPosition:
{
[locBtn setStyleNameAndApply: @"ButtonPending"];
[locBtn.imageView startRotation:1];
break;
}
case MWMMyPositionModeNotFollow:
case MWMMyPositionModeNotFollowNoPosition: [locBtn setStyleNameAndApply: @"ButtonGetPosition"]; break;
case MWMMyPositionModeFollow: [locBtn setStyleNameAndApply: @"ButtonFollow"]; break;
case MWMMyPositionModeFollowAndRotate: [locBtn setStyleNameAndApply: @"ButtonFollowAndRotate"]; break;
case MWMMyPositionModePendingPosition:
{
[locBtn setStyleNameAndApply:@"ButtonPending"];
[locBtn.imageView startRotation:1];
break;
}
case MWMMyPositionModeNotFollow:
case MWMMyPositionModeNotFollowNoPosition: [locBtn setStyleNameAndApply:@"ButtonGetPosition"]; break;
case MWMMyPositionModeFollow: [locBtn setStyleNameAndApply:@"ButtonFollow"]; break;
case MWMMyPositionModeFollowAndRotate: [locBtn setStyleNameAndApply:@"ButtonFollowAndRotate"]; break;
}
}
#pragma mark - Actions
- (IBAction)zoomTouchDown:(UIButton *)sender { self.zoomSwipeEnabled = YES; }
- (IBAction)zoomTouchDown:(UIButton *)sender
{
self.zoomSwipeEnabled = YES;
}
- (IBAction)zoomTouchUpInside:(UIButton *)sender
{
self.zoomSwipeEnabled = NO;
@@ -107,14 +117,16 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
[self zoomOut];
}
- (IBAction)zoomTouchUpOutside:(UIButton *)sender { self.zoomSwipeEnabled = NO; }
- (IBAction)zoomTouchUpOutside:(UIButton *)sender
{
self.zoomSwipeEnabled = NO;
}
- (IBAction)zoomSwipe:(UIPanGestureRecognizer *)sender
{
if (!self.zoomSwipeEnabled)
return;
UIView * const superview = self.sideView.superview;
CGFloat const translation =
-[sender translationInView:superview].y / superview.bounds.size.height;
CGFloat const translation = -[sender translationInView:superview].y / superview.bounds.size.height;
CGFloat const scaleFactor = exp(translation);
GetFramework().Scale(scaleFactor, false);
@@ -128,7 +140,10 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
#pragma mark - Properties
- (BOOL)zoomHidden { return self.sideView.zoomHidden; }
- (BOOL)zoomHidden
{
return self.sideView.zoomHidden;
}
- (void)setZoomHidden:(BOOL)zoomHidden
{
if ([MWMRouter isRoutingActive])
@@ -137,8 +152,11 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
self.sideView.zoomHidden = [MWMSettings zoomButtonsEnabled] ? zoomHidden : YES;
}
- (BOOL)hidden { return self.sideView.hidden; }
- (void)setHidden:(BOOL)hidden
- (BOOL)hidden
{
return self.sideView.hidden;
}
- (void)setHidden:(BOOL)hidden
{
if (!self.hidden && hidden)
[Toast showWithText:L(@"long_tap_toast")];

View File

@@ -1,11 +1,12 @@
#import "MWMSideButtonsView.h"
#import "MWMButton.h"
#import "MWMRouter.h"
#import "MWMMapViewControlsCommon.h"
#import "MWMRouter.h"
#include "base/math.hpp"
namespace {
namespace
{
CGFloat const kLocationButtonSpacingMax = 52;
CGFloat const kLocationButtonSpacingMin = 8;
CGFloat const kButtonsTopOffset = 6;
@@ -14,9 +15,9 @@ CGFloat const kButtonsBottomOffset = 6;
@interface MWMSideButtonsView ()
@property(weak, nonatomic) IBOutlet MWMButton *zoomIn;
@property(weak, nonatomic) IBOutlet MWMButton *zoomOut;
@property(weak, nonatomic) IBOutlet MWMButton *location;
@property(weak, nonatomic) IBOutlet MWMButton * zoomIn;
@property(weak, nonatomic) IBOutlet MWMButton * zoomOut;
@property(weak, nonatomic) IBOutlet MWMButton * location;
@property(nonatomic) CGRect availableArea;
@@ -24,19 +25,25 @@ CGFloat const kButtonsBottomOffset = 6;
@implementation MWMSideButtonsView
- (void)awakeFromNib {
- (void)awakeFromNib
{
[super awakeFromNib];
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
- (void)layoutSubviews {
- (void)layoutSubviews
{
CGFloat spacing = self.availableHeight - self.zoomOut.maxY - self.location.height;
spacing = math::Clamp(spacing, kLocationButtonSpacingMin, kLocationButtonSpacingMax);
if (!IPAD && (UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft || UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeRight) && [MWMRouter isRoutingActive]) {
if (!IPAD &&
(UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft ||
UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeRight) &&
[MWMRouter isRoutingActive])
{
spacing = spacing - 36;
}
self.location.minY = self.zoomOut.maxY + spacing;
self.bounds = {{}, {self.zoomOut.width, self.location.maxY}};
if (self.zoomHidden)
@@ -47,14 +54,18 @@ CGFloat const kButtonsBottomOffset = 6;
[super layoutSubviews];
}
- (void)layoutXPosition:(BOOL)hidden {
if (UIApplication.sharedApplication.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
- (void)layoutXPosition:(BOOL)hidden
{
if (UIApplication.sharedApplication.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft)
{
if (hidden)
self.maxX = 0;
else
self.minX = self.availableArea.origin.x + kViewControlsOffsetToBounds;
} else {
const auto availableAreaMaxX = self.availableArea.origin.x + self.availableArea.size.width;
}
else
{
auto const availableAreaMaxX = self.availableArea.origin.x + self.availableArea.size.width;
if (hidden)
self.minX = self.superview.width;
else
@@ -62,80 +73,84 @@ CGFloat const kButtonsBottomOffset = 6;
}
}
- (void)layoutYPosition {
- (void)layoutYPosition
{
CGFloat const centerShift = (self.height - self.zoomIn.midY - self.zoomOut.midY) / 2;
[UIView animateWithDuration:kDefaultAnimationDuration
animations:^{
self.midY = centerShift + self.superview.height / 2;
if ([MWMRouter isRoutingActive]) {
self.midY = self.midY - 18;
}
if (self.maxY > self.bottomBound)
self.maxY = self.bottomBound;
}];
self.midY = centerShift + self.superview.height / 2;
if ([MWMRouter isRoutingActive])
self.midY = self.midY - 18;
if (self.maxY > self.bottomBound)
self.maxY = self.bottomBound;
}];
}
- (void)fadeZoomButtonsShow:(BOOL)show {
- (void)fadeZoomButtonsShow:(BOOL)show
{
CGFloat const alpha = show ? 1.0 : 0.0;
[UIView animateWithDuration:kDefaultAnimationDuration
animations:^{
self.zoomIn.alpha = alpha;
self.zoomOut.alpha = alpha;
}];
self.zoomIn.alpha = alpha;
self.zoomOut.alpha = alpha;
}];
}
- (void)fadeLocationButtonShow:(BOOL)show {
[UIView animateWithDuration:kDefaultAnimationDuration
animations:^{
self.location.alpha = show ? 1.0 : 0.0;
}];
- (void)fadeLocationButtonShow:(BOOL)show
{
[UIView animateWithDuration:kDefaultAnimationDuration animations:^{ self.location.alpha = show ? 1.0 : 0.0; }];
}
// Show/hide zoom and location buttons depending on available vertical space.
- (void)animate {
- (void)animate
{
[self layoutYPosition];
BOOL const isZoomHidden = self.zoomIn.alpha == 0.0;
BOOL const willZoomHide = (self.location.maxY > self.availableHeight);
if (willZoomHide != isZoomHidden)
[self fadeZoomButtonsShow: !willZoomHide];
[self fadeZoomButtonsShow:!willZoomHide];
BOOL const isLocationHidden = self.location.alpha == 0.0;
BOOL const willLocationHide = (self.location.height > self.availableHeight);
if (willLocationHide != isLocationHidden)
[self fadeLocationButtonShow: !willLocationHide];
[self fadeLocationButtonShow:!willLocationHide];
}
#pragma mark - Properties
- (void)setZoomHidden:(BOOL)zoomHidden {
- (void)setZoomHidden:(BOOL)zoomHidden
{
_zoomHidden = zoomHidden;
self.zoomIn.hidden = zoomHidden;
self.zoomOut.hidden = zoomHidden;
[self setNeedsLayout];
}
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated {
if (animated) {
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated
{
if (animated)
{
if (self.hidden == hidden)
return;
// Side buttons should be visible during any our show/hide anamation.
// Visibility should be detemined by alpha, not self.hidden.
self.hidden = NO;
[UIView animateWithDuration:kDefaultAnimationDuration
animations:^{
self.alpha = hidden ? 0.0 : 1.0;
[self layoutXPosition:hidden];
}
completion:^(BOOL finished) {
self.hidden = hidden;
}];
} else {
animations:^{
self.alpha = hidden ? 0.0 : 1.0;
[self layoutXPosition:hidden];
}
completion:^(BOOL finished) { self.hidden = hidden; }];
}
else
{
self.hidden = hidden;
}
}
- (void)updateAvailableArea:(CGRect)frame {
- (void)updateAvailableArea:(CGRect)frame
{
if (CGRectEqualToRect(self.availableArea, frame))
return;
// If during our show/hide animation position is changed it is corrupted.
@@ -155,14 +170,17 @@ CGFloat const kButtonsBottomOffset = 6;
[self setNeedsLayout];
}
- (CGFloat)availableHeight {
- (CGFloat)availableHeight
{
return self.availableArea.size.height - kButtonsTopOffset - kButtonsBottomOffset;
}
- (CGFloat)topBound {
- (CGFloat)topBound
{
return self.availableArea.origin.y + kButtonsTopOffset;
}
- (CGFloat)bottomBound {
- (CGFloat)bottomBound
{
auto const area = self.availableArea;
return area.origin.y + area.size.height - kButtonsBottomOffset;
}

View File

@@ -2,22 +2,20 @@
#import "MWMZoomButtonsView.h"
#import "Statistics.h"
#include "Framework.h"
#include "platform/settings.hpp"
#include "indexer/scales.hpp"
#include "platform/settings.hpp"
static NSString * const kMWMZoomButtonsViewNibName = @"MWMZoomButtonsView";
@interface MWMZoomButtons ()
@interface MWMZoomButtons()
@property(nonatomic) IBOutlet MWMZoomButtonsView * zoomView;
@property(weak, nonatomic) IBOutlet UIButton * zoomInButton;
@property(weak, nonatomic) IBOutlet UIButton * zoomOutButton;
@property (nonatomic) IBOutlet MWMZoomButtonsView * zoomView;
@property (weak, nonatomic) IBOutlet UIButton * zoomInButton;
@property (weak, nonatomic) IBOutlet UIButton * zoomOutButton;
@property (nonatomic) BOOL zoomSwipeEnabled;
@property (nonatomic, readonly) BOOL isZoomEnabled;
@property(nonatomic) BOOL zoomSwipeEnabled;
@property(nonatomic, readonly) BOOL isZoomEnabled;
@end

View File

@@ -1,5 +1,5 @@
#import "Common.h"
#import "MWMZoomButtonsView.h"
#import "Common.h"
#import "MWMMapViewControlsCommon.h"
static CGFloat const kZoomViewOffsetToTopBound = 12.0;
@@ -7,9 +7,9 @@ static CGFloat const kZoomViewOffsetToBottomBound = 40.0;
static CGFloat const kZoomViewOffsetToFrameBound = 294.0;
static CGFloat const kZoomViewHideBoundPercent = 0.4;
@interface MWMZoomButtonsView()
@interface MWMZoomButtonsView ()
@property (nonatomic) CGRect defaultBounds;
@property(nonatomic) CGRect defaultBounds;
@end
@@ -39,7 +39,8 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
- (void)layoutYPosition
{
CGFloat const maxY = MIN(self.superview.height - kZoomViewOffsetToFrameBound, self.bottomBound - kZoomViewOffsetToBottomBound);
CGFloat const maxY =
MIN(self.superview.height - kZoomViewOffsetToFrameBound, self.bottomBound - kZoomViewOffsetToBottomBound);
self.minY = MAX(maxY - self.height, self.topBound + kZoomViewOffsetToTopBound);
}
@@ -59,7 +60,8 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
{
CGFloat const hideBound = kZoomViewHideBoundPercent * self.superview.height;
BOOL const isHidden = self.alpha == 0.0;
BOOL const willHide = (self.bottomBound < hideBound) || (self.defaultBounds.size.height > self.bottomBound - self.topBound);
BOOL const willHide =
(self.bottomBound < hideBound) || (self.defaultBounds.size.height > self.bottomBound - self.topBound);
if (willHide)
{
if (!isHidden)
@@ -84,15 +86,12 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
if (!hidden)
self.hidden = NO;
[self layoutXPosition:!hidden];
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount) animations:^
{
[self layoutXPosition:hidden];
}
completion:^(BOOL finished)
{
if (hidden)
self.hidden = YES;
}];
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount)
animations:^{ [self layoutXPosition:hidden]; }
completion:^(BOOL finished) {
if (hidden)
self.hidden = YES;
}];
}
else
{

View File

@@ -10,16 +10,19 @@
#import "SwiftBridge.h"
#import "base/assert.hpp"
namespace {
namespace
{
CGFloat const kTopOffset = 6;
NSArray<UIImage *> *imagesWithName(NSString *name) {
NSArray<UIImage *> * imagesWithName(NSString * name)
{
NSUInteger const imagesCount = 3;
NSMutableArray<UIImage *> *images = [NSMutableArray arrayWithCapacity:imagesCount];
NSString *mode = [UIColor isNightMode] ? @"dark" : @"light";
for (NSUInteger i = 1; i <= imagesCount; i += 1) {
NSString *imageName = [NSString stringWithFormat:@"%@_%@_%@", name, mode, @(i).stringValue];
[images addObject:static_cast<UIImage *_Nonnull>([UIImage imageNamed:imageName])];
NSMutableArray<UIImage *> * images = [NSMutableArray arrayWithCapacity:imagesCount];
NSString * mode = [UIColor isNightMode] ? @"dark" : @"light";
for (NSUInteger i = 1; i <= imagesCount; i += 1)
{
NSString * imageName = [NSString stringWithFormat:@"%@_%@_%@", name, mode, @(i).stringValue];
[images addObject:static_cast<UIImage * _Nonnull>([UIImage imageNamed:imageName])];
}
return [images copy];
}
@@ -27,28 +30,31 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
@interface MWMMapViewControlsManager ()
@property(nonatomic) MWMTrafficButtonViewController *trafficButton;
@property(nonatomic) MWMTrafficButtonViewController * trafficButton;
@end
@interface MWMTrafficButtonViewController () <MWMMapOverlayManagerObserver, ThemeListener>
@property(nonatomic) NSLayoutConstraint *topOffset;
@property(nonatomic) NSLayoutConstraint *leftOffset;
@property(nonatomic) NSLayoutConstraint * topOffset;
@property(nonatomic) NSLayoutConstraint * leftOffset;
@property(nonatomic) CGRect availableArea;
@end
@implementation MWMTrafficButtonViewController
+ (MWMTrafficButtonViewController *)controller {
+ (MWMTrafficButtonViewController *)controller
{
return [MWMMapViewControlsManager manager].trafficButton;
}
- (instancetype)init {
- (instancetype)init
{
self = [super init];
if (self) {
MapViewController *ovc = [MapViewController sharedController];
if (self)
{
MapViewController * ovc = [MapViewController sharedController];
[ovc addChildViewController:self];
[ovc.controlsView addSubview:self.view];
[self configLayout];
@@ -59,18 +65,21 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
return self;
}
- (void)dealloc {
- (void)dealloc
{
[StyleManager.shared removeListener:self];
}
- (void)viewWillDisappear:(BOOL)animated {
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[Toast hideAll];
}
- (void)configLayout {
UIView *sv = self.view;
UIView *ov = sv.superview;
- (void)configLayout
{
UIView * sv = self.view;
UIView * ov = sv.superview;
self.topOffset = [sv.topAnchor constraintEqualToAnchor:ov.topAnchor constant:kTopOffset];
self.topOffset.active = YES;
@@ -78,12 +87,14 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
self.leftOffset.active = YES;
}
- (void)setHidden:(BOOL)hidden {
- (void)setHidden:(BOOL)hidden
{
_hidden = hidden;
[self refreshLayout];
}
- (void)refreshLayout {
- (void)refreshLayout
{
dispatch_async(dispatch_get_main_queue(), ^{
auto const availableArea = self.availableArea;
auto const fitInAvailableArea = CGRectGetMaxY(self.view.frame) < CGRectGetMaxY(availableArea) + kTopOffset;
@@ -97,102 +108,111 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
});
}
- (void)handleTrafficState:(MWMMapOverlayTrafficState)state {
MWMButton *btn = (MWMButton *)self.view;
UIImageView *iv = btn.imageView;
switch (state) {
case MWMMapOverlayTrafficStateDisabled:
CHECK(false, ("Incorrect traffic manager state."));
break;
case MWMMapOverlayTrafficStateEnabled:
btn.imageName = @"btn_traffic_on";
break;
case MWMMapOverlayTrafficStateWaitingData:
iv.animationImages = imagesWithName(@"btn_traffic_update");
iv.animationDuration = 0.8;
[iv startAnimating];
break;
case MWMMapOverlayTrafficStateOutdated:
btn.imageName = @"btn_traffic_outdated";
break;
case MWMMapOverlayTrafficStateNoData:
btn.imageName = @"btn_traffic_on";
[Toast showWithText:L(@"traffic_data_unavailable")];
break;
case MWMMapOverlayTrafficStateNetworkError:
[MWMMapOverlayManager setTrafficEnabled:NO];
[[MWMAlertViewController activeAlertController] presentNoConnectionAlert];
break;
case MWMMapOverlayTrafficStateExpiredData:
btn.imageName = @"btn_traffic_outdated";
[Toast showWithText:L(@"traffic_update_maps_text")];
break;
case MWMMapOverlayTrafficStateExpiredApp:
btn.imageName = @"btn_traffic_outdated";
[Toast showWithText:L(@"traffic_update_app_message")];
break;
- (void)handleTrafficState:(MWMMapOverlayTrafficState)state
{
MWMButton * btn = (MWMButton *)self.view;
UIImageView * iv = btn.imageView;
switch (state)
{
case MWMMapOverlayTrafficStateDisabled: CHECK(false, ("Incorrect traffic manager state.")); break;
case MWMMapOverlayTrafficStateEnabled: btn.imageName = @"btn_traffic_on"; break;
case MWMMapOverlayTrafficStateWaitingData:
iv.animationImages = imagesWithName(@"btn_traffic_update");
iv.animationDuration = 0.8;
[iv startAnimating];
break;
case MWMMapOverlayTrafficStateOutdated: btn.imageName = @"btn_traffic_outdated"; break;
case MWMMapOverlayTrafficStateNoData:
btn.imageName = @"btn_traffic_on";
[Toast showWithText:L(@"traffic_data_unavailable")];
break;
case MWMMapOverlayTrafficStateNetworkError:
[MWMMapOverlayManager setTrafficEnabled:NO];
[[MWMAlertViewController activeAlertController] presentNoConnectionAlert];
break;
case MWMMapOverlayTrafficStateExpiredData:
btn.imageName = @"btn_traffic_outdated";
[Toast showWithText:L(@"traffic_update_maps_text")];
break;
case MWMMapOverlayTrafficStateExpiredApp:
btn.imageName = @"btn_traffic_outdated";
[Toast showWithText:L(@"traffic_update_app_message")];
break;
}
}
- (void)handleIsolinesState:(MWMMapOverlayIsolinesState)state {
switch (state) {
case MWMMapOverlayIsolinesStateDisabled:
break;
case MWMMapOverlayIsolinesStateEnabled:
if (![MWMMapOverlayManager isolinesVisible])
[Toast showWithText:L(@"isolines_toast_zooms_1_10")];
break;
case MWMMapOverlayIsolinesStateExpiredData:
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_activation_error_dialog")];
[MWMMapOverlayManager setIsoLinesEnabled:NO];
break;
case MWMMapOverlayIsolinesStateNoData:
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_location_error_dialog")];
[MWMMapOverlayManager setIsoLinesEnabled:NO];
break;
- (void)handleIsolinesState:(MWMMapOverlayIsolinesState)state
{
switch (state)
{
case MWMMapOverlayIsolinesStateDisabled: break;
case MWMMapOverlayIsolinesStateEnabled:
if (![MWMMapOverlayManager isolinesVisible])
[Toast showWithText:L(@"isolines_toast_zooms_1_10")];
break;
case MWMMapOverlayIsolinesStateExpiredData:
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_activation_error_dialog")];
[MWMMapOverlayManager setIsoLinesEnabled:NO];
break;
case MWMMapOverlayIsolinesStateNoData:
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_location_error_dialog")];
[MWMMapOverlayManager setIsoLinesEnabled:NO];
break;
}
}
- (void)applyTheme {
MWMButton *btn = static_cast<MWMButton *>(self.view);
UIImageView *iv = btn.imageView;
- (void)applyTheme
{
MWMButton * btn = static_cast<MWMButton *>(self.view);
UIImageView * iv = btn.imageView;
// Traffic state machine: https://confluence.mail.ru/pages/viewpage.action?pageId=103680959
[iv stopAnimating];
if ([MWMMapOverlayManager trafficEnabled]) {
if ([MWMMapOverlayManager trafficEnabled])
{
[self handleTrafficState:[MWMMapOverlayManager trafficState]];
} else if ([MWMMapOverlayManager transitEnabled]) {
}
else if ([MWMMapOverlayManager transitEnabled])
{
btn.imageName = @"btn_subway_on";
if ([MWMMapOverlayManager transitState] == MWMMapOverlayTransitStateNoData)
[Toast showWithText:L(@"subway_data_unavailable")];
} else if ([MWMMapOverlayManager isoLinesEnabled]) {
}
else if ([MWMMapOverlayManager isoLinesEnabled])
{
btn.imageName = @"btn_isoMap_on";
[self handleIsolinesState:[MWMMapOverlayManager isolinesState]];
} else if ([MWMMapOverlayManager outdoorEnabled]) {
}
else if ([MWMMapOverlayManager outdoorEnabled])
{
btn.imageName = @"btn_isoMap_on";
} else {
}
else
{
btn.imageName = @"btn_layers";
}
}
- (IBAction)buttonTouchUpInside {
BOOL needsToDisableMapLayer =
[MWMMapOverlayManager trafficEnabled] ||
[MWMMapOverlayManager transitEnabled] ||
[MWMMapOverlayManager isoLinesEnabled] ||
[MWMMapOverlayManager outdoorEnabled];
- (IBAction)buttonTouchUpInside
{
BOOL needsToDisableMapLayer = [MWMMapOverlayManager trafficEnabled] || [MWMMapOverlayManager transitEnabled] ||
[MWMMapOverlayManager isoLinesEnabled] || [MWMMapOverlayManager outdoorEnabled];
if (needsToDisableMapLayer) {
if (needsToDisableMapLayer)
{
[MWMMapOverlayManager setTrafficEnabled:NO];
[MWMMapOverlayManager setTransitEnabled:NO];
[MWMMapOverlayManager setIsoLinesEnabled:NO];
[MWMMapOverlayManager setOutdoorEnabled:NO];
} else {
}
else
{
MWMMapViewControlsManager.manager.menuState = MWMBottomMenuStateLayers;
}
}
+ (void)updateAvailableArea:(CGRect)frame {
+ (void)updateAvailableArea:(CGRect)frame
{
auto controller = [self controller];
if (CGRectEqualToRect(controller.availableArea, frame))
return;
@@ -202,16 +222,20 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
#pragma mark - MWMMapOverlayManagerObserver
- (void)onTrafficStateUpdated {
- (void)onTrafficStateUpdated
{
[self applyTheme];
}
- (void)onTransitStateUpdated {
- (void)onTransitStateUpdated
{
[self applyTheme];
}
- (void)onIsoLinesStateUpdated {
- (void)onIsoLinesStateUpdated
{
[self applyTheme];
}
- (void)onOutdoorStateUpdated {
- (void)onOutdoorStateUpdated
{
[self applyTheme];
}