From f150cf56b4ff6efe672e0e3de1c7ee1a243660a4 Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Mon, 20 Dec 2021 22:02:00 +0100 Subject: [PATCH] [ios] New Help/About dialog on the main screen Signed-off-by: Alexander Borsuk --- data/strings/strings.txt | 2 +- iphone/Maps/Bridging-Header.h | 1 + iphone/Maps/Categories/UIKitCategories.h | 8 +- iphone/Maps/Categories/UIKitCategories.m | 32 +- .../Classes/Components/CopyableLabel.swift | 53 ++ .../Classes/CustomAlert/MWMOsmAuthAlert.mm | 3 +- .../MWMAuthorizationLoginViewController.mm | 12 +- .../MWMAuthorizationOSMLoginViewController.mm | 2 +- .../ic_menu_question.imageset/Contents.json | 29 + .../outline_question_mark_white_29pt@1x.png | Bin 0 -> 3812 bytes .../outline_question_mark_white_29pt@2x.png | Bin 0 -> 4198 bytes .../outline_question_mark_white_29pt@3x.png | Bin 0 -> 4580 bytes iphone/Maps/Maps.xcodeproj/project.pbxproj | 38 +- iphone/Maps/OMaps.plist | 5 + .../TabBar/BottomTabBarInteractor.swift | 9 +- .../TabBar/BottomTabBarPresenter.swift | 6 +- .../TabBar/BottomTabBarViewController.swift | 6 +- .../TabBar/BottomTabBarViewController.xib | 21 +- iphone/Maps/UI/Editor/MWMEditorNotesFooter.m | 2 +- iphone/Maps/UI/Help/AboutController.swift | 286 ++++++++ iphone/Maps/UI/Help/FaqController.swift | 24 + .../PlacePageManager/MWMPlacePageManager.mm | 5 +- iphone/Maps/UI/Settings/MWMAboutController.h | 5 - iphone/Maps/UI/Settings/MWMAboutController.m | 104 --- .../UI/Settings/MWMAboutControllerHeader.xib | 82 --- iphone/Maps/UI/Settings/MWMHelpController.h | 5 - iphone/Maps/UI/Settings/MWMHelpController.m | 167 ----- .../UI/Settings/MWMSettingsViewController.mm | 11 - iphone/Maps/UI/Storyboard/Settings.storyboard | 631 ++---------------- 29 files changed, 553 insertions(+), 996 deletions(-) create mode 100644 iphone/Maps/Classes/Components/CopyableLabel.swift create mode 100644 iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@1x.png create mode 100644 iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@2x.png create mode 100644 iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@3x.png create mode 100644 iphone/Maps/UI/Help/AboutController.swift create mode 100644 iphone/Maps/UI/Help/FaqController.swift delete mode 100644 iphone/Maps/UI/Settings/MWMAboutController.h delete mode 100644 iphone/Maps/UI/Settings/MWMAboutController.m delete mode 100644 iphone/Maps/UI/Settings/MWMAboutControllerHeader.xib delete mode 100644 iphone/Maps/UI/Settings/MWMHelpController.h delete mode 100644 iphone/Maps/UI/Settings/MWMHelpController.m diff --git a/data/strings/strings.txt b/data/strings/strings.txt index 7e21145870..af643309e8 100644 --- a/data/strings/strings.txt +++ b/data/strings/strings.txt @@ -3253,7 +3253,7 @@ zh-Hant = 分享 [email] - comment = Share by email button text, also used in editor. + comment = Share by email button text, also used in editor and About. tags = android,ios en = Email ar = البريد الالكتروني diff --git a/iphone/Maps/Bridging-Header.h b/iphone/Maps/Bridging-Header.h index 13d7f4a3cd..33e7b3034d 100644 --- a/iphone/Maps/Bridging-Header.h +++ b/iphone/Maps/Bridging-Header.h @@ -30,6 +30,7 @@ #import "MWMKeyboard.h" #import "MWMLocationManager.h" #import "MWMLocationModeListener.h" +#import "MWMMailViewController.h" #import "MWMMapDownloaderButtonTableViewCell.h" #import "MWMMapDownloaderCellHeader.h" #import "MWMMapDownloaderLargeCountryTableViewCell.h" diff --git a/iphone/Maps/Categories/UIKitCategories.h b/iphone/Maps/Categories/UIKitCategories.h index 25c89b596f..76ad6db92a 100644 --- a/iphone/Maps/Categories/UIKitCategories.h +++ b/iphone/Maps/Categories/UIKitCategories.h @@ -64,7 +64,13 @@ static inline CGFloat LengthCGPoint(CGPoint point) @interface UIViewController (Safari) -- (void)openUrl:(NSURL *)url; +// Opens http(s) urls in SFSafariViewController. +// Does nothing and returns NO (false) if the url is invalid. +- (BOOL)openUrl:(NSString *)urlString; + +// Pass safari = YES (true) to open url externally, and NO (false) to open +// in SFSafariViewController (see the method above). +- (BOOL)openUrl:(NSString *)urlString inSafari:(BOOL)safari; @end diff --git a/iphone/Maps/Categories/UIKitCategories.m b/iphone/Maps/Categories/UIKitCategories.m index ec87bb6829..a8371bd459 100644 --- a/iphone/Maps/Categories/UIKitCategories.m +++ b/iphone/Maps/Categories/UIKitCategories.m @@ -169,23 +169,37 @@ @implementation UIViewController (Safari) -- (void)openUrl:(NSURL *)url +- (BOOL)openUrl:(NSString * _Nonnull)urlString { + return [self openUrl:urlString inSafari:NO]; +} + +- (BOOL)openUrl:(NSString *)urlString inSafari:(BOOL)safari +{ + NSURL * url = [[NSURL alloc] initWithString:urlString]; if (!url) { - NSAssert(false, @"URL is nil!"); - return; + NSAssert(false, @"Invalid URL %@", urlString); + return NO; } NSString * scheme = url.scheme; - if (!([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"])) + if (!([scheme isEqualToString:@"https"] || [scheme isEqualToString:@"http"])) { - NSAssert(false, @"Incorrect url's scheme!"); - return; + NSAssert(false, @"Incorrect url scheme %@", scheme); + return NO; } - SFSafariViewController * svc = [[SFSafariViewController alloc] initWithURL:url]; - svc.delegate = self; - [self.navigationController presentViewController:svc animated:YES completion:nil]; + if (safari) + { + [UIApplication.sharedApplication openURL:url options:@{} completionHandler:nil]; + } + else + { + SFSafariViewController * svc = [[SFSafariViewController alloc] initWithURL:url]; + svc.delegate = self; + [self.navigationController presentViewController:svc animated:YES completion:nil]; + } + return YES; } @end diff --git a/iphone/Maps/Classes/Components/CopyableLabel.swift b/iphone/Maps/Classes/Components/CopyableLabel.swift new file mode 100644 index 0000000000..18d311f755 --- /dev/null +++ b/iphone/Maps/Classes/Components/CopyableLabel.swift @@ -0,0 +1,53 @@ +// Label shows copy popup menu on tap or long tap. +class CopyableLabel: UILabel { + + override init(frame: CGRect) { + super.init(frame: frame) + self.sharedInit() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + self.sharedInit() + } + + private func sharedInit() { + self.isUserInteractionEnabled = true + self.gestureRecognizers = [ + UILongPressGestureRecognizer(target: self, action: #selector(self.showMenu)), + UITapGestureRecognizer(target: self, action: #selector(self.showMenu)) + ] + } + + @objc func showMenu(_ recognizer: UILongPressGestureRecognizer) { + self.becomeFirstResponder() + + let menu = UIMenuController.shared + let locationOfTouchInLabel = recognizer.location(in: self) + + if !menu.isMenuVisible { + var rect = bounds + rect.origin = locationOfTouchInLabel + rect.size = CGSize(width: 1, height: 1) + if #available(iOS 13, *) { + menu.showMenu(from: self, rect: rect) + } else { + menu.setTargetRect(rect, in: self) + menu.setMenuVisible(true, animated: false) + } + } + } + + override func copy(_ sender: Any?) { + UIPasteboard.general.string = text + UIMenuController.shared.setMenuVisible(false, animated: true) + } + + override var canBecomeFirstResponder: Bool { + return true + } + + override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { + return action == #selector(UIResponderStandardEditActions.copy) + } +} diff --git a/iphone/Maps/Classes/CustomAlert/MWMOsmAuthAlert.mm b/iphone/Maps/Classes/CustomAlert/MWMOsmAuthAlert.mm index 47d4add475..6823948b85 100644 --- a/iphone/Maps/Classes/CustomAlert/MWMOsmAuthAlert.mm +++ b/iphone/Maps/Classes/CustomAlert/MWMOsmAuthAlert.mm @@ -44,8 +44,7 @@ extern NSString * const kMap2GoogleLoginSegue; - (IBAction)signUpTap { [self close:^{ - NSURL * url = [NSURL URLWithString:@(osm::OsmOAuth::ServerAuth().GetRegistrationURL().c_str())]; - [self.alertController.ownerViewController openUrl:url]; + [self.alertController.ownerViewController openUrl:@(osm::OsmOAuth::ServerAuth().GetRegistrationURL().c_str())]; }]; } diff --git a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm index 66a5f65f17..096d6153e3 100644 --- a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm +++ b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationLoginViewController.mm @@ -95,24 +95,24 @@ using namespace osm_auth_ios; { [self performOnlineAction:^ { - [self openUrl:[NSURL URLWithString:@(OsmOAuth::ServerAuth().GetRegistrationURL().c_str())]]; + [self openUrl:@(OsmOAuth::ServerAuth().GetRegistrationURL().c_str())]; }]; } - (IBAction)osmTap { - [self openUrl:[NSURL URLWithString:@"https://wiki.openstreetmap.org/wiki/Main_Page"]]; + [self openUrl:@"https://wiki.openstreetmap.org/wiki/Main_Page"]; } - (IBAction)historyTap { - [self openUrl:[NSURL URLWithString:[NSString stringWithFormat: + [self openUrl:[NSString stringWithFormat: #ifdef DEBUG - @"https://master.apis.dev.openstreetmap.org/user/%@/history" + @"https://master.apis.dev.openstreetmap.org/user/%@/history" #else - @"https://www.openstreetmap.org/user/%@/history" + @"https://www.openstreetmap.org/user/%@/history" #endif - , OSMUserName()]]]; + , OSMUserName()]]; } - (void)logout diff --git a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationOSMLoginViewController.mm b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationOSMLoginViewController.mm index 101e7165da..fa45b1b660 100644 --- a/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationOSMLoginViewController.mm +++ b/iphone/Maps/Classes/CustomViews/Login/MWMAuthorizationOSMLoginViewController.mm @@ -173,7 +173,7 @@ using namespace osm; - (IBAction)cancel { [self.navigationController popViewControllerAnimated:YES]; } - (IBAction)forgotPassword { - [self openUrl:[NSURL URLWithString:@(OsmOAuth::ServerAuth().GetResetPasswordURL().c_str())]]; + [self openUrl:@(OsmOAuth::ServerAuth().GetResetPasswordURL().c_str())]; } #pragma mark - Properties diff --git a/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/Contents.json b/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/Contents.json new file mode 100644 index 0000000000..ebbba13e12 --- /dev/null +++ b/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/Contents.json @@ -0,0 +1,29 @@ +{ + "images" : [ + { + "filename" : "outline_question_mark_white_29pt@1x.png", + "idiom" : "universal", + "language-direction" : "left-to-right", + "scale" : "1x" + }, + { + "filename" : "outline_question_mark_white_29pt@2x.png", + "idiom" : "universal", + "language-direction" : "left-to-right", + "scale" : "2x" + }, + { + "filename" : "outline_question_mark_white_29pt@3x.png", + "idiom" : "universal", + "language-direction" : "left-to-right", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@1x.png b/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb9d09bc0296425fa618764e9a4cfaa3f4a362b GIT binary patch literal 3812 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 aFZ3TLQQRBmm7cW#0000o~e0U(=kB~m#6 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 literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@3x.png b/iphone/Maps/Images.xcassets/Bottom Menu/ic_menu_question.imageset/outline_question_mark_white_29pt@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..669b170e35e285a2eb95eeb4c1b9ee8a28cd2721 GIT binary patch literal 4580 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 ITSAppUsesNonExemptEncryption + LSApplicationQueriesSchemes + + ms-outlook + googlegmail + LSRequiresIPhoneOS LSSupportsOpeningDocumentsInPlace diff --git a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarInteractor.swift b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarInteractor.swift index 2ee7230b05..f5ad80ae16 100644 --- a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarInteractor.swift +++ b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarInteractor.swift @@ -1,7 +1,7 @@ protocol BottomTabBarInteractorProtocol: AnyObject { func openSearch() func openPoint2Point() - func openDiscovery() + func openHelp() func openBookmarks() func openMenu() } @@ -41,11 +41,8 @@ extension BottomTabBarInteractor: BottomTabBarInteractorProtocol { } } - func openDiscovery() { -// NetworkPolicy.shared().callOnlineApi { (canUseNetwork) in -// let vc = MWMDiscoveryController.instance(withConnection: canUseNetwork) -// MapViewController.shared()?.navigationController?.pushViewController(vc!, animated: true) -// } + func openHelp() { + MapViewController.shared()?.navigationController?.pushViewController(AboutController(), animated: true) } func openBookmarks() { diff --git a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarPresenter.swift b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarPresenter.swift index 8038091de7..e33cbd6d4b 100644 --- a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarPresenter.swift +++ b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarPresenter.swift @@ -2,7 +2,7 @@ protocol BottomTabBarPresenterProtocol: AnyObject { func configure() func onSearchButtonPressed() func onPoint2PointButtonPressed() - func onDiscoveryButtonPressed() + func onHelpButtonPressed() func onBookmarksButtonPressed() func onMenuButtonPressed() } @@ -30,8 +30,8 @@ extension BottomTabBarPresenter: BottomTabBarPresenterProtocol { interactor.openPoint2Point() } - func onDiscoveryButtonPressed() { - interactor.openDiscovery() + func onHelpButtonPressed() { + interactor.openHelp() } func onBookmarksButtonPressed() { diff --git a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.swift b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.swift index e7d6f77541..dd85d76e01 100644 --- a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.swift +++ b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.swift @@ -9,7 +9,7 @@ class BottomTabBarViewController: UIViewController { @IBOutlet var searchButton: MWMButton! @IBOutlet var routeButton: MWMButton! - @IBOutlet var discoveryButton: MWMButton! + @IBOutlet var helpButton: MWMButton! @IBOutlet var bookmarksButton: MWMButton! @IBOutlet var moreButton: MWMButton! @IBOutlet var downloadBadge: UIView! @@ -62,8 +62,8 @@ class BottomTabBarViewController: UIViewController { presenter.onPoint2PointButtonPressed() } - @IBAction func onDiscoveryButtonPressed(_ sender: Any) { - presenter.onDiscoveryButtonPressed() + @IBAction func onHelpButtonPressed(_ sender: Any) { + presenter.onHelpButtonPressed() } @IBAction func onBookmarksButtonPressed(_ sender: Any) { diff --git a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.xib b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.xib index 4a279e0843..995afbacbc 100644 --- a/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.xib +++ b/iphone/Maps/UI/BottomMenu/TabBar/BottomTabBarViewController.xib @@ -1,9 +1,9 @@ - + - + @@ -12,8 +12,9 @@ + - + @@ -44,7 +45,7 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1715,7 +1223,7 @@ Приложение не использует мобильный интернет в роуминге. - + @@ -1743,7 +1251,7 @@ - + @@ -1771,7 +1279,7 @@ - + @@ -1828,7 +1336,7 @@ - + @@ -1857,7 +1365,7 @@ - + @@ -1886,7 +1394,7 @@ - + @@ -1934,9 +1442,4 @@ - - - - -