mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[ios] Changed settings to SwiftUI
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
090ed5044a
commit
fdbb41e0fd
@@ -1,24 +1,31 @@
|
||||
import UIKit
|
||||
import SwiftUI
|
||||
|
||||
import UIKit
|
||||
|
||||
/// Class for accesing SwiftUI views from Objective-C code
|
||||
@objc class BridgeControllers: NSObject {
|
||||
/// The `ProfileView`
|
||||
@objc static func profile() -> UIViewController {
|
||||
return UIHostingController(rootView: ProfileView())
|
||||
}
|
||||
|
||||
/// The `ProfileView` for presentation in an alert
|
||||
@objc static func profileAsAlert() -> UIViewController {
|
||||
return UIHostingController(rootView: ProfileView(isPresentedAsAlert: true))
|
||||
let profileBridgeController = UIHostingController(rootView: ProfileView(isPresentedAsAlert: true))
|
||||
profileBridgeController.view.backgroundColor = .systemGroupedBackground
|
||||
return profileBridgeController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Class for using the SwiftUI `SettingsView` in the interface builder
|
||||
class SettingsBridgeController: UIHostingController<SettingsView> {
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder, rootView: SettingsView())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Class for using the SwiftUI `ProfileView` in the interface builder
|
||||
class ProfileBridgeController: UIHostingController<ProfileView> {
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder, rootView: ProfileView())
|
||||
self.view.tintColor = .alternativeAccent
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import SwiftUI
|
||||
import SafariServices
|
||||
|
||||
import SwiftUI
|
||||
|
||||
/// View for Safari via a Safari view controller
|
||||
struct SafariView: UIViewControllerRepresentable {
|
||||
// MARK: Properties
|
||||
|
||||
/// The notification name for dismissing this view
|
||||
static let dismissNotificationName: Notification.Name = Notification.Name(rawValue: "DismissSafariView")
|
||||
|
||||
|
||||
/// The url
|
||||
let url: URL
|
||||
|
||||
@@ -24,7 +27,7 @@ struct SafariView: UIViewControllerRepresentable {
|
||||
let safariViewControllerConfiguration = SFSafariViewController.Configuration()
|
||||
safariViewControllerConfiguration.activityButton = nil
|
||||
safariViewControllerConfiguration.barCollapsingEnabled = true
|
||||
|
||||
|
||||
let safariViewController = SFSafariViewController(url: url, configuration: safariViewControllerConfiguration)
|
||||
safariViewController.preferredBarTintColor = UIColor.accent
|
||||
safariViewController.preferredControlTintColor = UIColor.white
|
||||
|
||||
@@ -605,12 +605,6 @@ NSString *const kSettingsSegue = @"Map2Settings";
|
||||
[self.navigationController pushViewController:descriptionViewController animated:YES];
|
||||
}
|
||||
|
||||
- (void)openDrivingOptions {
|
||||
UIStoryboard *sb = [UIStoryboard instance:MWMStoryboardDrivingOptions];
|
||||
UIViewController *vc = [sb instantiateInitialViewController];
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
}
|
||||
|
||||
- (void)processMyPositionStateModeEvent:(MWMMyPositionMode)mode {
|
||||
self.currentPositionMode = mode;
|
||||
[MWMLocationManager setMyPositionMode:mode];
|
||||
|
||||
@@ -138,9 +138,7 @@
|
||||
Task(priority: .userInitiated) {
|
||||
await Profile.saveAuthorizationToken(from: code)
|
||||
DispatchQueue.main.sync {
|
||||
let window = (UIApplication.shared.connectedScenes.filter { $0.activationState == .foregroundActive }.first(where: { $0 is UIWindowScene }) as? UIWindowScene)?.keyWindow
|
||||
window?.rootViewController?.presentedViewController?.navigationController?.popToRootViewController(animated: true)
|
||||
window?.rootViewController?.presentedViewController?.dismiss(animated: true)
|
||||
NotificationCenter.default.post(name: SafariView.dismissNotificationName, object: nil)
|
||||
}
|
||||
}
|
||||
return true
|
||||
@@ -149,9 +147,7 @@
|
||||
}
|
||||
case .incorrect:
|
||||
if url.absoluteString.starts(with: "cm://oauth2/osm/callback") {
|
||||
let window = (UIApplication.shared.connectedScenes.filter { $0.activationState == .foregroundActive }.first(where: { $0 is UIWindowScene }) as? UIWindowScene)?.keyWindow
|
||||
window?.rootViewController?.presentedViewController?.navigationController?.popToRootViewController(animated: true)
|
||||
window?.rootViewController?.presentedViewController?.dismiss(animated: true)
|
||||
NotificationCenter.default.post(name: SafariView.dismissNotificationName, object: nil)
|
||||
}
|
||||
// Invalid URL or API parameters.
|
||||
return false;
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
NS_SWIFT_NAME(Settings)
|
||||
NS_SWIFT_NAME(SettingsBridge)
|
||||
@interface MWMSettings : NSObject
|
||||
|
||||
+ (BOOL)buildings3dViewEnabled;
|
||||
+ (void)setBuildings3dViewEnabled:(BOOL)buildings3dViewEnabled;
|
||||
|
||||
+ (BOOL)perspectiveViewEnabled;
|
||||
+ (void)setPerspectiveViewEnabled:(BOOL)perspectiveViewEnabled;
|
||||
|
||||
+ (BOOL)autoZoomEnabled;
|
||||
+ (void)setAutoZoomEnabled:(BOOL)autoZoomEnabled;
|
||||
|
||||
+ (BOOL)autoDownloadEnabled;
|
||||
+ (void)setAutoDownloadEnabled:(BOOL)autoDownloadEnabled;
|
||||
|
||||
@@ -16,6 +25,9 @@ NS_SWIFT_NAME(Settings)
|
||||
+ (MWMTheme)theme;
|
||||
+ (void)setTheme:(MWMTheme)theme;
|
||||
|
||||
+ (NSInteger)powerManagement;
|
||||
+ (void)setPowerManagement:(NSInteger)powerManagement;
|
||||
|
||||
+ (BOOL)routingDisclaimerApproved;
|
||||
+ (void)setRoutingDisclaimerApproved;
|
||||
|
||||
@@ -40,5 +52,6 @@ NS_SWIFT_NAME(Settings)
|
||||
+ (void)initializeLogging;
|
||||
+ (BOOL)isFileLoggingEnabled;
|
||||
+ (void)setFileLoggingEnabled:(BOOL)fileLoggingEnabled;
|
||||
+ (NSInteger)logFileSize;
|
||||
|
||||
@end
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include <CoreApi/Framework.h>
|
||||
#include <CoreApi/Logger.h>
|
||||
|
||||
using namespace power_management;
|
||||
|
||||
namespace
|
||||
{
|
||||
char const * kAutoDownloadEnabledKey = "AutoDownloadEnabled";
|
||||
@@ -24,6 +26,57 @@ NSString * const kUDFileLoggingEnabledKey = @"FileLoggingEnabledKey";
|
||||
|
||||
@implementation MWMSettings
|
||||
|
||||
+ (BOOL)buildings3dViewEnabled;
|
||||
{
|
||||
bool _ = true, on = true;
|
||||
GetFramework().Load3dMode(_, on);
|
||||
if (GetFramework().GetPowerManager().GetScheme() == power_management::Scheme::EconomyMaximum) {
|
||||
return false;
|
||||
} else {
|
||||
return on;
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)setBuildings3dViewEnabled:(BOOL)buildings3dViewEnabled;
|
||||
{
|
||||
auto &f = GetFramework();
|
||||
bool _ = true, is3dBuildings = true;
|
||||
f.Load3dMode(_, is3dBuildings);
|
||||
is3dBuildings = static_cast<bool>(buildings3dViewEnabled);
|
||||
f.Save3dMode(_, is3dBuildings);
|
||||
f.Allow3dMode(_, is3dBuildings);
|
||||
}
|
||||
|
||||
+ (BOOL)perspectiveViewEnabled;
|
||||
{
|
||||
bool _ = true, on = true;
|
||||
auto &f = GetFramework();
|
||||
f.Load3dMode(on, _);
|
||||
return on;
|
||||
}
|
||||
|
||||
+ (void)setPerspectiveViewEnabled:(BOOL)perspectiveViewEnabled;
|
||||
{
|
||||
auto &f = GetFramework();
|
||||
bool is3d = true, _ = true;
|
||||
f.Load3dMode(is3d, _);
|
||||
is3d = static_cast<bool>(perspectiveViewEnabled);
|
||||
f.Save3dMode(is3d, _);
|
||||
f.Allow3dMode(is3d, _);
|
||||
}
|
||||
|
||||
+ (BOOL)autoZoomEnabled
|
||||
{
|
||||
return GetFramework().LoadAutoZoom();
|
||||
}
|
||||
|
||||
+ (void)setAutoZoomEnabled:(BOOL)autoZoomEnabled
|
||||
{
|
||||
auto &f = GetFramework();
|
||||
f.AllowAutoZoom(autoZoomEnabled);
|
||||
f.SaveAutoZoom(autoZoomEnabled);
|
||||
}
|
||||
|
||||
+ (BOOL)autoDownloadEnabled
|
||||
{
|
||||
bool autoDownloadEnabled = true;
|
||||
@@ -101,6 +154,29 @@ NSString * const kUDFileLoggingEnabledKey = @"FileLoggingEnabledKey";
|
||||
[MWMThemeManager invalidate];
|
||||
}
|
||||
|
||||
+ (NSInteger)powerManagement
|
||||
{
|
||||
Scheme scheme = GetFramework().GetPowerManager().GetScheme();
|
||||
if (scheme == Scheme::EconomyMaximum) {
|
||||
return 2;
|
||||
} else if (scheme == Scheme::Auto) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ (void)setPowerManagement:(NSInteger)powerManagement
|
||||
{
|
||||
Scheme scheme = Scheme::Normal;
|
||||
if (powerManagement == 2) {
|
||||
scheme = Scheme::EconomyMaximum;
|
||||
} else if (powerManagement == 1) {
|
||||
scheme = Scheme::Auto;
|
||||
}
|
||||
GetFramework().GetPowerManager().SetScheme(scheme);
|
||||
}
|
||||
|
||||
+ (BOOL)routingDisclaimerApproved
|
||||
{
|
||||
bool enabled = false;
|
||||
@@ -185,4 +261,10 @@ NSString * const kUDFileLoggingEnabledKey = @"FileLoggingEnabledKey";
|
||||
[Logger setFileLoggingEnabled:fileLoggingEnabled];
|
||||
}
|
||||
|
||||
+ (NSInteger)logFileSize
|
||||
{
|
||||
uint64_t logFileSize = [Logger getLogFileSize];
|
||||
return logFileSize;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -7,7 +7,12 @@
|
||||
+ (void)setTTSEnabled:(BOOL)enabled;
|
||||
+ (BOOL)isStreetNamesTTSEnabled;
|
||||
+ (void)setStreetNamesTTSEnabled:(BOOL)enabled;
|
||||
+ (NSDictionary<NSString *, NSString *> *)availableLanguages;
|
||||
+ (NSString *)selectedLanguage;
|
||||
+ (NSString *)savedLanguage;
|
||||
+ (NSInteger)speedCameraMode;
|
||||
+ (void)setSpeedCameraMode:(NSInteger)speedCameraMode;
|
||||
+ (void)playTest;
|
||||
|
||||
+ (void)addObserver:(id<MWMTextToSpeechObserver>)observer;
|
||||
+ (void)removeObserver:(id<MWMTextToSpeechObserver>)observer;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#import "MWMRouter.h"
|
||||
#import "MWMTextToSpeech+CPP.h"
|
||||
#import "SwiftBridge.h"
|
||||
#import "TTSTester.h"
|
||||
|
||||
#include "LocaleTranslator.h"
|
||||
|
||||
@@ -10,6 +11,7 @@
|
||||
#include "platform/languages.hpp"
|
||||
|
||||
using namespace locale_translator;
|
||||
using namespace routing;
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -169,10 +171,63 @@ using Observers = NSHashTable<Observer>;
|
||||
}
|
||||
|
||||
- (BOOL)active { return [[self class] isTTSEnabled] && [MWMRouter areTurnNotificationsEnabled]; }
|
||||
|
||||
+ (NSDictionary<NSString *, NSString *> *)availableLanguages
|
||||
{
|
||||
NSMutableDictionary<NSString *, NSString *> *availableLanguages = [[NSMutableDictionary alloc] init];
|
||||
auto const & v = [[self tts] availableLanguages];
|
||||
for (auto i: v) {
|
||||
[availableLanguages setObject:@(i.second.c_str()) forKey:@(i.first.c_str())];
|
||||
}
|
||||
return availableLanguages;
|
||||
}
|
||||
|
||||
+ (NSString *)selectedLanguage {
|
||||
if ([self savedLanguage] != nil) {
|
||||
return [self savedLanguage];
|
||||
}
|
||||
|
||||
NSString * preferedLanguageBcp47 = [AVSpeechSynthesisVoice currentLanguageCode];
|
||||
|
||||
std::pair<std::string, std::string> const lan =
|
||||
std::make_pair(preferedLanguageBcp47.UTF8String, tts::translateLocale(preferedLanguageBcp47.UTF8String));
|
||||
|
||||
std::vector<std::pair<std::string, std::string>> const availableLanguages = [[self tts] availableLanguages];
|
||||
if (find(availableLanguages.begin(), availableLanguages.end(), lan) !=
|
||||
availableLanguages.end()) {
|
||||
return preferedLanguageBcp47;
|
||||
}
|
||||
|
||||
return kDefaultLanguage;
|
||||
}
|
||||
|
||||
+ (NSString *)savedLanguage {
|
||||
return [NSUserDefaults.standardUserDefaults stringForKey:kUserDefaultsTTSLanguageBcp47];
|
||||
}
|
||||
|
||||
+ (NSInteger)speedCameraMode
|
||||
{
|
||||
SpeedCameraManagerMode mode = GetFramework().GetRoutingManager().GetSpeedCamManager().GetMode();
|
||||
if (mode == SpeedCameraManagerMode::Auto) {
|
||||
return 2;
|
||||
} else if (mode == SpeedCameraManagerMode::Always) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ (void)setSpeedCameraMode:(NSInteger)speedCameraMode
|
||||
{
|
||||
SpeedCameraManagerMode mode = SpeedCameraManagerMode::Never;
|
||||
if (speedCameraMode == 2) {
|
||||
mode = SpeedCameraManagerMode::Auto;
|
||||
} else if (speedCameraMode == 1) {
|
||||
mode = SpeedCameraManagerMode::Always;
|
||||
}
|
||||
GetFramework().GetRoutingManager().GetSpeedCamManager().SetMode(mode);
|
||||
}
|
||||
|
||||
- (void)createVoice:(NSString *)locale {
|
||||
if (!self.speechSynthesizer) {
|
||||
self.speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
|
||||
@@ -207,6 +262,13 @@ using Observers = NSHashTable<Observer>;
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)playTest
|
||||
{
|
||||
TTSTester * ttsTester = [[TTSTester alloc] init];
|
||||
[ttsTester playRandomTestString];
|
||||
}
|
||||
|
||||
|
||||
- (void)speakOneString:(NSString *)textToSpeak {
|
||||
AVSpeechUtterance * utterance = [AVSpeechUtterance speechUtteranceWithString:textToSpeak];
|
||||
utterance.voice = self.speechVoice;
|
||||
|
||||
@@ -66,7 +66,7 @@ final class ThemeManager: NSObject {
|
||||
}
|
||||
|
||||
@objc static func invalidate() {
|
||||
instance.update(theme: Settings.theme())
|
||||
instance.update(theme: SettingsBridge.theme())
|
||||
}
|
||||
|
||||
@available(iOS 13.0, *)
|
||||
|
||||
@@ -136,7 +136,7 @@ extension GlobalStyleSheet: IStyleSheet {
|
||||
}
|
||||
case .switch:
|
||||
return .add { s in
|
||||
s.onTintColor = colors.linkBlue
|
||||
s.onTintColor = UIColor.accent
|
||||
}
|
||||
case .pageControl:
|
||||
return .add { s in
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import Combine
|
||||
|
||||
enum VoidResult {
|
||||
case success
|
||||
case failure(Error)
|
||||
@@ -37,10 +39,16 @@ final class iCloudSynchronizaionManager: NSObject {
|
||||
var onSynchronizationStateDidChangeHandler: ((SynchronizationManagerState) -> Void)?
|
||||
}
|
||||
|
||||
var statePublisher: AnyPublisher<SynchronizationManagerState, Never> {
|
||||
stateSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
private let stateSubject = PassthroughSubject<SynchronizationManagerState, Never>()
|
||||
|
||||
let fileManager: FileManager
|
||||
private let localDirectoryMonitor: LocalDirectoryMonitor
|
||||
private let cloudDirectoryMonitor: CloudDirectoryMonitor
|
||||
private let settings: Settings.Type
|
||||
private let settings: SettingsBridge.Type
|
||||
private let bookmarksManager: BookmarksManager
|
||||
private var synchronizationStateManager: SynchronizationStateResolver
|
||||
private var fileWriter: SynchronizationFileWriter?
|
||||
@@ -66,7 +74,7 @@ final class iCloudSynchronizaionManager: NSObject {
|
||||
do {
|
||||
let localDirectoryMonitor = try FileSystemDispatchSourceMonitor(fileManager: fileManager, directory: fileManager.bookmarksDirectoryUrl, fileType: fileType)
|
||||
let clodStorageManager = iCloudSynchronizaionManager(fileManager: fileManager,
|
||||
settings: Settings.self,
|
||||
settings: SettingsBridge.self,
|
||||
bookmarksManager: BookmarksManager.shared(),
|
||||
cloudDirectoryMonitor: cloudDirectoryMonitor,
|
||||
localDirectoryMonitor: localDirectoryMonitor,
|
||||
@@ -79,7 +87,7 @@ final class iCloudSynchronizaionManager: NSObject {
|
||||
|
||||
// MARK: - Initialization
|
||||
init(fileManager: FileManager,
|
||||
settings: Settings.Type,
|
||||
settings: SettingsBridge.Type,
|
||||
bookmarksManager: BookmarksManager,
|
||||
cloudDirectoryMonitor: CloudDirectoryMonitor,
|
||||
localDirectoryMonitor: LocalDirectoryMonitor,
|
||||
@@ -307,10 +315,16 @@ extension iCloudSynchronizaionManager {
|
||||
observers.removeValue(forKey: id)
|
||||
}
|
||||
|
||||
func notifyObservers() {
|
||||
notifyObserversOnSynchronizationError(synchronizationError)
|
||||
}
|
||||
|
||||
private func notifyObserversOnSynchronizationError(_ error: Error?) {
|
||||
let state = SynchronizationManagerState(isAvailable: cloudDirectoryMonitor.isCloudAvailable(),
|
||||
isOn: settings.iCLoudSynchronizationEnabled(),
|
||||
error: error as? NSError)
|
||||
stateSubject.send(state)
|
||||
|
||||
observers.removeUnreachable().forEach { _, observable in
|
||||
DispatchQueue.main.async {
|
||||
observable.onSynchronizationStateDidChangeHandler?(state)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.788",
|
||||
"green" : "0.875",
|
||||
"red" : "0.784"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-geboue is gedeaktiveer in batterybesparingsmodus";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Steminstruksies";
|
||||
"pref_tts_title" = "Steminstruksies";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Announce Street Names";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Wil jy 'n foutverslag aan die ontwikkelaars stuur?\nOns maak staat op ons gebruikers aangesien CoMaps nie outomaties enige foutinligting insamel nie. By voorbaat dankie vir die ondersteuning van CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Aktiveer iCloud-sinchronisasie";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "يتم إيقاف تشغيل المباني ثلاثية الأبعاد في وضع توفير الطاقة";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "تعليمات صوتية";
|
||||
"pref_tts_title" = "تعليمات صوتية";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "أعلن أسماء الشوارع";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "هل ترغب في إرسال تقرير عن الأخطاء إلى المطورين؟\nنحن نعتمد على مستخدمينا لأن تطبيق CoMaps لا يجمع أي معلومات عن الأخطاء تلقائيًا. شكرًا لك مقدمًا على دعم CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "تمكين مزامنة iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D binalar enerjiyə qənaət rejimində söndürülür";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Səsli təlimatlar";
|
||||
"pref_tts_title" = "Səsli təlimatlar";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Küçə adlarını elan edin";
|
||||
@@ -980,6 +983,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Tərtibatçılara səhv hesabatı göndərmək istərdinizmi?\nCoMaps heç bir səhv məlumatını avtomatik toplamadığından istifadəçilərimizə etibar edirik. CoMaps dəstəklədiyiniz üçün əvvəlcədən təşəkkür edirik!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud Sinxronizasiyasını aktivləşdirin";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "У рэжыме энергазберажэння 3D-будынкі адключаны";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Галасавыя інструкцыі";
|
||||
"pref_tts_title" = "Галасавыя інструкцыі";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Абвяшчаць назвы вуліц";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Хочаце адправіць справаздачу пра памылку распрацоўшчыкам?\nМы разлічваем на нашых карыстальнікаў, бо CoMaps не збірае ніякай інфармацыі пра памылкі аўтаматычна. Загадзя дзякуем за падтрымку CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Уключыць сінхранізацыю з iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D сградите са изключени в режим на пестене на енергия";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Гласови инструкции";
|
||||
"pref_tts_title" = "Гласови инструкции";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Обявете имена на улици";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Искате ли да изпратите доклад за грешка на разработчиците?\nРазчитаме на нашите потребители, тъй като CoMaps не събира информация за грешки автоматично. Благодарим ви предварително, че подкрепяте CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Активиране на синхронизацията с iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Els edificis en 3D es desactiven en mode d'estalvi d'energia";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instruccions de veu";
|
||||
"pref_tts_title" = "Instruccions de veu";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anuncia els noms dels carrers";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Voleu enviar un informe d’error als desenvolupadors?\nEns refiem dels nostres usuaris, ja que l’CoMaps no recull cap informació d’errors automàticament. Gràcies per avançat per donar suport a CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Activa la sincronització amb l’iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D budovy jsou vypnuty v úsporném režimu";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Hlasové instrukce";
|
||||
"pref_tts_title" = "Hlasové instrukce";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Oznamovat názvy ulic";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Chcete poslat vývojářům hlášení o chybě?\nSpoléháme na naše uživatele, protože společnost CoMaps neshromažďuje žádné informace o chybách automaticky. Předem vám děkujeme za podporu CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Povolení synchronizace s iCloudem";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-bygninger er deaktiveret i strømbesparende tilstand";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Stemmeinstruktioner";
|
||||
"pref_tts_title" = "Stemmeinstruktioner";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Annoncer gadenavne";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Vil du gerne sende en fejlrapport til udviklerne?\nVi er afhængige af vores brugere, da CoMaps ikke indsamler nogen fejloplysninger automatisk. Tak på forhånd for at støtte CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Aktivér iCloud-synkronisering";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-Gebäude werden im Energiesparmodus ausgeschaltet";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Sprachführung";
|
||||
"pref_tts_title" = "Sprachführung";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Straßennamen ankündigen";
|
||||
@@ -1006,6 +1009,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Willst du einen Fehlerbericht an die Entwickler schicken?\nWir sind auf unsere Nutzer angewiesen, da CoMaps keine Fehlerinformationen automatisch sammelt. Wir danken dir im Voraus für deine Unterstützung von CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Aktiviere die iCloud-Synchronisierung";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Τα τρισδιάστατα κτίρια είναι απενεργοποιημένα σε λειτουργία εξοικονόμησης ενέργειας";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Φωνητικές οδηγίες";
|
||||
"pref_tts_title" = "Φωνητικές οδηγίες";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Ανακοινώστε ονόματα οδών";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Θα θέλατε να στείλετε μια αναφορά σφάλματος στους προγραμματιστές;\nΒασιζόμαστε στους χρήστες μας, καθώς οι CoMaps δεν συλλέγουν αυτόματα καμία πληροφορία σφάλματος. Σας ευχαριστούμε εκ των προτέρων για την υποστήριξη των CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Ενεργοποίηση συγχρονισμού iCloud";
|
||||
|
||||
|
||||
@@ -228,8 +228,11 @@
|
||||
/* A message in Settings/Preferences explaining why is it not possible to enable 3D buildings when max power saving mode is enabled */
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D buildings are disabled in power saving mode";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Voice Instructions";
|
||||
/* Settings «Route» category: «Tts» title */
|
||||
"pref_tts_title" = "Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Announce Street Names";
|
||||
@@ -1006,6 +1009,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Would you like to send a bug report to the developers?\nWe rely on our users as CoMaps doesn't collect any error information automatically. Thank you in advance for supporting CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Enable iCloud Syncronization";
|
||||
|
||||
|
||||
@@ -241,7 +241,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D buildings are disabled in power saving mode";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Voice Instructions";
|
||||
"pref_tts_title" = "Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Announce Street Names";
|
||||
@@ -1030,6 +1033,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Would you like to send a bug report to the developers?\nWe rely on our users as CoMaps doesn't collect any error information automatically. Thank you in advance for supporting CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Enable iCloud Syncronization";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Los edificios 3D se apagan en el modo de ahorro de energía";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instrucciones de voz";
|
||||
"pref_tts_title" = "Instrucciones de voz";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anunciar nombres de calles";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "¿Quiere enviar un informe de error a los desarrolladores?\nDependemos de nuestros usuarios, ya que CoMaps no recoge ninguna información sobre errores de forma automática. ¡Gracias de antemano por apoyar a CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Activar la sincronización con iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Los edificios 3D se desactivan en el modo de ahorro de energía";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instrucciones de voz";
|
||||
"pref_tts_title" = "Instrucciones de voz";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anunciar nombres de calles";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "¿Quiere enviar un informe de error a los desarrolladores?\nDependemos de nuestros usuarios, ya que CoMaps no recoge ninguna información sobre errores de forma automática. ¡Gracias de antemano por apoyar a CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Activar la sincronización con iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-vaated lülitatakse energiasäästurežiimis välja";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Hääljuhised";
|
||||
"pref_tts_title" = "Hääljuhised";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Teata tänavanimesid";
|
||||
@@ -1005,6 +1008,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Kas soovid saata arendajatele veateate?\nMe toetume oma kasutajatele, kuna CoMaps ei kogu automaatselt mingit veateavet. Täname sind juba ette CoMapsi toetamise eest!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Luba iCloudi sünkroniseerimine";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D eraikinak desgaituta daude energia aurrezteko moduan";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Ahots argibideak";
|
||||
"pref_tts_title" = "Ahots argibideak";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Kaleen izenak iragarri";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Akatsen txostena bidali nahi diezu garatzaileei?\nGure erabiltzaileengan oinarritzen gara CoMaps-ek ez baitu automatikoki akatsen informaziorik biltzen. Eskerrik asko aldez aurretik CoMaps laguntzeagatik!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Gaitu iCloud sinkronizazioa";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "ساختمان های سه بعدی در حالت صرفه جویی در مصرف برق خاموش می شوند";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "دستور العمل صوتی";
|
||||
"pref_tts_title" = "دستور العمل صوتی";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "نام خیابان ها را اعلام کنید";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "آیا می خواهید یک گزارش اشکال برای توسعه دهندگان ارسال کنید؟\nما به کاربران خود تکیه می کنیم زیرا CoMaps هیچ گونه اطلاعات خطا را به طور خودکار جمع آوری نمی کند. پیشاپیش از شما برای حمایت از CoMaps سپاسگزاریم!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "همگام سازی iCloud را فعال کنید";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-rakennukset ovat poissa päältä virransäästötilassa";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Ääniohjeistukset";
|
||||
"pref_tts_title" = "Ääniohjeistukset";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Ilmoita kadunnimet";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Haluatko lähettää vikailmoituksen kehittäjille?\nLuotamme käyttäjiin, sillä CoMaps ei kerää virhetietoja automaattisesti. Kiitos etukäteen CoMapsin tukemisesta!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Ota iCloud-synkronointi käyttöön";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Les bâtiments 3D sont désactivés en mode d'économie d'énergie";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instructions vocales";
|
||||
"pref_tts_title" = "Instructions vocales";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Annoncer les noms de rue";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Veux-tu envoyer un rapport de bogue aux développeurs ?\nNous comptons sur nos utilisateurs, car CoMaps ne recueille pas automatiquement d'informations sur les erreurs. Merci d'avance de soutenir CoMaps !";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Activer la synchronisation iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "הגדרת מבנים בתלת מימד מבוטלת במצב חיסכון בחשמל";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "הנחיות קוליות";
|
||||
"pref_tts_title" = "הנחיות קוליות";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "הכריזו על שמות רחובות";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "האם תרצה לשלוח דוח באג למפתחים?\nאנו סומכים על המשתמשים שלנו מכיוון ש-CoMaps לא אוספות כל מידע על שגיאות באופן אוטומטי. תודה מראש על התמיכה ב-CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "הפעל סנכרון iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3डी इमारतें बिजली बचत मोड में अक्षम हैं";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "ध्वनि निर्देश";
|
||||
"pref_tts_title" = "ध्वनि निर्देश";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "सड़कों के नाम की घोषणा करें";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "क्या आप डेवलपर्स को बग रिपोर्ट भेजना चाहेंगे?\nहम अपने उपयोगकर्ताओं पर भरोसा करते हैं क्योंकि CoMaps स्वचालित रूप से कोई त्रुटि जानकारी एकत्र नहीं करता है। CoMaps का समर्थन करने के लिए अग्रिम धन्यवाद!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud सिंक्रोनाइज़ेशन सक्षम करें";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "A 3D-s épületek energiatakarékos módban ki vannak kapcsolva";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Hangutasítások";
|
||||
"pref_tts_title" = "Hangutasítások";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Utcanevek felolvasása";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Szeretne hibajelentést küldeni a fejlesztőknek?\nA felhasználóinkra támaszkodunk, mivel az CoMaps nem gyűjt automatikusan hibainformációkat. Előre is köszönjük, hogy támogatja az CoMaps csapatát!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud-szinkronizálás engedélyezése";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Bangunan 3D dimatikan dalam mode hemat daya";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Petunjuk Suara";
|
||||
"pref_tts_title" = "Petunjuk Suara";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Umumkan Nama Jalan";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Apakah Anda ingin mengirim laporan bug ke pengembang?\nKami mengandalkan pengguna kami karena CoMaps tidak mengumpulkan informasi kesalahan secara otomatis. Terima kasih sebelumnya karena telah mendukung CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Mengaktifkan Sinkronisasi iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Gli edifici 3D sono disattivati in modalità risparmio energetico";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Istruzioni vocali";
|
||||
"pref_tts_title" = "Istruzioni vocali";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Annunciare i nomi delle strade";
|
||||
@@ -997,6 +1000,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Vuoi inviare una segnalazione di bug agli sviluppatori?\nCi affidiamo ai nostri utenti perché CoMaps non raccoglie automaticamente informazioni sugli errori. Ti ringraziamo in anticipo per il supporto a CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Abilita la sincronizzazione con iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "省電力モードで建物の 3D 表示がオフになっている";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "音声指示";
|
||||
"pref_tts_title" = "音声指示";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "通りの名前を発表";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "開発者にバグレポートを送りたいか?\nCoMapsはエラー情報を自動収集しないため、我々はユーザーに依存している。CoMapsを応援してくださりありがとう!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud同期を有効にする";
|
||||
|
||||
|
||||
@@ -228,7 +228,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D 빌딩은 절전 모드에서 꺼집니다";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "음성 지침";
|
||||
"pref_tts_title" = "음성 지침";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "\"거리 이름 발표\"";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "개발자에게 버그 리포트를 보내시겠습니까?\nCoMaps은 오류 정보를 자동으로 수집하지 않으므로 사용자의 도움을 받아야 합니다. CoMaps을 이용해 주셔서 미리 감사드립니다!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud 동기화 활성화";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Trimačiai pastatai yra išjungti energijos taupymo veiksenoje";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Balso instrukcijos";
|
||||
"pref_tts_title" = "Balso instrukcijos";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Sakyti gatvių pavadinimus";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Ar norite išsiųsti pranešimą apie klaidą programos kūrėjams?\nTokių pranešimų mes tikimės iš savo naudotojų, nes „CoMaps“ nerenka jokios informacijos apie klaidas automatiškai. Iš anksto dėkojame, kad prisidedate prie „CoMaps“ tobulinimo!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "„iCloud“ sinchronizavimo įjungimas";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Energotaupības režīmā 3D ēkas ir izslēgtas";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Balss instrukcijas";
|
||||
"pref_tts_title" = "Balss instrukcijas";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Izrunāt ielu nosaukumus";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Vai vēlaties izstrādātājiem nosūtīt ziņojumu par kļūdu?\nMēs paļaujamies uz šiem ziņojumiem, jo „CoMaps“ automātiski nevāc nekādus datus par kļūdām. Jau iepriekš pateicamies par „CoMaps“ atbalstīšanu!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Ieslēgta „iCloud“ sinhronizācija";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D इमारती वीज बचत मोडमध्ये बंद केल्या आहेत";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "ध्वनी सूचना";
|
||||
"pref_tts_title" = "ध्वनी सूचना";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "मार्गांची नावे घोषित करा";
|
||||
@@ -1001,6 +1004,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "तुम्ही विकासकांना बग अहवाल पाठवू इच्छिता?\nआम्ही आमच्या वापरकर्त्यांवर अवलंबून आहोत कारण CoMaps कोणतीही त्रुटी माहिती स्वयंचलितपणे संकलित करत नाही. CoMaps ला समर्थन दिल्याबद्दल आगाऊ धन्यवाद!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud सिंक्रोनाइझेशन सक्षम करा";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Il-binjiet 3D huma mitfigħin fil-mod tal-iffrankar tal-enerġija";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Istruzzjonijiet tal-vuċi";
|
||||
"pref_tts_title" = "Istruzzjonijiet tal-vuċi";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Ħabbar l-ismijiet tat-toroq";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Would you like to send a bug report to the developers?\nWe rely on our users as CoMaps doesn't collect any error information automatically. Thank you in advance for supporting CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Enable iCloud Syncronization";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-bygninger er slått av i strømsparingsmodus";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Taleinstrukser";
|
||||
"pref_tts_title" = "Taleinstrukser";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Kunngjør gatenavn";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Vil du sende en feilrapport til utviklerne?\nVi er avhengige av brukerne våre, da CoMaps ikke samler inn noen feilinformasjon automatisk. Takk på forhånd for at du støtter CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Aktiver iCloud-synkronisering";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-gebouwen worden uitgeschakeld in de energiebesparende modus";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Gesproken instructies";
|
||||
"pref_tts_title" = "Gesproken instructies";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Straatnamen aankondigen";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Wil je een bugrapport naar de ontwikkelaars sturen?\nWe vertrouwen op onze gebruikers, want CoMaps verzamelt geen foutinformatie automatisch. Alvast bedankt voor je steun aan CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Schakel iCloud-synchronisatie in";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Budynki 3D są wyłączone w trybie oszczędzania energii";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Komunikaty głosowe";
|
||||
"pref_tts_title" = "Komunikaty głosowe";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Wymawiaj nazwy ulic";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Chcesz wysłać raport o błędzie do deweloperów?\nPolegamy na naszych użytkownikach, ponieważ CoMaps nie zbiera żadnych informacji o błędach automatycznie. Z góry dziękujemy za wspieranie CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Włącz synchronizację iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Os edifícios 3D são desativados no modo de economia de energia";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Orientação por voz";
|
||||
"pref_tts_title" = "Orientação por voz";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anunciar nomes de ruas";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Você gostaria de enviar um relatório de bug para os desenvolvedores?\nDependemos de nossos usuários, pois o CoMaps não coleta nenhuma informação de erro automaticamente. Agradecemos antecipadamente por você apoiar o CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Ativar a sincronização do iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Os edifícios 3D são desativados no modo de poupança de energia";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instruções de voz";
|
||||
"pref_tts_title" = "Instruções de voz";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anunciar nomes de ruas";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Gostarias de enviar um relatório de erro para os programadores?\nContamos com os nossos utilizadores, uma vez que o CoMaps não recolhe automaticamente qualquer informação de erro. Agradecemos desde já o teu apoio ao CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Ativar a sincronização do iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Clădirile 3D sunt oprite în modul de economisire a energiei";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Instrucțiuni vocale";
|
||||
"pref_tts_title" = "Instrucțiuni vocale";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Anunțați numele străzilor";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Doriți să trimiteți un raport de eroare dezvoltatorilor?\nNe bazăm pe utilizatorii noștri, deoarece CoMaps nu colectează automat nicio informație privind erorile. Vă mulțumim anticipat pentru susținerea CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Activați Sincronizarea iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-здания отключаются в режиме энергосбережения";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Голосовые инструкции";
|
||||
"pref_tts_title" = "Голосовые инструкции";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Проговаривать названия улиц";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Хотите отправить разработчикам сообщение об ошибке?\nМы полагаемся на наших пользователей, так как CoMaps не собирает информацию об ошибках автоматически. Заранее спасибо за поддержку CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Включить синхронизацию с iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D budovy sú vypnuté v režime úspory energie";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Hlasové povely";
|
||||
"pref_tts_title" = "Hlasové povely";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Oznámte názvy ulíc";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Chcete poslať vývojárom hlásenie o chybe?\nSpoliehame sa na našich používateľov, pretože spoločnosť CoMaps nezhromažďuje žiadne informácie o chybách automaticky. Vopred vám ďakujeme za podporu CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Povolenie synchronizácie iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D зграде се не приказују у режиму чувања батерије";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Гласовне инструкције";
|
||||
"pref_tts_title" = "Гласовне инструкције";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Најави име улице";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Да ли желите да пошаљете пријаву бага програмерима?\nОслањамо се на кориснике пошто CoMaps не прикупља податке о грешкама аутоматски. Хвала унапред што подржавате CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Омогући iCloud синхронизацију";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D-byggnader är avstängda i energisparläge";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Röstinstruktioner";
|
||||
"pref_tts_title" = "Röstinstruktioner";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Läs upp gatunamn";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Vill du skicka en felrapport till utvecklarna?\nVi förlitar oss på våra användare eftersom CoMaps inte samlar in någon felinformation automatiskt. Tack på förhand för att du stöder CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Aktivera iCloud-synkronisering";
|
||||
|
||||
|
||||
@@ -219,7 +219,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Majengo ya 3D yamezimwa katika hali ya kuokoa nishati";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Tangaza Majina ya Mitaa";
|
||||
"pref_tts_title" = "Tangaza Majina ya Mitaa";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Tangaza Majina ya Mitaa";
|
||||
@@ -994,6 +997,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Je, ungependa kutuma ripoti ya hitilafu kwa wasanidi programu?\nTunategemea watumiaji wetu kwani CoMaps hazikusanyi maelezo yoyote ya hitilafu kiotomatiki. Asante mapema kwa kusaidia CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Washa Usawazishaji wa iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "สิ่งปลูกสร้าง 3 มิติจะปิดในโหมดประหยัดพลังงาน";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "คำแนะนำด้วยเสียง";
|
||||
"pref_tts_title" = "คำแนะนำด้วยเสียง";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "ประกาศชื่อถนน";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "คุณต้องการส่งรายงานข้อผิดพลาดไปยังนักพัฒนาหรือไม่?\nเราไว้วางใจผู้ใช้ของเราเนื่องจาก CoMaps จะไม่รวบรวมข้อมูลข้อผิดพลาดใด ๆ โดยอัตโนมัติ ขอขอบคุณล่วงหน้าสำหรับการสนับสนุน CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "เปิดใช้งานการซิงโครไนซ์ iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3B yapılar güç tutum kipindeyken kapatılır";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Sesli Yönlendirme";
|
||||
"pref_tts_title" = "Sesli Yönlendirme";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Sokak Adlarını Söyle";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Geliştiricilere bir hata raporu göndermek ister misiniz?\nCoMaps otomatik olarak herhangi bir hata bilgisi toplamadığı için bu konuda kullanıcılarımıza güveniyoruz. CoMaps'i desteklediğiniz için şimdiden teşekkür ederiz!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "iCloud Senkronizasyonunu Etkinleştir";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D будівлі вимкнені в режимі енергозбереження";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Голосові інструкції";
|
||||
"pref_tts_title" = "Голосові інструкції";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Проговорювати назви вулиць";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Бажаєте надіслати розробникам звіт про помилку?\nМи покладаємося на наших користувачів, оскільки CoMaps не збирає інформацію про помилки автоматично. Заздалегідь дякуємо за підтримку CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Увімкнути синхронізацію з iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "Tòa nhà 3D bị tắt ở chế độ tiết kiệm năng lượng";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "Hướng dẫn bằng Giọng nói";
|
||||
"pref_tts_title" = "Hướng dẫn bằng Giọng nói";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "Thông báo tên đường";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "Bạn có muốn gửi báo cáo lỗi cho nhà phát triển không?\nChúng tôi dựa vào người dùng của mình vì CoMaps không tự động thu thập bất kỳ thông tin lỗi nào. Cảm ơn bạn trước vì đã ủng hộ CoMaps!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "Kích hoạt đồng bộ hóa iCloud";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D 建筑在省电模式下处于关闭状态";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "语音指导";
|
||||
"pref_tts_title" = "语音指导";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "播报街道名称";
|
||||
@@ -1004,6 +1007,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "您想向开发人员发送错误报告吗?\n由于 CoMaps 不会自动收集任何错误信息,因此我们只能依靠我们的用户。感谢您对 CoMaps 的支持!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "启用 iCloud 同步";
|
||||
|
||||
|
||||
@@ -229,7 +229,10 @@
|
||||
"pref_map_3d_buildings_disabled_summary" = "3D 建築在省電模式下將會關閉";
|
||||
|
||||
/* Settings «Route» category: «Tts enabled» title */
|
||||
"pref_tts_enable_title" = "語音提示";
|
||||
"pref_tts_title" = "語音提示";
|
||||
|
||||
/* Settings «Route» category: «Tts enable» title */
|
||||
"pref_tts_enable_title" = "Enable Voice Instructions";
|
||||
|
||||
/* Settings «Route» category: «Tts announce street names» title */
|
||||
"pref_tts_street_names_title" = "播報街道名稱";
|
||||
@@ -1003,6 +1006,9 @@
|
||||
/* Message for the bug report alert. */
|
||||
"bugreport_alert_message" = "您想向開發人員發送錯誤報告嗎?\n由於 CoMaps 不會自動收集任何錯誤資訊,因此我們只能依靠用戶的協助。感謝您對 CoMaps 的支持!";
|
||||
|
||||
/* Title for the iCloud syncronization setting */
|
||||
"icloud_sync" = "iCloud Syncronization (Beta)";
|
||||
|
||||
/* Title for the "Enable iCloud Syncronization" alert. */
|
||||
"enable_icloud_synchronization_title" = "啟用 iCloud 同步";
|
||||
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
272F1F3D2E0EE0C800FA52EF /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 272F1F3C2E0EE0C400FA52EF /* ProfileView.swift */; };
|
||||
272F1F462E0EEF9400FA52EF /* SafariView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 272F1F452E0EEF8B00FA52EF /* SafariView.swift */; };
|
||||
2765D1D02E13F9C20005CA2B /* BridgeControllers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2765D1CD2E13F9BC0005CA2B /* BridgeControllers.swift */; };
|
||||
279367562E1BE16300AA5C3D /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367552E1BE16300AA5C3D /* Settings.swift */; };
|
||||
2793675A2E1BE17300AA5C3D /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367592E1BE17300AA5C3D /* SettingsView.swift */; };
|
||||
27AF184C2E1D5B2D00CD41E2 /* SettingsNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */; };
|
||||
27AF18502E1DB61600CD41E2 /* VoiceRoutingLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */; };
|
||||
27AF18522E1DB62000CD41E2 /* DistanceUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */; };
|
||||
27AF18542E1DB62700CD41E2 /* MobileDataPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18532E1DB62600CD41E2 /* MobileDataPolicy.swift */; };
|
||||
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
|
||||
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
|
||||
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */; };
|
||||
3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
|
||||
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
|
||||
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.swift */; };
|
||||
@@ -49,7 +58,6 @@
|
||||
340B33C61F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */; };
|
||||
340E1EEF1E2F614400CE49BF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 340E1EE51E2F614400CE49BF /* LaunchScreen.storyboard */; };
|
||||
340E1EF21E2F614400CE49BF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 340E1EE61E2F614400CE49BF /* Main.storyboard */; };
|
||||
340E1EF81E2F614400CE49BF /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 340E1EE81E2F614400CE49BF /* Settings.storyboard */; };
|
||||
340E1EFB1E2F614400CE49BF /* Storyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340E1EE91E2F614400CE49BF /* Storyboard.swift */; };
|
||||
340E1EFE1E2F614400CE49BF /* Welcome.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 340E1EEA1E2F614400CE49BF /* Welcome.storyboard */; };
|
||||
343064411E9FDC7300DC7665 /* SearchIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430643F1E9FDC7300DC7665 /* SearchIndex.swift */; };
|
||||
@@ -179,7 +187,6 @@
|
||||
34F742321E0834F400AC1FD6 /* UIViewController+Navigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F742301E0834F400AC1FD6 /* UIViewController+Navigation.m */; };
|
||||
34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; };
|
||||
3D15ACEE2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D15ACED2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm */; };
|
||||
3DEE1AEB21F72CD300054A91 /* MWMPowerManagmentViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3DEE1AEA21F72CD300054A91 /* MWMPowerManagmentViewController.mm */; };
|
||||
408645FC21495EB1000A4A1D /* categories_cuisines.txt in Resources */ = {isa = PBXBuildFile; fileRef = 408645FB21495EB1000A4A1D /* categories_cuisines.txt */; };
|
||||
44360A0D2A7D34990016F412 /* TransportRuler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44360A0C2A7D34990016F412 /* TransportRuler.swift */; };
|
||||
44360A112A7D35440016F412 /* TransportRuler.xib in Resources */ = {isa = PBXBuildFile; fileRef = 44360A102A7D35440016F412 /* TransportRuler.xib */; };
|
||||
@@ -217,7 +224,6 @@
|
||||
4767CDA620AB1F6200BD8166 /* LeftAlignedIconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4767CDA520AB1F6200BD8166 /* LeftAlignedIconButton.swift */; };
|
||||
4767CDA820AB401000BD8166 /* LinkTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4767CDA720AB401000BD8166 /* LinkTextView.swift */; };
|
||||
47699A0821F08E37009E6585 /* NSDate+TimeDistance.m in Sources */ = {isa = PBXBuildFile; fileRef = 47699A0721F08E37009E6585 /* NSDate+TimeDistance.m */; };
|
||||
477219052243E79500E5B227 /* DrivingOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477219042243E79500E5B227 /* DrivingOptionsViewController.swift */; };
|
||||
4788739220EE326500F6826B /* VerticallyAlignedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4788739120EE326400F6826B /* VerticallyAlignedButton.swift */; };
|
||||
479EE94A2292FB03009DEBA6 /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479EE9492292FB03009DEBA6 /* ActivityIndicator.swift */; };
|
||||
47A13CAD24BE9AA500027D4F /* DatePickerViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A13CAC24BE9AA500027D4F /* DatePickerViewRenderer.swift */; };
|
||||
@@ -240,7 +246,6 @@
|
||||
47CF2E6323BA0DD500D11C30 /* CopyLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF2E6223BA0DD500D11C30 /* CopyLabel.swift */; };
|
||||
47D48BF52432A7CA00FEFB1F /* ChartViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D48BF42432A7C900FEFB1F /* ChartViewRenderer.swift */; };
|
||||
47DF72B922520CE20004AB10 /* MWMRoutingOptions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 474902D9224A54EC008D71E0 /* MWMRoutingOptions.mm */; };
|
||||
47DF72BB225356BF0004AB10 /* DrivingOptions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47DF72BA225356BF0004AB10 /* DrivingOptions.storyboard */; };
|
||||
47E3C7252111E41B008B3B27 /* DimmedModalPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3C7242111E41B008B3B27 /* DimmedModalPresentationController.swift */; };
|
||||
47E3C7272111E5A8008B3B27 /* AlertPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3C7262111E5A8008B3B27 /* AlertPresentationController.swift */; };
|
||||
47E3C7292111E614008B3B27 /* FadeInAnimatedTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3C7282111E614008B3B27 /* FadeInAnimatedTransitioning.swift */; };
|
||||
@@ -478,7 +483,6 @@
|
||||
ED46DDE12D098A0C007CACD6 /* CoMapsWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = ED46DDCC2D098A0B007CACD6 /* CoMapsWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
ED5BAF4B2D688F5B0088D7B1 /* SearchOnMapHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5BAF4A2D688F5A0088D7B1 /* SearchOnMapHeaderView.swift */; };
|
||||
ED5E02142D8B17B600A5CC7B /* ModalPresentationStepsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5E02132D8B17B600A5CC7B /* ModalPresentationStepsController.swift */; };
|
||||
ED63CEB92BDF8F9D006155C4 /* SettingsTableViewiCloudSwitchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED63CEB62BDF8F9C006155C4 /* SettingsTableViewiCloudSwitchCell.swift */; };
|
||||
ED70D55C2D5396F300738C1E /* SearchResult.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED70D55A2D5396F300738C1E /* SearchResult.mm */; };
|
||||
ED70D5892D539A2500738C1E /* SearchOnMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED70D5872D539A2500738C1E /* SearchOnMapViewController.swift */; };
|
||||
ED70D58A2D539A2500738C1E /* SearchOnMapModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED70D5852D539A2500738C1E /* SearchOnMapModels.swift */; };
|
||||
@@ -499,7 +503,6 @@
|
||||
ED7CCC4F2C1362E300E2A737 /* FileType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED7CCC4E2C1362E300E2A737 /* FileType.swift */; };
|
||||
ED808D0F2C38407800D52585 /* CircleImageButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED808D0E2C38407800D52585 /* CircleImageButton.swift */; };
|
||||
ED810EC52D566E9B00ECDE2C /* SearchOnMapTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED810EC42D566E9B00ECDE2C /* SearchOnMapTests.swift */; };
|
||||
ED8270F02C2071A3005966DA /* SettingsTableViewDetailedSwitchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8270EF2C2071A3005966DA /* SettingsTableViewDetailedSwitchCell.swift */; };
|
||||
ED83880F2D54DEB3002A0536 /* UIImage+FilledWithColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED83880E2D54DEA4002A0536 /* UIImage+FilledWithColor.swift */; };
|
||||
ED8A91E02D759B50009E063B /* LocalizableTypes.strings in Resources */ = {isa = PBXBuildFile; fileRef = ED8A91DE2D759B50009E063B /* LocalizableTypes.strings */; };
|
||||
ED914AB22D35063A00973C45 /* TextColorStyleSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED914AB12D35063A00973C45 /* TextColorStyleSheet.swift */; };
|
||||
@@ -621,15 +624,6 @@
|
||||
F6E2FF331E097BA00083EBEC /* MWMSearchCommonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6E2FD2D1E097BA00083EBEC /* MWMSearchCommonCell.xib */; };
|
||||
F6E2FF361E097BA00083EBEC /* MWMSearchSuggestionCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD2F1E097BA00083EBEC /* MWMSearchSuggestionCell.mm */; };
|
||||
F6E2FF391E097BA00083EBEC /* MWMSearchSuggestionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6E2FD301E097BA00083EBEC /* MWMSearchSuggestionCell.xib */; };
|
||||
F6E2FF451E097BA00083EBEC /* SettingsTableViewLinkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD381E097BA00083EBEC /* SettingsTableViewLinkCell.swift */; };
|
||||
F6E2FF481E097BA00083EBEC /* SettingsTableViewSelectableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD391E097BA00083EBEC /* SettingsTableViewSelectableCell.swift */; };
|
||||
F6E2FF4B1E097BA00083EBEC /* SettingsTableViewSwitchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD3A1E097BA00083EBEC /* SettingsTableViewSwitchCell.swift */; };
|
||||
F6E2FF571E097BA00083EBEC /* MWMMobileInternetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD411E097BA00083EBEC /* MWMMobileInternetViewController.m */; };
|
||||
F6E2FF5A1E097BA00083EBEC /* MWMNightModeController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD431E097BA00083EBEC /* MWMNightModeController.m */; };
|
||||
F6E2FF601E097BA00083EBEC /* MWMSettingsViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD471E097BA00083EBEC /* MWMSettingsViewController.mm */; };
|
||||
F6E2FF631E097BA00083EBEC /* MWMTTSLanguageViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD491E097BA00083EBEC /* MWMTTSLanguageViewController.mm */; };
|
||||
F6E2FF661E097BA00083EBEC /* MWMTTSSettingsViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD4B1E097BA00083EBEC /* MWMTTSSettingsViewController.mm */; };
|
||||
F6E2FF691E097BA00083EBEC /* MWMUnitsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6E2FD4D1E097BA00083EBEC /* MWMUnitsController.mm */; };
|
||||
F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.m */; };
|
||||
F6FE3C3C1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */; };
|
||||
F6FEA82E1C58F108007223CC /* MWMButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F6FEA82C1C58E89B007223CC /* MWMButton.m */; };
|
||||
@@ -781,6 +775,15 @@
|
||||
272F1F3C2E0EE0C400FA52EF /* ProfileView.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
272F1F452E0EEF8B00FA52EF /* SafariView.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = SafariView.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
2765D1CD2E13F9BC0005CA2B /* BridgeControllers.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = BridgeControllers.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
279367552E1BE16300AA5C3D /* Settings.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
279367592E1BE17300AA5C3D /* SettingsView.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; name = SettingsView.swift; path = UI/Settings/SettingsView.swift; sourceTree = SOURCE_ROOT; tabWidth = 4; };
|
||||
27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = SettingsNavigationView.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = VoiceRoutingLanguage.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = DistanceUnit.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF18532E1DB62600CD41E2 /* MobileDataPolicy.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = MobileDataPolicy.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = PowerSavingMode.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF18572E1DB63900CD41E2 /* Appearance.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = AnnouncingSpeedTrapsWhileVoiceRouting.swift; sourceTree = "<group>"; tabWidth = 4; };
|
||||
28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = main.mm; sourceTree = "<group>"; };
|
||||
30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -842,7 +845,6 @@
|
||||
340B33C41F3AEFDB00A8C1B4 /* MWMRouter+RouteManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MWMRouter+RouteManager.mm"; sourceTree = "<group>"; };
|
||||
340E1EE51E2F614400CE49BF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
340E1EE61E2F614400CE49BF /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
|
||||
340E1EE81E2F614400CE49BF /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = "<group>"; };
|
||||
340E1EE91E2F614400CE49BF /* Storyboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Storyboard.swift; sourceTree = "<group>"; };
|
||||
340E1EEA1E2F614400CE49BF /* Welcome.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Welcome.storyboard; sourceTree = "<group>"; };
|
||||
3426DEB11F45AE2800D1C43C /* MWMRouterType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMRouterType.h; sourceTree = "<group>"; };
|
||||
@@ -1102,8 +1104,6 @@
|
||||
34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrafficButtonArea.swift; sourceTree = "<group>"; };
|
||||
3D15ACED2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMObjectsCategorySelectorDataSource.mm; sourceTree = "<group>"; };
|
||||
3D15ACEF2155118800F725D5 /* MWMObjectsCategorySelectorDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMObjectsCategorySelectorDataSource.h; sourceTree = "<group>"; };
|
||||
3DEE1AE921F72CD300054A91 /* MWMPowerManagmentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMPowerManagmentViewController.h; sourceTree = "<group>"; };
|
||||
3DEE1AEA21F72CD300054A91 /* MWMPowerManagmentViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPowerManagmentViewController.mm; sourceTree = "<group>"; };
|
||||
408645FB21495EB1000A4A1D /* categories_cuisines.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = categories_cuisines.txt; path = ../../data/categories_cuisines.txt; sourceTree = "<group>"; };
|
||||
44360A0C2A7D34990016F412 /* TransportRuler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransportRuler.swift; sourceTree = "<group>"; };
|
||||
44360A102A7D35440016F412 /* TransportRuler.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TransportRuler.xib; sourceTree = "<group>"; };
|
||||
@@ -1152,7 +1152,6 @@
|
||||
4767CDA720AB401000BD8166 /* LinkTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkTextView.swift; sourceTree = "<group>"; };
|
||||
47699A0621F08E37009E6585 /* NSDate+TimeDistance.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDate+TimeDistance.h"; sourceTree = "<group>"; };
|
||||
47699A0721F08E37009E6585 /* NSDate+TimeDistance.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+TimeDistance.m"; sourceTree = "<group>"; };
|
||||
477219042243E79500E5B227 /* DrivingOptionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrivingOptionsViewController.swift; sourceTree = "<group>"; };
|
||||
4788739120EE326400F6826B /* VerticallyAlignedButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticallyAlignedButton.swift; sourceTree = "<group>"; };
|
||||
479EE9492292FB03009DEBA6 /* ActivityIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ActivityIndicator.swift; path = CustomViews/ActivityIndicator.swift; sourceTree = "<group>"; };
|
||||
47A13CAC24BE9AA500027D4F /* DatePickerViewRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerViewRenderer.swift; sourceTree = "<group>"; };
|
||||
@@ -1179,7 +1178,6 @@
|
||||
47CA68FB250F99E500671019 /* BookmarksListCellStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksListCellStrategy.swift; sourceTree = "<group>"; };
|
||||
47CF2E6223BA0DD500D11C30 /* CopyLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyLabel.swift; sourceTree = "<group>"; };
|
||||
47D48BF42432A7C900FEFB1F /* ChartViewRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartViewRenderer.swift; sourceTree = "<group>"; };
|
||||
47DF72BA225356BF0004AB10 /* DrivingOptions.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = DrivingOptions.storyboard; sourceTree = "<group>"; };
|
||||
47E3C7242111E41B008B3B27 /* DimmedModalPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DimmedModalPresentationController.swift; sourceTree = "<group>"; };
|
||||
47E3C7262111E5A8008B3B27 /* AlertPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertPresentationController.swift; sourceTree = "<group>"; };
|
||||
47E3C7282111E614008B3B27 /* FadeInAnimatedTransitioning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FadeInAnimatedTransitioning.swift; sourceTree = "<group>"; };
|
||||
@@ -1441,7 +1439,6 @@
|
||||
ED49D76F2CF0E3A8004AF27E /* TrackRecordingButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingButtonViewController.swift; sourceTree = "<group>"; };
|
||||
ED5BAF4A2D688F5A0088D7B1 /* SearchOnMapHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchOnMapHeaderView.swift; sourceTree = "<group>"; };
|
||||
ED5E02132D8B17B600A5CC7B /* ModalPresentationStepsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalPresentationStepsController.swift; sourceTree = "<group>"; };
|
||||
ED63CEB62BDF8F9C006155C4 /* SettingsTableViewiCloudSwitchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewiCloudSwitchCell.swift; sourceTree = "<group>"; };
|
||||
ED70D5582D5396F300738C1E /* SearchItemType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SearchItemType.h; sourceTree = "<group>"; };
|
||||
ED70D5592D5396F300738C1E /* SearchResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SearchResult.h; sourceTree = "<group>"; };
|
||||
ED70D55A2D5396F300738C1E /* SearchResult.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SearchResult.mm; sourceTree = "<group>"; };
|
||||
@@ -1465,7 +1462,6 @@
|
||||
ED7CCC4E2C1362E300E2A737 /* FileType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileType.swift; sourceTree = "<group>"; };
|
||||
ED808D0E2C38407800D52585 /* CircleImageButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleImageButton.swift; sourceTree = "<group>"; };
|
||||
ED810EC42D566E9B00ECDE2C /* SearchOnMapTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchOnMapTests.swift; sourceTree = "<group>"; };
|
||||
ED8270EF2C2071A3005966DA /* SettingsTableViewDetailedSwitchCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTableViewDetailedSwitchCell.swift; sourceTree = "<group>"; };
|
||||
ED83880E2D54DEA4002A0536 /* UIImage+FilledWithColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+FilledWithColor.swift"; sourceTree = "<group>"; };
|
||||
ED8A91DF2D759B50009E063B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/LocalizableTypes.strings; sourceTree = "<group>"; };
|
||||
ED8A91E32D759B59009E063B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LocalizableTypes.strings; sourceTree = "<group>"; };
|
||||
@@ -1707,21 +1703,6 @@
|
||||
F6E2FD2E1E097BA00083EBEC /* MWMSearchSuggestionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSearchSuggestionCell.h; sourceTree = "<group>"; };
|
||||
F6E2FD2F1E097BA00083EBEC /* MWMSearchSuggestionCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchSuggestionCell.mm; sourceTree = "<group>"; };
|
||||
F6E2FD301E097BA00083EBEC /* MWMSearchSuggestionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMSearchSuggestionCell.xib; sourceTree = "<group>"; };
|
||||
F6E2FD381E097BA00083EBEC /* SettingsTableViewLinkCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewLinkCell.swift; sourceTree = "<group>"; };
|
||||
F6E2FD391E097BA00083EBEC /* SettingsTableViewSelectableCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewSelectableCell.swift; sourceTree = "<group>"; };
|
||||
F6E2FD3A1E097BA00083EBEC /* SettingsTableViewSwitchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewSwitchCell.swift; sourceTree = "<group>"; };
|
||||
F6E2FD401E097BA00083EBEC /* MWMMobileInternetViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMobileInternetViewController.h; sourceTree = "<group>"; };
|
||||
F6E2FD411E097BA00083EBEC /* MWMMobileInternetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWMMobileInternetViewController.m; sourceTree = "<group>"; };
|
||||
F6E2FD421E097BA00083EBEC /* MWMNightModeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMNightModeController.h; sourceTree = "<group>"; };
|
||||
F6E2FD431E097BA00083EBEC /* MWMNightModeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWMNightModeController.m; sourceTree = "<group>"; };
|
||||
F6E2FD461E097BA00083EBEC /* MWMSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSettingsViewController.h; sourceTree = "<group>"; };
|
||||
F6E2FD471E097BA00083EBEC /* MWMSettingsViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSettingsViewController.mm; sourceTree = "<group>"; };
|
||||
F6E2FD481E097BA00083EBEC /* MWMTTSLanguageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMTTSLanguageViewController.h; sourceTree = "<group>"; };
|
||||
F6E2FD491E097BA00083EBEC /* MWMTTSLanguageViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMTTSLanguageViewController.mm; sourceTree = "<group>"; };
|
||||
F6E2FD4A1E097BA00083EBEC /* MWMTTSSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMTTSSettingsViewController.h; sourceTree = "<group>"; };
|
||||
F6E2FD4B1E097BA00083EBEC /* MWMTTSSettingsViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMTTSSettingsViewController.mm; sourceTree = "<group>"; };
|
||||
F6E2FD4C1E097BA00083EBEC /* MWMUnitsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMUnitsController.h; sourceTree = "<group>"; };
|
||||
F6E2FD4D1E097BA00083EBEC /* MWMUnitsController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMUnitsController.mm; sourceTree = "<group>"; };
|
||||
F6FE3C361CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMPlaceDoesntExistAlert.h; sourceTree = "<group>"; };
|
||||
F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MWMPlaceDoesntExistAlert.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMPlaceDoesntExistAlert.xib; sourceTree = "<group>"; };
|
||||
@@ -1958,11 +1939,26 @@
|
||||
2749E5C32E17F736006E73EC /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
279367552E1BE16300AA5C3D /* Settings.swift */,
|
||||
27AF185B2E1DB64B00CD41E2 /* Settings Types */,
|
||||
270C9C252E16AB6300ABA688 /* Profile.swift */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
27AF185B2E1DB64B00CD41E2 /* Settings Types */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */,
|
||||
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */,
|
||||
27AF18532E1DB62600CD41E2 /* MobileDataPolicy.swift */,
|
||||
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */,
|
||||
27AF18572E1DB63900CD41E2 /* Appearance.swift */,
|
||||
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */,
|
||||
);
|
||||
path = "Settings Types";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97314FDCFA39411CA2CEA /* Maps */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -2232,7 +2228,6 @@
|
||||
children = (
|
||||
340E1EE51E2F614400CE49BF /* LaunchScreen.storyboard */,
|
||||
340E1EE61E2F614400CE49BF /* Main.storyboard */,
|
||||
340E1EE81E2F614400CE49BF /* Settings.storyboard */,
|
||||
340E1EE91E2F614400CE49BF /* Storyboard.swift */,
|
||||
CDB4D4D6222D248900104869 /* CarPlayStoryboard.storyboard */,
|
||||
340E1EEA1E2F614400CE49BF /* Welcome.storyboard */,
|
||||
@@ -3940,40 +3935,13 @@
|
||||
F6E2FD361E097BA00083EBEC /* Settings */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
279367592E1BE17300AA5C3D /* SettingsView.swift */,
|
||||
27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */,
|
||||
272F1F352E0EE00B00FA52EF /* Profile */,
|
||||
F6E2FD371E097BA00083EBEC /* Cells */,
|
||||
F6E2FD401E097BA00083EBEC /* MWMMobileInternetViewController.h */,
|
||||
F6E2FD411E097BA00083EBEC /* MWMMobileInternetViewController.m */,
|
||||
F6E2FD421E097BA00083EBEC /* MWMNightModeController.h */,
|
||||
F6E2FD431E097BA00083EBEC /* MWMNightModeController.m */,
|
||||
F6E2FD461E097BA00083EBEC /* MWMSettingsViewController.h */,
|
||||
F6E2FD471E097BA00083EBEC /* MWMSettingsViewController.mm */,
|
||||
F6E2FD481E097BA00083EBEC /* MWMTTSLanguageViewController.h */,
|
||||
F6E2FD491E097BA00083EBEC /* MWMTTSLanguageViewController.mm */,
|
||||
F6E2FD4A1E097BA00083EBEC /* MWMTTSSettingsViewController.h */,
|
||||
F6E2FD4B1E097BA00083EBEC /* MWMTTSSettingsViewController.mm */,
|
||||
F6E2FD4C1E097BA00083EBEC /* MWMUnitsController.h */,
|
||||
F6E2FD4D1E097BA00083EBEC /* MWMUnitsController.mm */,
|
||||
3DEE1AE921F72CD300054A91 /* MWMPowerManagmentViewController.h */,
|
||||
3DEE1AEA21F72CD300054A91 /* MWMPowerManagmentViewController.mm */,
|
||||
477219042243E79500E5B227 /* DrivingOptionsViewController.swift */,
|
||||
47DF72BA225356BF0004AB10 /* DrivingOptions.storyboard */,
|
||||
);
|
||||
path = Settings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F6E2FD371E097BA00083EBEC /* Cells */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ED63CEB62BDF8F9C006155C4 /* SettingsTableViewiCloudSwitchCell.swift */,
|
||||
F6E2FD381E097BA00083EBEC /* SettingsTableViewLinkCell.swift */,
|
||||
F6E2FD391E097BA00083EBEC /* SettingsTableViewSelectableCell.swift */,
|
||||
F6E2FD3A1E097BA00083EBEC /* SettingsTableViewSwitchCell.swift */,
|
||||
ED8270EF2C2071A3005966DA /* SettingsTableViewDetailedSwitchCell.swift */,
|
||||
);
|
||||
path = Cells;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F6FE3C351CC50FDF00A73196 /* PlaceDoesntExist */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -4341,7 +4309,6 @@
|
||||
470E1675252AD7F2002D201A /* BookmarksListInfoViewController.xib in Resources */,
|
||||
F6E2FE7F1E097BA00083EBEC /* MWMPlacePageOpeningHoursCell.xib in Resources */,
|
||||
34AB66711FC5AA330078E451 /* TransportTransitTrain.xib in Resources */,
|
||||
47DF72BB225356BF0004AB10 /* DrivingOptions.storyboard in Resources */,
|
||||
F6E2FE851E097BA00083EBEC /* MWMPlacePageOpeningHoursWeekDayView.xib in Resources */,
|
||||
6741A9601BF340DE002C974C /* MWMRoutingDisclaimerAlert.xib in Resources */,
|
||||
B3E3B4FD20D463B700DA8C13 /* BMCCategoriesHeader.xib in Resources */,
|
||||
@@ -4377,7 +4344,6 @@
|
||||
6741A94D1BF340DE002C974C /* resources-xxhdpi_light in Resources */,
|
||||
3404F49E2028A2430090E401 /* BMCActionsCell.xib in Resources */,
|
||||
6741A9551BF340DE002C974C /* resources-xxhdpi_dark in Resources */,
|
||||
340E1EF81E2F614400CE49BF /* Settings.storyboard in Resources */,
|
||||
44360A112A7D35440016F412 /* TransportRuler.xib in Resources */,
|
||||
6741A9421BF340DE002C974C /* sound-strings in Resources */,
|
||||
F69018BD1E9F7CB600B3C10B /* MWMAutoupdateController.xib in Resources */,
|
||||
@@ -4422,7 +4388,6 @@
|
||||
34D3B04F1E38A20C004100F9 /* Bundle+Init.swift in Sources */,
|
||||
34AB666E1FC5AA330078E451 /* TransportTransitStepsCollectionView.swift in Sources */,
|
||||
993DF11E23F6BDB100AC231A /* UITextViewRenderer.swift in Sources */,
|
||||
F6E2FF5A1E097BA00083EBEC /* MWMNightModeController.m in Sources */,
|
||||
471A7BB8247FE3C300A0D4C1 /* URL+Query.swift in Sources */,
|
||||
47F86D0120C93D8D00FEE291 /* TabViewController.swift in Sources */,
|
||||
99536113235DB86C008B218F /* InsetsLabel.swift in Sources */,
|
||||
@@ -4515,7 +4480,6 @@
|
||||
340475621E081A4600C92850 /* MWMNetworkPolicy+UI.m in Sources */,
|
||||
F6E2FEE51E097BA00083EBEC /* MWMSearchNoResults.m in Sources */,
|
||||
ED5E02142D8B17B600A5CC7B /* ModalPresentationStepsController.swift in Sources */,
|
||||
F6E2FF631E097BA00083EBEC /* MWMTTSLanguageViewController.mm in Sources */,
|
||||
4715273524907F8200E91BBA /* BookmarkColorViewController.swift in Sources */,
|
||||
47E3C7292111E614008B3B27 /* FadeInAnimatedTransitioning.swift in Sources */,
|
||||
ED79A5D42BDF8D6100952D1F /* MetadataItem.swift in Sources */,
|
||||
@@ -4560,6 +4524,7 @@
|
||||
B33D21AF20DAF9F000BAD749 /* Toast.swift in Sources */,
|
||||
6741A9D41BF340DE002C974C /* MWMAlertViewController.mm in Sources */,
|
||||
34D3B0181E389D05004100F9 /* EditorAdditionalNamePlaceholderTableViewCell.swift in Sources */,
|
||||
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */,
|
||||
993DF12223F6BDB100AC231A /* UINavigationItemRenderer.swift in Sources */,
|
||||
993DF12B23F6BDB100AC231A /* StyleManager.swift in Sources */,
|
||||
ED43B8BD2C12063500D07BAA /* DocumentPicker.swift in Sources */,
|
||||
@@ -4567,6 +4532,7 @@
|
||||
47B9065521C7FA400079C85E /* NSString+MD5.m in Sources */,
|
||||
ED5BAF4B2D688F5B0088D7B1 /* SearchOnMapHeaderView.swift in Sources */,
|
||||
CDB4D5022231412900104869 /* SettingsTemplateBuilder.swift in Sources */,
|
||||
27AF18522E1DB62000CD41E2 /* DistanceUnit.swift in Sources */,
|
||||
993DF10A23F6BDB100AC231A /* UISwitchRenderer.swift in Sources */,
|
||||
99C9642C2428C0F700E41723 /* PlacePageHeaderBuilder.swift in Sources */,
|
||||
99C9642B2428C0F700E41723 /* PlacePageHeaderViewController.swift in Sources */,
|
||||
@@ -4578,10 +4544,7 @@
|
||||
49AB95982CB2FE5300468EA2 /* UIButton+ImagePadding.swift in Sources */,
|
||||
99A906E523F6F7030005872B /* ActionBarViewController.swift in Sources */,
|
||||
47B9065421C7FA400079C85E /* UIImageView+WebImage.m in Sources */,
|
||||
F6E2FF481E097BA00083EBEC /* SettingsTableViewSelectableCell.swift in Sources */,
|
||||
ED63CEB92BDF8F9D006155C4 /* SettingsTableViewiCloudSwitchCell.swift in Sources */,
|
||||
47CA68D4250043C000671019 /* BookmarksListPresenter.swift in Sources */,
|
||||
F6E2FF451E097BA00083EBEC /* SettingsTableViewLinkCell.swift in Sources */,
|
||||
34C9BD0A1C6DBCDA000DC38D /* MWMNavigationController.m in Sources */,
|
||||
ED1080A72B791CFE0023F27E /* SocialMediaCollectionViewHeader.swift in Sources */,
|
||||
F6E2FE311E097BA00083EBEC /* MWMStreetEditorViewController.mm in Sources */,
|
||||
@@ -4640,6 +4603,7 @@
|
||||
CDCA2745223FCFD200167D87 /* SearchResultInfo.swift in Sources */,
|
||||
349A13831DEC138C00C7DB60 /* MWMMobileInternetAlert.m in Sources */,
|
||||
6741A9EC1BF340DE002C974C /* MWMCircularProgress.m in Sources */,
|
||||
27AF184C2E1D5B2D00CD41E2 /* SettingsNavigationView.swift in Sources */,
|
||||
993DF11923F6BDB100AC231A /* UITextFieldRenderer.swift in Sources */,
|
||||
272F1F462E0EEF9400FA52EF /* SafariView.swift in Sources */,
|
||||
340475591E081A4600C92850 /* WebViewController.m in Sources */,
|
||||
@@ -4651,12 +4615,13 @@
|
||||
99F3EB1123F418C900C713F8 /* PlacePageBuilder.swift in Sources */,
|
||||
4735008A23A83CF700661A95 /* DownloadedMapsDataSource.swift in Sources */,
|
||||
CD9AD96F2281DF3600EC174A /* CategoryInfo.swift in Sources */,
|
||||
3DEE1AEB21F72CD300054A91 /* MWMPowerManagmentViewController.mm in Sources */,
|
||||
34AB66771FC5AA330078E451 /* TransportRoutePreviewStatus.swift in Sources */,
|
||||
34D3AFEA1E378AF1004100F9 /* UINib+Init.swift in Sources */,
|
||||
34AB663E1FC5AA330078E451 /* RouteManagerTransitioning.swift in Sources */,
|
||||
993DF0CB23F6BD0600AC231A /* ElevationDetailsRouter.swift in Sources */,
|
||||
EDB71D8C2D8474A0004A6A7F /* CornerRadius.swift in Sources */,
|
||||
27AF18502E1DB61600CD41E2 /* VoiceRoutingLanguage.swift in Sources */,
|
||||
279367562E1BE16300AA5C3D /* Settings.swift in Sources */,
|
||||
47CA68FC250F99E500671019 /* BookmarksListCellStrategy.swift in Sources */,
|
||||
34AB662F1FC5AA330078E451 /* RouteManagerPresentationController.swift in Sources */,
|
||||
993F5508237C622700545511 /* DeepLinkRouteStrategyAdapter.mm in Sources */,
|
||||
@@ -4691,15 +4656,12 @@
|
||||
993DF12D23F6BDB100AC231A /* GlobalStyleSheet.swift in Sources */,
|
||||
F6E2FF361E097BA00083EBEC /* MWMSearchSuggestionCell.mm in Sources */,
|
||||
3472B5CF200F4A2B00DC6CD5 /* BackgroundFetchTask.swift in Sources */,
|
||||
477219052243E79500E5B227 /* DrivingOptionsViewController.swift in Sources */,
|
||||
CDB4D4E4222E8FF600104869 /* CarPlayService.swift in Sources */,
|
||||
F6E2FF661E097BA00083EBEC /* MWMTTSSettingsViewController.mm in Sources */,
|
||||
3454D7C21E07F045004AF2AD /* NSString+Categories.m in Sources */,
|
||||
ED2D74662D1435A600660FBF /* LiveActivityManager.swift in Sources */,
|
||||
34E7761F1F14DB48003040B3 /* PlacePageArea.swift in Sources */,
|
||||
ED79A5D82BDF8D6100952D1F /* LocalDirectoryMonitor.swift in Sources */,
|
||||
EDC4E34B2C5D1BEF009286A2 /* RecentlyDeletedCategoriesViewController.swift in Sources */,
|
||||
ED8270F02C2071A3005966DA /* SettingsTableViewDetailedSwitchCell.swift in Sources */,
|
||||
4728F69322CF89A400E00028 /* GradientView.swift in Sources */,
|
||||
F6381BF61CD12045004CA943 /* LocaleTranslator.mm in Sources */,
|
||||
9917D17F2397B1D600A7E06E /* IPadModalPresentationController.swift in Sources */,
|
||||
@@ -4716,12 +4678,13 @@
|
||||
F6E2FE821E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.m in Sources */,
|
||||
F6E2FD6B1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.m in Sources */,
|
||||
CDCA27842245090900167D87 /* ListenerContainer.swift in Sources */,
|
||||
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */,
|
||||
47E3C7252111E41B008B3B27 /* DimmedModalPresentationController.swift in Sources */,
|
||||
3472B5CB200F43EF00DC6CD5 /* BackgroundFetchScheduler.swift in Sources */,
|
||||
34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */,
|
||||
993DF10D23F6BDB100AC231A /* UIPageControlRenderer.swift in Sources */,
|
||||
FA8E808925F412E2002A1434 /* FirstSession.mm in Sources */,
|
||||
F6E2FF691E097BA00083EBEC /* MWMUnitsController.mm in Sources */,
|
||||
2793675A2E1BE17300AA5C3D /* SettingsView.swift in Sources */,
|
||||
6741AA031BF340DE002C974C /* MWMActivityViewController.mm in Sources */,
|
||||
ED808D0F2C38407800D52585 /* CircleImageButton.swift in Sources */,
|
||||
CDCA27382237F1BD00167D87 /* BookmarkInfo.swift in Sources */,
|
||||
@@ -4754,6 +4717,7 @@
|
||||
ED70D5922D539A2500738C1E /* PlaceholderView.swift in Sources */,
|
||||
ED70D5932D539A2500738C1E /* SearchOnMapManager.swift in Sources */,
|
||||
3454D7BC1E07F045004AF2AD /* CLLocation+Mercator.mm in Sources */,
|
||||
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */,
|
||||
47E3C7272111E5A8008B3B27 /* AlertPresentationController.swift in Sources */,
|
||||
CDCA27812243F59800167D87 /* CarPlayRouter.swift in Sources */,
|
||||
34F5E0D41E3F254800B1C415 /* UIView+Hierarchy.swift in Sources */,
|
||||
@@ -4764,7 +4728,6 @@
|
||||
47CA68D12500435E00671019 /* BookmarksListViewController.swift in Sources */,
|
||||
34AB66321FC5AA330078E451 /* RouteManagerHeaderView.swift in Sources */,
|
||||
347040301EA6470700038379 /* BorderedButton.swift in Sources */,
|
||||
F6E2FF4B1E097BA00083EBEC /* SettingsTableViewSwitchCell.swift in Sources */,
|
||||
993DF12623F6BDB100AC231A /* SwizzleStyle.m in Sources */,
|
||||
993DF10E23F6BDB100AC231A /* UIButtonRenderer.swift in Sources */,
|
||||
99514BBB23E82B450085D3A7 /* ElevationProfileBuilder.swift in Sources */,
|
||||
@@ -4842,7 +4805,6 @@
|
||||
47E3C7312111F4C2008B3B27 /* CoverVerticalPresentationAnimator.swift in Sources */,
|
||||
99E2B0122368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift in Sources */,
|
||||
F6D67CDC2062B9C00032FD38 /* BCCreateCategoryAlert.swift in Sources */,
|
||||
F6E2FF601E097BA00083EBEC /* MWMSettingsViewController.mm in Sources */,
|
||||
F6E2FE2B1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.m in Sources */,
|
||||
34AB66891FC5AA330078E451 /* NavigationControlView.swift in Sources */,
|
||||
479EE94A2292FB03009DEBA6 /* ActivityIndicator.swift in Sources */,
|
||||
@@ -4861,7 +4823,6 @@
|
||||
34AB39C21D2BD8310021857D /* MWMStopButton.m in Sources */,
|
||||
3488B01A1E9D0B230068AFD8 /* UIColor+Modifications.swift in Sources */,
|
||||
6741AA281BF340DE002C974C /* MWMAlert.mm in Sources */,
|
||||
F6E2FF571E097BA00083EBEC /* MWMMobileInternetViewController.m in Sources */,
|
||||
993DF11323F6BDB100AC231A /* UITableViewRenderer.swift in Sources */,
|
||||
34AB66261FC5AA330078E451 /* RouteManagerDimView.swift in Sources */,
|
||||
EDFDFB4A2B722A310013A44C /* SocialMediaCollectionViewCell.swift in Sources */,
|
||||
@@ -4872,6 +4833,7 @@
|
||||
CDCA278622451F5000167D87 /* RouteInfo.swift in Sources */,
|
||||
3467CEB6202C6FA900D3C670 /* BMCNotificationsCell.swift in Sources */,
|
||||
337F98B221D3BAE600C8AC27 /* SearchCategoriesViewController.swift in Sources */,
|
||||
27AF18542E1DB62700CD41E2 /* MobileDataPolicy.swift in Sources */,
|
||||
F6E2FE0A1E097BA00083EBEC /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */,
|
||||
3454D7DA1E07F045004AF2AD /* UILabel+RuntimeAttributes.m in Sources */,
|
||||
34AB66531FC5AA330078E451 /* MWMiPadRoutePreview.m in Sources */,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import Network
|
||||
import OSMEditor
|
||||
|
||||
|
||||
/// The OpenStreetMap profile
|
||||
@objc class Profile: NSObject {
|
||||
// MARK: Properties
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
extension Settings {
|
||||
/// The announcing of speed traps for voice guidance during routing
|
||||
@objc enum AnnouncingSpeedTrapsWhileVoiceRouting: Int, Codable, CaseIterable, Identifiable {
|
||||
case always = 1
|
||||
case onlyWhenTooFast = 2
|
||||
case never = 0
|
||||
|
||||
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: Self { self }
|
||||
|
||||
|
||||
/// The description text
|
||||
var description: String {
|
||||
switch self {
|
||||
case .always:
|
||||
return String(localized: "pref_tts_speedcams_always")
|
||||
case .onlyWhenTooFast:
|
||||
return String(localized: "pref_tts_speedcams_auto")
|
||||
case .never:
|
||||
return String(localized: "pref_tts_speedcams_never")
|
||||
default:
|
||||
return String()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
iphone/Maps/Model/Settings Types/Appearance.swift
Normal file
30
iphone/Maps/Model/Settings Types/Appearance.swift
Normal file
@@ -0,0 +1,30 @@
|
||||
extension Settings {
|
||||
/// The visual appeareance
|
||||
@objc enum Appearance: Int, Codable, CaseIterable, Identifiable {
|
||||
case auto = 1
|
||||
case light = 2
|
||||
case dark = 3
|
||||
|
||||
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: Self { self }
|
||||
|
||||
|
||||
/// The description text
|
||||
var description: String {
|
||||
switch self {
|
||||
case .auto:
|
||||
return String(localized: "auto")
|
||||
case .light:
|
||||
return String(localized: "pref_appearance_light")
|
||||
case .dark:
|
||||
return String(localized: "pref_appearance_dark")
|
||||
default:
|
||||
return String()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
iphone/Maps/Model/Settings Types/DistanceUnit.swift
Normal file
27
iphone/Maps/Model/Settings Types/DistanceUnit.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
extension Settings {
|
||||
/// The unit system used for distances
|
||||
@objc enum DistanceUnit: Int, Codable, CaseIterable, Identifiable {
|
||||
case metric = 0
|
||||
case imperial = 1
|
||||
|
||||
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: Self { self }
|
||||
|
||||
|
||||
/// The description text
|
||||
var description: String {
|
||||
switch self {
|
||||
case .metric:
|
||||
return String(localized: "kilometres")
|
||||
case .imperial:
|
||||
return String(localized: "miles")
|
||||
default:
|
||||
return String()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
iphone/Maps/Model/Settings Types/MobileDataPolicy.swift
Normal file
30
iphone/Maps/Model/Settings Types/MobileDataPolicy.swift
Normal file
@@ -0,0 +1,30 @@
|
||||
extension Settings {
|
||||
/// The mobile data policy
|
||||
@objc enum MobileDataPolicy: Int, Codable, CaseIterable, Identifiable {
|
||||
case always = 1
|
||||
case ask = 2
|
||||
case never = 0
|
||||
|
||||
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: Self { self }
|
||||
|
||||
|
||||
/// The description text
|
||||
var description: String {
|
||||
switch self {
|
||||
case .always:
|
||||
return String(localized: "mobile_data_option_always")
|
||||
case .ask:
|
||||
return String(localized: "mobile_data_option_ask")
|
||||
case .never:
|
||||
return String(localized: "mobile_data_option_never")
|
||||
default:
|
||||
return String()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
iphone/Maps/Model/Settings Types/PowerSavingMode.swift
Normal file
30
iphone/Maps/Model/Settings Types/PowerSavingMode.swift
Normal file
@@ -0,0 +1,30 @@
|
||||
extension Settings {
|
||||
/// The power saving mode
|
||||
@objc enum PowerSavingMode: Int, Codable, CaseIterable, Identifiable {
|
||||
case auto = 1
|
||||
case maximum = 2
|
||||
case never = 0
|
||||
|
||||
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: Self { self }
|
||||
|
||||
|
||||
/// The description text
|
||||
var description: String {
|
||||
switch self {
|
||||
case .auto:
|
||||
return String(localized: "power_managment_setting_auto")
|
||||
case .maximum:
|
||||
return String(localized: "power_managment_setting_manual_max")
|
||||
case .never:
|
||||
return String(localized: "power_managment_setting_never")
|
||||
default:
|
||||
return String()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
31
iphone/Maps/Model/Settings Types/VoiceRoutingLanguage.swift
Normal file
31
iphone/Maps/Model/Settings Types/VoiceRoutingLanguage.swift
Normal file
@@ -0,0 +1,31 @@
|
||||
extension Settings {
|
||||
/// A language used for voice guidance during routing
|
||||
struct VoiceRoutingLanguage: Codable, Identifiable {
|
||||
// MARK: Properties
|
||||
|
||||
/// The id
|
||||
var id: String
|
||||
|
||||
|
||||
/// The localized name
|
||||
var localizedName: String
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - Comparable
|
||||
extension Settings.VoiceRoutingLanguage: Equatable {
|
||||
static func == (lhs: Settings.VoiceRoutingLanguage, rhs: Settings.VoiceRoutingLanguage) -> Bool {
|
||||
return lhs.id == rhs.id
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: - Comparable
|
||||
extension Settings.VoiceRoutingLanguage: Comparable {
|
||||
static func < (lhs: Settings.VoiceRoutingLanguage, rhs: Settings.VoiceRoutingLanguage) -> Bool {
|
||||
return lhs.localizedName.localizedCaseInsensitiveCompare(rhs.localizedName) == .orderedAscending
|
||||
}
|
||||
}
|
||||
362
iphone/Maps/Model/Settings.swift
Normal file
362
iphone/Maps/Model/Settings.swift
Normal file
@@ -0,0 +1,362 @@
|
||||
import Combine
|
||||
|
||||
/// The settings
|
||||
@objc class Settings: NSObject {
|
||||
// MARK: Properties
|
||||
|
||||
/// Key for storing if the sync beta alert has been shown in the user defaults
|
||||
static private let userDefaultsKeyHasShownSyncBetaAlert = "kUDDidShowICloudSynchronizationEnablingAlert"
|
||||
|
||||
|
||||
/// The current distance unit
|
||||
static var distanceUnit: DistanceUnit {
|
||||
get {
|
||||
if SettingsBridge.measurementUnits() == .imperial {
|
||||
return .imperial
|
||||
} else {
|
||||
return .metric
|
||||
}
|
||||
}
|
||||
set {
|
||||
if newValue == .imperial {
|
||||
SettingsBridge.setMeasurementUnits(.imperial)
|
||||
} else {
|
||||
SettingsBridge.setMeasurementUnits(.metric)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If zoom buttons should be displayed
|
||||
@objc static var hasZoomButtons: Bool {
|
||||
get {
|
||||
return SettingsBridge.zoomButtonsEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setZoomButtonsEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If 3D buildings should be displayed
|
||||
@objc static var has3dBuildings: Bool {
|
||||
get {
|
||||
return SettingsBridge.buildings3dViewEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setBuildings3dViewEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If automatic map downloads should be enabled
|
||||
@objc static var hasAutomaticDownload: Bool {
|
||||
get {
|
||||
return SettingsBridge.autoDownloadEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setAutoDownloadEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The current mobile data policy
|
||||
@objc static var mobileDataPolicy: MobileDataPolicy {
|
||||
get {
|
||||
let networkPolicyPermission = NetworkPolicy.shared().permission
|
||||
if networkPolicyPermission == .always {
|
||||
return .always
|
||||
} else if networkPolicyPermission == .never {
|
||||
return .never
|
||||
} else {
|
||||
return .ask
|
||||
}
|
||||
}
|
||||
set {
|
||||
if newValue == .always {
|
||||
NetworkPolicy.shared().permission = .always
|
||||
} else if newValue == .never {
|
||||
NetworkPolicy.shared().permission = .never
|
||||
} else {
|
||||
NetworkPolicy.shared().permission = .ask
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The current power saving mode
|
||||
@objc static var powerSavingMode: PowerSavingMode {
|
||||
get {
|
||||
return PowerSavingMode(rawValue: SettingsBridge.powerManagement()) ?? .never
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setPowerManagement(newValue.rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If an increased font size should be used for map labels
|
||||
@objc static var hasIncreasedFontsize: Bool {
|
||||
get {
|
||||
return SettingsBridge.largeFontSize()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setLargeFontSize(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If names should be transliterated to Latin
|
||||
@objc static var shouldTransliterateToLatin: Bool {
|
||||
get {
|
||||
return SettingsBridge.transliteration()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setTransliteration(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If the compass should be calibrated
|
||||
@objc static var shouldCalibrateCompass: Bool {
|
||||
get {
|
||||
return SettingsBridge.compassCalibrationEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setCompassCalibrationEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The current appearance
|
||||
@objc static var appearance: Appearance {
|
||||
get {
|
||||
let theme = SettingsBridge.theme()
|
||||
if theme == MWMTheme.day {
|
||||
return .light
|
||||
} else if theme == MWMTheme.night {
|
||||
return .dark
|
||||
} else {
|
||||
return .auto
|
||||
}
|
||||
}
|
||||
set {
|
||||
if newValue == .light {
|
||||
SettingsBridge.setTheme(MWMTheme.day)
|
||||
} else if newValue == .dark {
|
||||
SettingsBridge.setTheme(MWMTheme.night)
|
||||
} else {
|
||||
SettingsBridge.setTheme(MWMTheme.auto)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If the bookmarks should be synced via iCloud
|
||||
@objc static var shouldSync: Bool {
|
||||
get {
|
||||
return SettingsBridge.iCLoudSynchronizationEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setICLoudSynchronizationEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If the sync beta alert has been shown
|
||||
@objc static var hasShownSyncBetaAlert: Bool {
|
||||
get {
|
||||
return UserDefaults.standard.bool(forKey: userDefaultsKeyHasShownSyncBetaAlert)
|
||||
}
|
||||
set {
|
||||
UserDefaults.standard.set(newValue, forKey: userDefaultsKeyHasShownSyncBetaAlert)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The publisher for state changes of the iCloud sync
|
||||
static var syncStatePublisher: AnyPublisher<SynchronizationManagerState, Never> {
|
||||
iCloudSynchronizaionManager.shared.notifyObservers()
|
||||
return iCloudSynchronizaionManager.shared.statePublisher
|
||||
}
|
||||
|
||||
|
||||
/// If our custom logging is enabled
|
||||
@objc static var isLogging: Bool {
|
||||
get {
|
||||
return SettingsBridge.isFileLoggingEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setFileLoggingEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The formatter for the size of the log file
|
||||
@objc static var logSizeFormatter: MeasurementFormatter {
|
||||
let measurementFormatter = MeasurementFormatter()
|
||||
measurementFormatter.unitStyle = .medium
|
||||
measurementFormatter.unitOptions = .naturalScale
|
||||
return measurementFormatter
|
||||
}
|
||||
|
||||
|
||||
/// The size of the log file in bytes
|
||||
@objc static var logSize: Measurement<UnitInformationStorage> {
|
||||
return Measurement<UnitInformationStorage>(value: Double(SettingsBridge.logFileSize()), unit: .bytes)
|
||||
}
|
||||
|
||||
|
||||
/// If the perspective view should be used during routing
|
||||
@objc static var hasPerspectiveViewWhileRouting: Bool {
|
||||
get {
|
||||
return SettingsBridge.perspectiveViewEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setPerspectiveViewEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If auto zoom should be used during routing
|
||||
@objc static var hasAutoZoomWhileRouting: Bool {
|
||||
get {
|
||||
return SettingsBridge.autoZoomEnabled()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setAutoZoomEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If voice guidance should be provided during routing
|
||||
@objc static var shouldProvideVoiceRouting: Bool {
|
||||
get {
|
||||
return MWMTextToSpeech.isTTSEnabled()
|
||||
}
|
||||
set {
|
||||
MWMTextToSpeech.setTTSEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The available languages for voice guidance during routing
|
||||
static var availableLanguagesForVoiceRouting: [VoiceRoutingLanguage] {
|
||||
return MWMTextToSpeech.availableLanguages().map { language in
|
||||
return VoiceRoutingLanguage(id: language.key, localizedName: language.value)
|
||||
}.sorted()
|
||||
}
|
||||
|
||||
|
||||
/// The current language for voice guidance during routing
|
||||
@objc static var languageForVoiceRouting: VoiceRoutingLanguage.ID {
|
||||
get {
|
||||
return MWMTextToSpeech.selectedLanguage()
|
||||
}
|
||||
set {
|
||||
MWMTextToSpeech.tts().setNotificationsLocale(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If street names should be announced in the voice guidance during routing
|
||||
@objc static var shouldAnnounceStreetnamesWhileVoiceRouting: Bool {
|
||||
get {
|
||||
return MWMTextToSpeech.isStreetNamesTTSEnabled()
|
||||
}
|
||||
set {
|
||||
MWMTextToSpeech.setStreetNamesTTSEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// The current announcement of speed traps in the voice guidance during routing
|
||||
@objc static var announcingSpeedTrapsWhileVoiceRouting: AnnouncingSpeedTrapsWhileVoiceRouting {
|
||||
get {
|
||||
return AnnouncingSpeedTrapsWhileVoiceRouting(rawValue: MWMTextToSpeech.speedCameraMode()) ?? .never
|
||||
}
|
||||
set {
|
||||
MWMTextToSpeech.setSpeedCameraMode(newValue.rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If toll roads should be avoided during routing
|
||||
@objc static var shouldAvoidTollRoadsWhileRouting: Bool {
|
||||
get {
|
||||
return RoutingOptions().avoidToll
|
||||
}
|
||||
set {
|
||||
RoutingOptions().avoidToll = newValue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If unpaved roads should be avoided during routing
|
||||
@objc static var shouldAvoidUnpavedRoadsWhileRouting: Bool {
|
||||
get {
|
||||
return RoutingOptions().avoidDirty
|
||||
}
|
||||
set {
|
||||
RoutingOptions().avoidDirty = newValue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If ferries should be avoided during routing
|
||||
@objc static var shouldAvoidFerriesWhileRouting: Bool {
|
||||
get {
|
||||
return RoutingOptions().avoidFerry
|
||||
}
|
||||
set {
|
||||
RoutingOptions().avoidFerry = newValue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If motorways should be avoided during routing
|
||||
@objc static var shouldAvoidMotorwaysWhileRouting: Bool {
|
||||
get {
|
||||
return RoutingOptions().avoidMotorway
|
||||
}
|
||||
set {
|
||||
RoutingOptions().avoidMotorway = newValue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// MARK: Methods
|
||||
|
||||
/// Create a bookmarks backup before enabling the sync beta
|
||||
/// - Parameter completionHandler: A compeltion handler, which returns if a backup has been created
|
||||
static func createBookmarksBackupBecauseOfSyncBeta(completionHandler: ((_ hasCreatedBackup: Bool) -> Void)?) {
|
||||
BookmarksManager.shared().shareAllCategories { status, url in
|
||||
switch status {
|
||||
case .success:
|
||||
let window = (UIApplication.shared.connectedScenes.filter { $0.activationState == .foregroundActive }.first(where: { $0 is UIWindowScene }) as? UIWindowScene)?.keyWindow
|
||||
if let viewController = window?.rootViewController?.presentedViewController {
|
||||
let shareController = ActivityViewController.share(for: url, message: String(localized: "share_bookmarks_email_body")) { _, _, _, _ in
|
||||
completionHandler?(true)
|
||||
}
|
||||
shareController.present(inParentViewController: viewController, anchorView: nil)
|
||||
}
|
||||
case .emptyCategory:
|
||||
Toast.show(withText: String(localized: "bookmarks_error_title_share_empty"))
|
||||
completionHandler?(false)
|
||||
case .archiveError:
|
||||
Toast.show(withText: String(localized: "dialog_routing_system_error"))
|
||||
completionHandler?(false)
|
||||
case .fileError:
|
||||
Toast.show(withText: String(localized: "dialog_routing_system_error"))
|
||||
completionHandler?(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Play a test audio snippet for voice guidance during routing
|
||||
@objc static func playVoiceRoutingTest() {
|
||||
MWMTextToSpeech.playTest()
|
||||
}
|
||||
}
|
||||
@@ -48,7 +48,7 @@ extension BottomMenuInteractor: BottomMenuInteractorProtocol {
|
||||
|
||||
func donate() {
|
||||
close()
|
||||
guard var url = Settings.donateUrl() else { return }
|
||||
guard var url = SettingsBridge.donateUrl() else { return }
|
||||
if url == "https://www.comaps.app/donate/" {
|
||||
url = L("translated_om_site_url") + "donate/"
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ class BottomMenuPresenter: NSObject {
|
||||
self.view = view
|
||||
self.interactor = interactor
|
||||
self.sections = sections
|
||||
let disableDonate = Settings.donateUrl() == nil
|
||||
let disableDonate = SettingsBridge.donateUrl() == nil
|
||||
self.menuCells = CellType.allCases.filter { disableDonate ? $0 != .donate : true }
|
||||
self.cellToHighlight = Self.getCellToHighlight()
|
||||
super.init()
|
||||
@@ -112,7 +112,7 @@ extension BottomMenuPresenter {
|
||||
title: L("download_maps"),
|
||||
badgeCount: MapsAppDelegate.theApp().badgeNumber())
|
||||
case .donate:
|
||||
cell.configure(imageName: Settings.isNY() ? "ic_christmas_tree" : "ic_menu_donate",
|
||||
cell.configure(imageName: SettingsBridge.isNY() ? "ic_christmas_tree" : "ic_menu_donate",
|
||||
title: L("donate"))
|
||||
case .settings:
|
||||
cell.configure(imageName: "ic_menu_settings",
|
||||
|
||||
@@ -36,7 +36,7 @@ class BottomTabBarViewController: UIViewController {
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
if Settings.isNY() {
|
||||
if SettingsBridge.isNY() {
|
||||
helpButton.setTitle("🎄", for: .normal)
|
||||
helpButton.setImage(nil, for: .normal)
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ private extension AboutController {
|
||||
func setupDonation() {
|
||||
donationView.donateButtonDidTapHandler = { [weak self] in
|
||||
guard let self else { return }
|
||||
self.openUrl(self.isDonateEnabled() ? Settings.donateUrl() : L("translated_om_site_url") + "support-us/")
|
||||
self.openUrl(self.isDonateEnabled() ? SettingsBridge.donateUrl() : L("translated_om_site_url") + "support-us/")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ private extension AboutController {
|
||||
}
|
||||
|
||||
func isDonateEnabled() -> Bool {
|
||||
return Settings.donateUrl() != nil
|
||||
return SettingsBridge.donateUrl() != nil
|
||||
}
|
||||
|
||||
func buildInfoTableViewData() -> [AboutInfoTableViewCellModel] {
|
||||
|
||||
@@ -15,7 +15,7 @@ final class ElevationProfileFormatter {
|
||||
private let altitudeStep: CGFloat
|
||||
private let units: Units
|
||||
|
||||
init(units: Units = Settings.measurementUnits()) {
|
||||
init(units: Units = SettingsBridge.measurementUnits()) {
|
||||
self.units = units
|
||||
self.distanceFormatter = DistanceFormatter.self
|
||||
self.altitudeFormatter = AltitudeFormatter.self
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
class SettingsTableViewDetailedSwitchCell: SettingsTableViewSwitchCell {
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
styleDetail()
|
||||
}
|
||||
|
||||
@objc
|
||||
func setDetail(_ text: String?) {
|
||||
detailTextLabel?.text = text
|
||||
setNeedsLayout()
|
||||
}
|
||||
|
||||
private func styleDetail() {
|
||||
detailTextLabel?.setFontStyleAndApply(.regular12, color: .blackSecondary)
|
||||
detailTextLabel?.numberOfLines = 0
|
||||
detailTextLabel?.lineBreakMode = .byWordWrapping
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
@objc
|
||||
final class SettingsTableViewLinkCell: MWMTableViewCell {
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
setupCell()
|
||||
}
|
||||
|
||||
private func setupCell() {
|
||||
setStyle(.background)
|
||||
textLabel?.setFontStyle(.regular17, color: .blackPrimary)
|
||||
textLabel?.numberOfLines = 0
|
||||
textLabel?.lineBreakMode = .byWordWrapping
|
||||
detailTextLabel?.setFontStyle(.regular17, color: .blackSecondary)
|
||||
}
|
||||
|
||||
@objc func config(title: String, info: String?) {
|
||||
textLabel?.text = title
|
||||
detailTextLabel?.text = info
|
||||
detailTextLabel?.isHidden = info == nil
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
@objc
|
||||
final class SettingsTableViewSelectableCell: MWMTableViewCell {
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
setupCell()
|
||||
}
|
||||
|
||||
override func applyTheme() {
|
||||
super.applyTheme()
|
||||
textLabel?.applyTheme()
|
||||
}
|
||||
|
||||
private func setupCell() {
|
||||
setStyle(.background)
|
||||
textLabel?.setFontStyle(.regular17, color: .blackPrimary)
|
||||
textLabel?.numberOfLines = 0
|
||||
textLabel?.lineBreakMode = .byWordWrapping
|
||||
}
|
||||
|
||||
@objc func config(title: String) {
|
||||
textLabel?.text = title
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
@objc
|
||||
protocol SettingsTableViewSwitchCellDelegate {
|
||||
func switchCell(_ cell: SettingsTableViewSwitchCell, didChangeValue value: Bool)
|
||||
}
|
||||
|
||||
@objc
|
||||
class SettingsTableViewSwitchCell: MWMTableViewCell {
|
||||
|
||||
let switchButton = UISwitch()
|
||||
|
||||
@IBOutlet weak var delegate: SettingsTableViewSwitchCellDelegate?
|
||||
|
||||
@objc
|
||||
var isEnabled = true {
|
||||
didSet {
|
||||
styleTitle()
|
||||
switchButton.isUserInteractionEnabled = isEnabled
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
var isOn: Bool {
|
||||
get { return switchButton.isOn }
|
||||
set { switchButton.isOn = newValue }
|
||||
}
|
||||
|
||||
@objc
|
||||
func setOn(_ isOn: Bool, animated: Bool) {
|
||||
switchButton.setOn(isOn, animated: animated)
|
||||
}
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
setupCell()
|
||||
}
|
||||
|
||||
@objc
|
||||
func config(delegate: SettingsTableViewSwitchCellDelegate, title: String, isOn: Bool) {
|
||||
backgroundColor = UIColor.white()
|
||||
|
||||
self.delegate = delegate
|
||||
|
||||
self.textLabel?.text = title
|
||||
styleTitle()
|
||||
|
||||
switchButton.isOn = isOn
|
||||
}
|
||||
|
||||
private func setupCell() {
|
||||
setStyle(.background)
|
||||
styleTitle()
|
||||
textLabel?.numberOfLines = 0
|
||||
textLabel?.lineBreakMode = .byWordWrapping
|
||||
|
||||
switchButton.onTintColor = UIColor.linkBlue()
|
||||
switchButton.addTarget(self, action: #selector(switchChanged), for: .valueChanged)
|
||||
accessoryView = switchButton
|
||||
}
|
||||
|
||||
@objc
|
||||
private func switchChanged() {
|
||||
delegate?.switchCell(self, didChangeValue: switchButton.isOn)
|
||||
}
|
||||
|
||||
private func styleTitle() {
|
||||
textLabel?.setFontStyleAndApply(.regular17, color: isEnabled ? .blackPrimary : .blackSecondary)
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
final class SettingsTableViewiCloudSwitchCell: SettingsTableViewDetailedSwitchCell {
|
||||
|
||||
@objc
|
||||
func updateWithSynchronizationState(_ state: SynchronizationManagerState) {
|
||||
guard state.isAvailable else {
|
||||
accessoryView = nil
|
||||
accessoryType = .detailButton
|
||||
return
|
||||
}
|
||||
accessoryView = switchButton
|
||||
detailTextLabel?.text = state.error?.localizedDescription
|
||||
setOn(state.isOn, animated: true)
|
||||
setNeedsLayout()
|
||||
}
|
||||
}
|
||||
@@ -1,138 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="8YO-Xx-cAh">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Driving Options View Controller-->
|
||||
<scene sceneID="BWZ-fX-cej">
|
||||
<objects>
|
||||
<tableViewController storyboardIdentifier="DrivingOptionsViewController" id="8YO-Xx-cAh" userLabel="Driving Options View Controller" customClass="DrivingOptionsViewController" customModule="CoMaps" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" id="Q8U-4Z-lWC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<sections>
|
||||
<tableViewSection id="qNN-Uw-84i">
|
||||
<cells>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="AO5-68-HQQ" style="IBUITableViewCellStyleDefault" id="YrA-ve-xPG" customClass="SettingsTableViewSwitchCell" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="18" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="YrA-ve-xPG" id="gKI-YE-akp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="AO5-68-HQQ">
|
||||
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="0.0"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="avoid_tolls"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="8YO-Xx-cAh" id="w8e-bi-R4K"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="Hy1-A1-IL1" style="IBUITableViewCellStyleDefault" id="Edm-gG-iZL" customClass="SettingsTableViewSwitchCell" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="61.5" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Edm-gG-iZL" id="mIt-Ku-xiU">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Hy1-A1-IL1">
|
||||
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="0.0"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="avoid_unpaved"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="8YO-Xx-cAh" id="d0x-IA-p32"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="US8-Te-0z2" style="IBUITableViewCellStyleDefault" id="ZqG-Fn-9Da" customClass="SettingsTableViewSwitchCell" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="105" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ZqG-Fn-9Da" id="7US-xU-xAU">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="US8-Te-0z2">
|
||||
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="0.0"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="avoid_ferry"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="8YO-Xx-cAh" id="SKD-CC-bJO"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="4wZ-U1-Rre" style="IBUITableViewCellStyleDefault" id="EZ7-Gy-8aA" customClass="SettingsTableViewSwitchCell" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="148.5" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="EZ7-Gy-8aA" id="6ee-yF-kGr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="4wZ-U1-Rre">
|
||||
<rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="0.0"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="avoid_motorways"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="8YO-Xx-cAh" id="bcu-c0-4xR"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
</cells>
|
||||
</tableViewSection>
|
||||
</sections>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="8YO-Xx-cAh" id="3Lz-g5-LiH"/>
|
||||
<outlet property="delegate" destination="8YO-Xx-cAh" id="Iup-r1-FJ7"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<connections>
|
||||
<outlet property="ferryCrossingsCell" destination="ZqG-Fn-9Da" id="td7-b1-uPz"/>
|
||||
<outlet property="motorwaysCell" destination="EZ7-Gy-8aA" id="g4i-mp-cFD"/>
|
||||
<outlet property="tollRoadsCell" destination="YrA-ve-xPG" id="s0c-im-mto"/>
|
||||
<outlet property="unpavedRoadsCell" destination="Edm-gG-iZL" id="X5s-mB-VZ6"/>
|
||||
</connections>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="XZd-C9-klr" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="100" y="100"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
class DrivingOptionsViewController: MWMTableViewController {
|
||||
let options = RoutingOptions()
|
||||
@IBOutlet var tollRoadsCell: SettingsTableViewSwitchCell!
|
||||
@IBOutlet var unpavedRoadsCell: SettingsTableViewSwitchCell!
|
||||
@IBOutlet var ferryCrossingsCell: SettingsTableViewSwitchCell!
|
||||
@IBOutlet var motorwaysCell: SettingsTableViewSwitchCell!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
title = L("driving_options_title")
|
||||
tollRoadsCell.isOn = options.avoidToll
|
||||
unpavedRoadsCell.isOn = options.avoidDirty
|
||||
ferryCrossingsCell.isOn = options.avoidFerry
|
||||
motorwaysCell.isOn = options.avoidMotorway
|
||||
}
|
||||
}
|
||||
|
||||
extension DrivingOptionsViewController: SettingsTableViewSwitchCellDelegate {
|
||||
func switchCell(_ cell: SettingsTableViewSwitchCell, didChangeValue value: Bool) {
|
||||
if cell == tollRoadsCell {
|
||||
options.avoidToll = cell.isOn
|
||||
} else if cell == unpavedRoadsCell {
|
||||
options.avoidDirty = cell.isOn
|
||||
} else if cell == ferryCrossingsCell {
|
||||
options.avoidFerry = cell.isOn
|
||||
} else if cell == motorwaysCell {
|
||||
options.avoidMotorway = cell.isOn
|
||||
}
|
||||
|
||||
options.save()
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMMobileInternetViewController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,68 +0,0 @@
|
||||
#import "MWMMobileInternetViewController.h"
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
@interface MWMMobileInternetViewController ()
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * always;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * ask;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * never;
|
||||
@property(weak, nonatomic) SettingsTableViewSelectableCell * selected;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMMobileInternetViewController
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"mobile_data");
|
||||
|
||||
SettingsTableViewSelectableCell * selected;
|
||||
switch ([MWMNetworkPolicy sharedPolicy].permission) {
|
||||
case MWMNetworkPolicyPermissionAlways:
|
||||
selected = self.always;
|
||||
break;
|
||||
case MWMNetworkPolicyPermissionNever:
|
||||
selected = self.never;
|
||||
break;
|
||||
case MWMNetworkPolicyPermissionToday:
|
||||
case MWMNetworkPolicyPermissionNotToday:
|
||||
case MWMNetworkPolicyPermissionAsk:
|
||||
selected = self.ask;
|
||||
break;
|
||||
}
|
||||
selected.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
self.selected = selected;
|
||||
}
|
||||
|
||||
- (void)setSelected:(SettingsTableViewSelectableCell *)selected
|
||||
{
|
||||
if ([_selected isEqual:selected])
|
||||
return;
|
||||
|
||||
_selected = selected;
|
||||
if ([selected isEqual:self.always])
|
||||
[MWMNetworkPolicy sharedPolicy].permission = MWMNetworkPolicyPermissionAlways;
|
||||
else if ([selected isEqual:self.ask])
|
||||
[MWMNetworkPolicy sharedPolicy].permission = MWMNetworkPolicyPermissionAsk;
|
||||
else if ([selected isEqual:self.never])
|
||||
[MWMNetworkPolicy sharedPolicy].permission = MWMNetworkPolicyPermissionNever;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
SettingsTableViewSelectableCell * selected = self.selected;
|
||||
selected.accessoryType = UITableViewCellAccessoryNone;
|
||||
selected = [tableView cellForRowAtIndexPath:indexPath];
|
||||
selected.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
selected.selected = NO;
|
||||
self.selected = selected;
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
|
||||
{
|
||||
return L(@"mobile_data_description");
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMNightModeController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,58 +0,0 @@
|
||||
#import "MWMNightModeController.h"
|
||||
#import "MWMSettings.h"
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
@interface MWMNightModeController ()
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * autoSwitch;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * on;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * off;
|
||||
@property(weak, nonatomic) SettingsTableViewSelectableCell * selectedCell;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMNightModeController
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"pref_appearance_title");
|
||||
SettingsTableViewSelectableCell * selectedCell = nil;
|
||||
switch ([MWMSettings theme])
|
||||
{
|
||||
case MWMThemeVehicleDay: NSAssert(false, @"Invalid case");
|
||||
case MWMThemeDay: selectedCell = self.off; break;
|
||||
case MWMThemeVehicleNight: NSAssert(false, @"Invalid case");
|
||||
case MWMThemeNight: selectedCell = self.on; break;
|
||||
case MWMThemeAuto: selectedCell = self.autoSwitch; break;
|
||||
}
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
self.selectedCell = selectedCell;
|
||||
}
|
||||
|
||||
- (void)setSelectedCell:(SettingsTableViewSelectableCell *)cell
|
||||
{
|
||||
if ([_selectedCell isEqual:cell])
|
||||
return;
|
||||
|
||||
_selectedCell = cell;
|
||||
if ([cell isEqual:self.on])
|
||||
[MWMSettings setTheme:MWMThemeNight];
|
||||
else if ([cell isEqual:self.off])
|
||||
[MWMSettings setTheme:MWMThemeDay];
|
||||
else if ([cell isEqual:self.autoSwitch])
|
||||
[MWMSettings setTheme:MWMThemeAuto];
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
SettingsTableViewSelectableCell * selectedCell = self.selectedCell;
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryNone;
|
||||
selectedCell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
selectedCell.selected = NO;
|
||||
self.selectedCell = selectedCell;
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMPowerManagmentViewController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,66 +0,0 @@
|
||||
#import "MWMPowerManagmentViewController.h"
|
||||
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
#include <CoreApi/Framework.h>
|
||||
|
||||
using namespace power_management;
|
||||
|
||||
@interface MWMPowerManagmentViewController ()
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * never;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * manualMax;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * automatic;
|
||||
@property(weak, nonatomic) SettingsTableViewSelectableCell * selectedCell;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMPowerManagmentViewController
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"power_managment_title");
|
||||
|
||||
SettingsTableViewSelectableCell * selectedCell;
|
||||
switch (GetFramework().GetPowerManager().GetScheme())
|
||||
{
|
||||
case Scheme::None: break;
|
||||
case Scheme::Normal: selectedCell = self.never; break;
|
||||
case Scheme::EconomyMedium: break;
|
||||
case Scheme::EconomyMaximum: selectedCell = self.manualMax; break;
|
||||
case Scheme::Auto: selectedCell = self.automatic; break;
|
||||
}
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
self.selectedCell = selectedCell;
|
||||
}
|
||||
|
||||
- (void)setSelectedCell:(SettingsTableViewSelectableCell *)selectedCell
|
||||
{
|
||||
if (self.selectedCell == selectedCell)
|
||||
return;
|
||||
|
||||
_selectedCell.accessoryType = UITableViewCellAccessoryNone;
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
|
||||
_selectedCell = selectedCell;
|
||||
Scheme scheme = Scheme::Auto;
|
||||
if ([selectedCell isEqual:self.never])
|
||||
scheme = Scheme::Normal;
|
||||
else if ([selectedCell isEqual:self.manualMax])
|
||||
scheme = Scheme::EconomyMaximum;
|
||||
|
||||
GetFramework().GetPowerManager().SetScheme(scheme);
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
self.selectedCell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
|
||||
{
|
||||
return L(@"power_managment_description");
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMSettingsViewController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,394 +0,0 @@
|
||||
#import "MWMSettingsViewController.h"
|
||||
#import "MWMTextToSpeech+CPP.h"
|
||||
#import "SwiftBridge.h"
|
||||
#import "MWMActivityViewController.h"
|
||||
|
||||
#import <CoreApi/Framework.h>
|
||||
|
||||
#include "map/gps_tracker.hpp"
|
||||
|
||||
using namespace power_management;
|
||||
|
||||
static NSString * const kUDDidShowICloudSynchronizationEnablingAlert = @"kUDDidShowICloudSynchronizationEnablingAlert";
|
||||
|
||||
@interface MWMSettingsViewController ()<SettingsTableViewSwitchCellDelegate>
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *profileCell;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *unitsCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *zoomButtonsCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *is3dCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *autoDownloadCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *mobileInternetCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *powerManagementCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *fontScaleCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *transliterationCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *compassCalibrationCell;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *nightModeCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *perspectiveViewCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSwitchCell *autoZoomCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *voiceInstructionsCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewLinkCell *drivingOptionsCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewiCloudSwitchCell *iCloudSynchronizationCell;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewDetailedSwitchCell *enableLoggingCell;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMSettingsViewController
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"settings");
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
[self configCells];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
[self highlightFeatureIfNeeded];
|
||||
}
|
||||
|
||||
- (void)highlightFeatureIfNeeded {
|
||||
UITableViewCell * cell = nil;
|
||||
DeepLinkInAppFeatureHighlightData * featureToHighlight = [DeepLinkHandler.shared getInAppFeatureHighlightData];
|
||||
if (!featureToHighlight || featureToHighlight.urlType != DeeplinkUrlTypeSettings)
|
||||
return;
|
||||
switch (featureToHighlight.feature) {
|
||||
case InAppFeatureHighlightTypeNone:
|
||||
case InAppFeatureHighlightTypeTrackRecorder:
|
||||
// Еhere is no options for the track recorder yet.
|
||||
break;
|
||||
case InAppFeatureHighlightTypeICloud:
|
||||
cell = self.iCloudSynchronizationCell;
|
||||
break;
|
||||
}
|
||||
NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
|
||||
if (!cell || !indexPath)
|
||||
return;
|
||||
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
|
||||
[cell highlight];
|
||||
}
|
||||
|
||||
- (void)configCells {
|
||||
[self configProfileSection];
|
||||
[self configCommonSection];
|
||||
[self configNavigationSection];
|
||||
}
|
||||
|
||||
- (void)configProfileSection {
|
||||
NSString *userName = Profile.name;
|
||||
if (userName == nil) {
|
||||
userName = @"";
|
||||
}
|
||||
[self.profileCell configWithTitle:L(@"osm_profile") info:userName.length != 0 ? userName : @""];
|
||||
}
|
||||
|
||||
- (void)configCommonSection {
|
||||
NSString * units = nil;
|
||||
switch ([MWMSettings measurementUnits]) {
|
||||
case MWMUnitsMetric:
|
||||
units = L(@"kilometres");
|
||||
break;
|
||||
case MWMUnitsImperial:
|
||||
units = L(@"miles");
|
||||
break;
|
||||
}
|
||||
[self.unitsCell configWithTitle:L(@"measurement_units") info:units];
|
||||
|
||||
[self.zoomButtonsCell configWithDelegate:self title:L(@"pref_zoom_title") isOn:[MWMSettings zoomButtonsEnabled]];
|
||||
|
||||
bool on = true, _ = true;
|
||||
GetFramework().Load3dMode(_, on);
|
||||
if (GetFramework().GetPowerManager().GetScheme() == Scheme::EconomyMaximum)
|
||||
{
|
||||
self.is3dCell.isEnabled = false;
|
||||
[self.is3dCell configWithDelegate:self title:L(@"pref_map_3d_buildings_title") isOn:false];
|
||||
UITapGestureRecognizer * tapRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self
|
||||
action:@selector(show3dBuildingsAlert:)];
|
||||
|
||||
self.is3dCell.gestureRecognizers = @[tapRecogniser];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.is3dCell.isEnabled = true;
|
||||
[self.is3dCell configWithDelegate:self title:L(@"pref_map_3d_buildings_title") isOn:on];
|
||||
self.is3dCell.gestureRecognizers = nil;
|
||||
}
|
||||
|
||||
[self.autoDownloadCell configWithDelegate:self
|
||||
title:L(@"autodownload")
|
||||
isOn:[MWMSettings autoDownloadEnabled]];
|
||||
|
||||
NSString * mobileInternet = nil;
|
||||
switch ([MWMNetworkPolicy sharedPolicy].permission) {
|
||||
case MWMNetworkPolicyPermissionAlways:
|
||||
mobileInternet = L(@"mobile_data_option_always");
|
||||
break;
|
||||
case MWMNetworkPolicyPermissionNever:
|
||||
mobileInternet = L(@"mobile_data_option_never");
|
||||
break;
|
||||
case MWMNetworkPolicyPermissionToday:
|
||||
case MWMNetworkPolicyPermissionNotToday:
|
||||
case MWMNetworkPolicyPermissionAsk:
|
||||
mobileInternet = L(@"mobile_data_option_ask");
|
||||
break;
|
||||
}
|
||||
[self.mobileInternetCell configWithTitle:L(@"mobile_data") info:mobileInternet];
|
||||
|
||||
NSString * powerManagement = nil;
|
||||
switch (GetFramework().GetPowerManager().GetScheme()) {
|
||||
case Scheme::None:
|
||||
break;
|
||||
case Scheme::Normal:
|
||||
powerManagement = L(@"power_managment_setting_never");
|
||||
break;
|
||||
case Scheme::EconomyMedium:
|
||||
break;
|
||||
case Scheme::EconomyMaximum:
|
||||
powerManagement = L(@"power_managment_setting_manual_max");
|
||||
break;
|
||||
case Scheme::Auto:
|
||||
powerManagement = L(@"power_managment_setting_auto");
|
||||
break;
|
||||
}
|
||||
[self.powerManagementCell configWithTitle:L(@"power_managment_title") info:powerManagement];
|
||||
|
||||
[self.fontScaleCell configWithDelegate:self title:L(@"big_font") isOn:[MWMSettings largeFontSize]];
|
||||
|
||||
[self.transliterationCell configWithDelegate:self
|
||||
title:L(@"transliteration_title")
|
||||
isOn:[MWMSettings transliteration]];
|
||||
|
||||
[self.compassCalibrationCell configWithDelegate:self
|
||||
title:L(@"pref_calibration_title")
|
||||
isOn:[MWMSettings compassCalibrationEnabled]];
|
||||
|
||||
NSString * nightMode = nil;
|
||||
switch ([MWMSettings theme]) {
|
||||
case MWMThemeVehicleDay:
|
||||
NSAssert(false, @"Invalid case");
|
||||
case MWMThemeDay:
|
||||
nightMode = L(@"pref_appearance_light");
|
||||
break;
|
||||
case MWMThemeVehicleNight:
|
||||
NSAssert(false, @"Invalid case");
|
||||
case MWMThemeNight:
|
||||
nightMode = L(@"pref_appearance_dark");
|
||||
break;
|
||||
case MWMThemeAuto:
|
||||
nightMode = L(@"auto");
|
||||
break;
|
||||
}
|
||||
[self.nightModeCell configWithTitle:L(@"pref_appearance_title") info:nightMode];
|
||||
|
||||
[self.iCloudSynchronizationCell configWithDelegate:self
|
||||
title:@"iCloud Synchronization (Beta)"
|
||||
isOn:[MWMSettings iCLoudSynchronizationEnabled]];
|
||||
|
||||
__weak __typeof(self) weakSelf = self;
|
||||
[iCloudSynchronizaionManager.shared addObserver:self synchronizationStateDidChangeHandler:^(SynchronizationManagerState * state) {
|
||||
__strong auto strongSelf = weakSelf;
|
||||
[strongSelf.iCloudSynchronizationCell updateWithSynchronizationState:state];
|
||||
}];
|
||||
|
||||
[self.enableLoggingCell configWithDelegate:self title:L(@"enable_logging") isOn:MWMSettings.isFileLoggingEnabled];
|
||||
[self updateLogFileSize];
|
||||
}
|
||||
|
||||
- (void)updateLogFileSize {
|
||||
uint64_t logFileSize = [Logger getLogFileSize];
|
||||
NSString * detailString = logFileSize == 0 ? nil : [NSString stringWithFormat:L(@"log_file_size"), formattedSize(logFileSize)];
|
||||
[self.enableLoggingCell setDetail:detailString];
|
||||
}
|
||||
|
||||
- (void)show3dBuildingsAlert:(UITapGestureRecognizer *)recognizer {
|
||||
UIAlertController * alert =
|
||||
[UIAlertController alertControllerWithTitle:L(@"pref_map_3d_buildings_title")
|
||||
message:L(@"pref_map_3d_buildings_disabled_summary")
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
UIAlertAction * okButton = [UIAlertAction actionWithTitle:@"OK"
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:nil];
|
||||
[alert addAction:okButton];
|
||||
|
||||
[self presentViewController:alert animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)configNavigationSection {
|
||||
bool _ = true, on = true;
|
||||
auto &f = GetFramework();
|
||||
f.Load3dMode(on, _);
|
||||
[self.perspectiveViewCell configWithDelegate:self title:L(@"pref_map_3d_title") isOn:on];
|
||||
|
||||
[self.autoZoomCell configWithDelegate:self title:L(@"pref_map_auto_zoom") isOn:GetFramework().LoadAutoZoom()];
|
||||
|
||||
NSString * ttsEnabledString = [MWMTextToSpeech isTTSEnabled] ? L(@"on") : L(@"off");
|
||||
[self.voiceInstructionsCell configWithTitle:L(@"pref_tts_enable_title") info:ttsEnabledString];
|
||||
[self.drivingOptionsCell configWithTitle:L(@"driving_options_title") info:@""];
|
||||
}
|
||||
|
||||
- (void)showICloudSynchronizationEnablingAlert:(void (^)(BOOL))isEnabled {
|
||||
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:L(@"enable_icloud_synchronization_title")
|
||||
message:L(@"enable_icloud_synchronization_message")
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction * enableButton = [UIAlertAction actionWithTitle:L(@"enable")
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
[self setICloudSynchronizationEnablingAlertIsShown];
|
||||
isEnabled(YES);
|
||||
}];
|
||||
UIAlertAction * backupButton = [UIAlertAction actionWithTitle:L(@"backup")
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
[MWMBookmarksManager.sharedManager shareAllCategoriesWithCompletion:^(MWMBookmarksShareStatus status, NSURL * _Nonnull url) {
|
||||
switch (status) {
|
||||
case MWMBookmarksShareStatusSuccess: {
|
||||
MWMActivityViewController * shareController = [MWMActivityViewController shareControllerForURL:url message:L(@"share_bookmarks_email_body") completionHandler:^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
|
||||
[self setICloudSynchronizationEnablingAlertIsShown];
|
||||
isEnabled(completed);
|
||||
}];
|
||||
[shareController presentInParentViewController:self anchorView:self.iCloudSynchronizationCell];
|
||||
break;
|
||||
}
|
||||
case MWMBookmarksShareStatusEmptyCategory:
|
||||
[Toast showWithText:L(@"bookmarks_error_title_share_empty")];
|
||||
isEnabled(NO);
|
||||
break;
|
||||
case MWMBookmarksShareStatusArchiveError:
|
||||
case MWMBookmarksShareStatusFileError:
|
||||
[Toast showWithText:L(@"dialog_routing_system_error")];
|
||||
isEnabled(NO);
|
||||
break;
|
||||
}
|
||||
}];
|
||||
}];
|
||||
UIAlertAction * cancelButton = [UIAlertAction actionWithTitle:L(@"cancel")
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:^(UIAlertAction * action) {
|
||||
isEnabled(NO);
|
||||
}];
|
||||
|
||||
[alertController addAction:cancelButton];
|
||||
if (![MWMBookmarksManager.sharedManager areAllCategoriesEmpty])
|
||||
[alertController addAction:backupButton];
|
||||
[alertController addAction:enableButton];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)setICloudSynchronizationEnablingAlertIsShown {
|
||||
[NSUserDefaults.standardUserDefaults setBool:YES forKey:kUDDidShowICloudSynchronizationEnablingAlert];
|
||||
}
|
||||
|
||||
- (void)showICloudIsDisabledAlert {
|
||||
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:L(@"icloud_disabled_title")
|
||||
message:L(@"icloud_disabled_message")
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction * okButton = [UIAlertAction actionWithTitle:L(@"ok")
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:nil];
|
||||
[alertController addAction:okButton];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
#pragma mark - SettingsTableViewSwitchCellDelegate
|
||||
|
||||
- (void)switchCell:(SettingsTableViewSwitchCell *)cell didChangeValue:(BOOL)value {
|
||||
if (cell == self.zoomButtonsCell) {
|
||||
[MWMSettings setZoomButtonsEnabled:value];
|
||||
} else if (cell == self.is3dCell) {
|
||||
auto &f = GetFramework();
|
||||
bool _ = true, is3dBuildings = true;
|
||||
f.Load3dMode(_, is3dBuildings);
|
||||
is3dBuildings = static_cast<bool>(value);
|
||||
f.Save3dMode(_, is3dBuildings);
|
||||
f.Allow3dMode(_, is3dBuildings);
|
||||
} else if (cell == self.autoDownloadCell) {
|
||||
[MWMSettings setAutoDownloadEnabled:value];
|
||||
} else if (cell == self.fontScaleCell) {
|
||||
[MWMSettings setLargeFontSize:value];
|
||||
} else if (cell == self.transliterationCell) {
|
||||
[MWMSettings setTransliteration:value];
|
||||
} else if (cell == self.compassCalibrationCell) {
|
||||
[MWMSettings setCompassCalibrationEnabled:value];
|
||||
} else if (cell == self.perspectiveViewCell) {
|
||||
auto &f = GetFramework();
|
||||
bool _ = true, is3d = true;
|
||||
f.Load3dMode(is3d, _);
|
||||
is3d = static_cast<bool>(value);
|
||||
f.Save3dMode(is3d, _);
|
||||
f.Allow3dMode(is3d, _);
|
||||
} else if (cell == self.autoZoomCell) {
|
||||
auto &f = GetFramework();
|
||||
f.AllowAutoZoom(value);
|
||||
f.SaveAutoZoom(value);
|
||||
} else if (cell == self.iCloudSynchronizationCell) {
|
||||
if (![NSUserDefaults.standardUserDefaults boolForKey:kUDDidShowICloudSynchronizationEnablingAlert]) {
|
||||
[self showICloudSynchronizationEnablingAlert:^(BOOL isEnabled) {
|
||||
[MWMSettings setICLoudSynchronizationEnabled:isEnabled];
|
||||
}];
|
||||
} else {
|
||||
[MWMSettings setICLoudSynchronizationEnabled:value];
|
||||
}
|
||||
} else if (cell == self.enableLoggingCell) {
|
||||
[MWMSettings setFileLoggingEnabled:value];
|
||||
[self updateLogFileSize];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:true];
|
||||
auto cell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
if (cell == self.unitsCell) {
|
||||
[self performSegueWithIdentifier:@"SettingsToUnits" sender:nil];
|
||||
} else if (cell == self.mobileInternetCell) {
|
||||
[self performSegueWithIdentifier:@"SettingsToMobileInternetSegue" sender:nil];
|
||||
} else if (cell == self.powerManagementCell) {
|
||||
[self performSegueWithIdentifier:@"SettingsToPowerManagementSegue" sender:nil];
|
||||
} else if (cell == self.nightModeCell) {
|
||||
[self performSegueWithIdentifier:@"SettingsToNightMode" sender:nil];
|
||||
} else if (cell == self.voiceInstructionsCell) {
|
||||
[self performSegueWithIdentifier:@"SettingsToTTSSegue" sender:nil];
|
||||
} else if (cell == self.drivingOptionsCell) {
|
||||
[self performSegueWithIdentifier:@"settingsToDrivingOptionsSegue" sender:nil];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
|
||||
auto cell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
if (cell == self.iCloudSynchronizationCell) {
|
||||
[self showICloudIsDisabledAlert];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
|
||||
switch (section) {
|
||||
case 1:
|
||||
return L(@"general_settings");
|
||||
case 2:
|
||||
return L(@"prefs_group_route");
|
||||
case 3:
|
||||
return L(@"info");
|
||||
default:
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
|
||||
switch (section) {
|
||||
case 1:
|
||||
return L(@"enable_logging_warning_message");
|
||||
default:
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMTTSLanguageViewController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,44 +0,0 @@
|
||||
#import "MWMTTSLanguageViewController.h"
|
||||
#import "MWMTTSSettingsViewController.h"
|
||||
#import "MWMTextToSpeech+CPP.h"
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
static NSString * const kUnwingSegueIdentifier = @"UnwindToTTSSettings";
|
||||
|
||||
@implementation MWMTTSLanguageViewController
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"pref_tts_other_section_title");
|
||||
}
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(SettingsTableViewSelectableCell *)sender
|
||||
{
|
||||
if (![segue.identifier isEqualToString:kUnwingSegueIdentifier])
|
||||
return;
|
||||
MWMTTSSettingsViewController * dest = segue.destinationViewController;
|
||||
UITableViewCell * cell = sender;
|
||||
NSUInteger const row = [self.tableView indexPathForCell:cell].row;
|
||||
[dest setAdditionalTTSLanguage:[[MWMTextToSpeech tts] availableLanguages][row]];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource && UITableViewDelegate
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
return [[MWMTextToSpeech tts] availableLanguages].size();
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView
|
||||
cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
Class cls = [SettingsTableViewSelectableCell class];
|
||||
auto cell = static_cast<SettingsTableViewSelectableCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
[cell
|
||||
configWithTitle:@([[MWMTextToSpeech tts] availableLanguages][indexPath.row].second.c_str())];
|
||||
return cell;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,13 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
|
||||
@interface MWMTTSSettingsViewController : MWMTableViewController
|
||||
|
||||
- (void)setAdditionalTTSLanguage:(std::pair<std::string, std::string> const &)l;
|
||||
|
||||
- (std::vector<std::pair<std::string, std::string>> const &)languages;
|
||||
|
||||
@end
|
||||
@@ -1,391 +0,0 @@
|
||||
#import "MWMTTSSettingsViewController.h"
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import "MWMTextToSpeech+CPP.h"
|
||||
#import "TTSTester.h"
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
#include <CoreApi/Framework.h>
|
||||
#include "LocaleTranslator.h"
|
||||
|
||||
using namespace locale_translator;
|
||||
using namespace routing;
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
NSString * kSelectTTSLanguageSegueName = @"TTSLanguage";
|
||||
|
||||
enum class Section
|
||||
{
|
||||
VoiceInstructions,
|
||||
StreetNames,
|
||||
Language,
|
||||
SpeedCameras,
|
||||
Count
|
||||
};
|
||||
|
||||
using SectionType = underlying_type_t<Section>;
|
||||
|
||||
struct BaseCellStategy
|
||||
{
|
||||
virtual UITableViewCell * BuildCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) = 0;
|
||||
|
||||
virtual void SelectCell(UITableView * /* tableView */, NSIndexPath * /* indexPath */,
|
||||
MWMTTSSettingsViewController * /* controller */) {};
|
||||
|
||||
virtual NSString * TitleForFooter() const { return nil; }
|
||||
|
||||
virtual NSString * TitleForHeader() const { return nil; }
|
||||
|
||||
virtual size_t NumberOfRows(MWMTTSSettingsViewController * /* controller */) const { return 1; }
|
||||
|
||||
virtual ~BaseCellStategy() {}
|
||||
};
|
||||
|
||||
UITableViewCell* voiceInstructionsCell;
|
||||
UITableViewCell* streetNamesCell;
|
||||
|
||||
struct VoiceInstructionCellStrategy : BaseCellStategy
|
||||
{
|
||||
UITableViewCell * BuildCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) override
|
||||
{
|
||||
Class cls = [SettingsTableViewSwitchCell class];
|
||||
auto cell = static_cast<SettingsTableViewSwitchCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
[cell configWithDelegate:static_cast<id<SettingsTableViewSwitchCellDelegate>>(controller)
|
||||
title:L(@"pref_tts_enable_title")
|
||||
isOn:[MWMTextToSpeech isTTSEnabled]];
|
||||
voiceInstructionsCell = cell;
|
||||
return cell;
|
||||
}
|
||||
};
|
||||
|
||||
struct LanguageCellStrategy : BaseCellStategy
|
||||
{
|
||||
TTSTester * ttsTester = [[TTSTester alloc] init];
|
||||
|
||||
UITableViewCell * BuildCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) override
|
||||
{
|
||||
NSInteger const row = indexPath.row;
|
||||
// "Other" cell
|
||||
if (row == controller.languages.size())
|
||||
{
|
||||
Class cls = [SettingsTableViewLinkCell class];
|
||||
auto cell = static_cast<SettingsTableViewLinkCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
[cell configWithTitle:L(@"pref_tts_other_section_title") info:nil];
|
||||
return cell;
|
||||
}
|
||||
|
||||
// "Test TTS" cell
|
||||
if (row == controller.languages.size() + 1)
|
||||
{
|
||||
Class cls = [SettingsTableViewSelectableCell class];
|
||||
auto cell = static_cast<SettingsTableViewSelectableCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
[cell configWithTitle:L(@"pref_tts_test_voice_title")];
|
||||
cell.accessoryType = UITableViewCellAccessoryNone;
|
||||
return cell;
|
||||
}
|
||||
|
||||
Class cls = [SettingsTableViewSelectableCell class];
|
||||
auto cell = static_cast<SettingsTableViewSelectableCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
pair<string, string> const p = controller.languages[row];
|
||||
[cell configWithTitle:@(p.second.c_str())];
|
||||
BOOL const isSelected = [@(p.first.c_str()) isEqualToString:[MWMTextToSpeech savedLanguage]];
|
||||
if (isSelected)
|
||||
{
|
||||
m_selectedCell = cell;
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
}
|
||||
else
|
||||
{
|
||||
cell.accessoryType = UITableViewCellAccessoryNone;
|
||||
}
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
size_t NumberOfRows(MWMTTSSettingsViewController * controller) const override
|
||||
{
|
||||
return controller.languages.size() + 2; // Number of languages + "Other" cell + "TTS Test" cell
|
||||
}
|
||||
|
||||
NSString * TitleForHeader() const override { return L(@"pref_tts_language_title"); }
|
||||
|
||||
void SelectCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) override
|
||||
{
|
||||
NSInteger const row = indexPath.row;
|
||||
if (row == controller.languages.size())
|
||||
{
|
||||
[controller performSegueWithIdentifier:kSelectTTSLanguageSegueName sender:nil];
|
||||
return;
|
||||
}
|
||||
|
||||
if (row == controller.languages.size() + 1)
|
||||
{
|
||||
[ttsTester playRandomTestString];
|
||||
return;
|
||||
}
|
||||
|
||||
auto cell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
if (m_selectedCell == cell)
|
||||
return;
|
||||
|
||||
m_selectedCell.accessoryType = UITableViewCellAccessoryNone;
|
||||
[[MWMTextToSpeech tts] setNotificationsLocale:@(controller.languages[row].first.c_str())];
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
m_selectedCell = cell;
|
||||
}
|
||||
|
||||
SettingsTableViewSelectableCell * m_selectedCell = nil;
|
||||
};
|
||||
|
||||
struct CamerasCellStrategy : BaseCellStategy
|
||||
{
|
||||
UITableViewCell * BuildCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) override
|
||||
{
|
||||
auto const mode = GetFramework().GetRoutingManager().GetSpeedCamManager().GetMode();
|
||||
Class cls = [SettingsTableViewSelectableCell class];
|
||||
auto cell = static_cast<SettingsTableViewSelectableCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
NSString * title = nil;
|
||||
switch (static_cast<SpeedCameraManagerMode>(indexPath.row))
|
||||
{
|
||||
case SpeedCameraManagerMode::Auto: title = L(@"pref_tts_speedcams_auto"); break;
|
||||
case SpeedCameraManagerMode::Always: title = L(@"pref_tts_speedcams_always"); break;
|
||||
case SpeedCameraManagerMode::Never: title = L(@"pref_tts_speedcams_never"); break;
|
||||
case SpeedCameraManagerMode::MaxValue: CHECK(false, ()); return nil;
|
||||
}
|
||||
|
||||
CHECK(title, ());
|
||||
[cell configWithTitle:title];
|
||||
bool const isSelectedCell = base::Underlying(mode) == indexPath.row;
|
||||
if (isSelectedCell)
|
||||
{
|
||||
m_selectedCell = cell;
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
}
|
||||
else
|
||||
{
|
||||
cell.accessoryType = UITableViewCellAccessoryNone;
|
||||
}
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
size_t NumberOfRows(MWMTTSSettingsViewController * /* controller */) const override
|
||||
{
|
||||
return base::Underlying(SpeedCameraManagerMode::MaxValue);
|
||||
}
|
||||
|
||||
NSString * TitleForHeader() const override { return L(@"speedcams_alert_title"); }
|
||||
|
||||
NSString * TitleForFooter() const override { return nil; }
|
||||
|
||||
void SelectCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * /* controller */) override
|
||||
{
|
||||
auto cell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
if (cell == m_selectedCell)
|
||||
return;
|
||||
|
||||
m_selectedCell.accessoryType = UITableViewCellAccessoryNone;
|
||||
auto & scm = GetFramework().GetRoutingManager().GetSpeedCamManager();
|
||||
auto const mode = static_cast<SpeedCameraManagerMode>(indexPath.row);
|
||||
CHECK_NOT_EQUAL(mode, SpeedCameraManagerMode::MaxValue, ());
|
||||
scm.SetMode(mode);
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
m_selectedCell = cell;
|
||||
}
|
||||
|
||||
SettingsTableViewSelectableCell * m_selectedCell = nil;
|
||||
};
|
||||
|
||||
struct StreetNamesCellStrategy : BaseCellStategy
|
||||
{
|
||||
UITableViewCell * BuildCell(UITableView * tableView, NSIndexPath * indexPath,
|
||||
MWMTTSSettingsViewController * controller) override
|
||||
{
|
||||
Class cls = [SettingsTableViewSwitchCell class];
|
||||
auto cell = static_cast<SettingsTableViewSwitchCell *>(
|
||||
[tableView dequeueReusableCellWithCellClass:cls indexPath:indexPath]);
|
||||
[cell configWithDelegate:static_cast<id<SettingsTableViewSwitchCellDelegate>>(controller)
|
||||
title:L(@"pref_tts_street_names_title")
|
||||
isOn:[MWMTextToSpeech isStreetNamesTTSEnabled]];
|
||||
streetNamesCell = cell;
|
||||
return cell;
|
||||
}
|
||||
|
||||
NSString * TitleForFooter() const override { return L(@"pref_tts_street_names_description"); }
|
||||
};
|
||||
} // namespace
|
||||
|
||||
@interface MWMTTSSettingsViewController ()<SettingsTableViewSwitchCellDelegate>
|
||||
{
|
||||
pair<string, string> m_additionalTTSLanguage;
|
||||
vector<pair<string, string>> m_languages;
|
||||
unordered_map<SectionType, unique_ptr<BaseCellStategy>> m_strategies;
|
||||
}
|
||||
|
||||
@property(nonatomic) BOOL isLocaleLanguageAbsent;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMTTSSettingsViewController
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)aDecoder
|
||||
{
|
||||
self = [super initWithCoder:aDecoder];
|
||||
if (self)
|
||||
{
|
||||
using base::Underlying;
|
||||
m_strategies.emplace(Underlying(Section::VoiceInstructions), make_unique<VoiceInstructionCellStrategy>());
|
||||
m_strategies.emplace(Underlying(Section::StreetNames), make_unique<StreetNamesCellStrategy>());
|
||||
m_strategies.emplace(Underlying(Section::Language), make_unique<LanguageCellStrategy>());
|
||||
m_strategies.emplace(Underlying(Section::SpeedCameras), make_unique<CamerasCellStrategy>());
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"pref_tts_enable_title");
|
||||
MWMTextToSpeech * tts = [MWMTextToSpeech tts];
|
||||
|
||||
m_languages.reserve(3);
|
||||
pair<string, string> const standard = tts.standardLanguage;
|
||||
m_languages.push_back(standard);
|
||||
|
||||
using namespace tts;
|
||||
NSString * currentBcp47 = [AVSpeechSynthesisVoice currentLanguageCode];
|
||||
string const currentBcp47Str = currentBcp47.UTF8String;
|
||||
if (currentBcp47Str != standard.first && !currentBcp47Str.empty())
|
||||
{
|
||||
auto const & v = tts.availableLanguages;
|
||||
NSAssert(!v.empty(), @"Vector can't be empty!");
|
||||
std::string const translated = translateLocale(currentBcp47Str);
|
||||
auto cur = std::make_pair(currentBcp47Str, translated);
|
||||
if (translated.empty() || find(v.begin(), v.end(), cur) != v.end())
|
||||
m_languages.push_back(std::move(cur));
|
||||
else
|
||||
self.isLocaleLanguageAbsent = YES;
|
||||
}
|
||||
|
||||
NSString * nsSavedLanguage = [MWMTextToSpeech savedLanguage];
|
||||
if (nsSavedLanguage.length)
|
||||
{
|
||||
std::string const savedLanguage = nsSavedLanguage.UTF8String;
|
||||
if (savedLanguage != currentBcp47Str && savedLanguage != standard.first &&
|
||||
!savedLanguage.empty())
|
||||
m_languages.emplace_back(savedLanguage, translateLocale(savedLanguage));
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)unwind:(id)sender
|
||||
{
|
||||
size_t const size = m_languages.size();
|
||||
if (find(m_languages.begin(), m_languages.end(), m_additionalTTSLanguage) != m_languages.end())
|
||||
{
|
||||
[self.tableView reloadData];
|
||||
return;
|
||||
}
|
||||
switch (size)
|
||||
{
|
||||
case 1: m_languages.push_back(m_additionalTTSLanguage); break;
|
||||
case 2:
|
||||
if (self.isLocaleLanguageAbsent)
|
||||
m_languages[size - 1] = m_additionalTTSLanguage;
|
||||
else
|
||||
m_languages.push_back(m_additionalTTSLanguage);
|
||||
break;
|
||||
case 3: m_languages[size - 1] = m_additionalTTSLanguage; break;
|
||||
default: NSAssert(false, @"Incorrect language's count"); break;
|
||||
}
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
- (void)setAdditionalTTSLanguage:(pair<string, string> const &)l
|
||||
{
|
||||
[[MWMTextToSpeech tts] setNotificationsLocale:@(l.first.c_str())];
|
||||
m_additionalTTSLanguage = l;
|
||||
}
|
||||
|
||||
- (vector<pair<string, string>> const &)languages
|
||||
{
|
||||
return m_languages;
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
||||
{
|
||||
auto const & strategy = m_strategies[static_cast<SectionType>(section)];
|
||||
CHECK(strategy, ());
|
||||
return strategy->TitleForHeader();
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
|
||||
{
|
||||
auto const & strategy = m_strategies[static_cast<SectionType>(section)];
|
||||
CHECK(strategy, ());
|
||||
return strategy->TitleForFooter();
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
||||
{
|
||||
return [MWMTextToSpeech isTTSEnabled] ? base::Underlying(Section::Count) : 1;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
auto const & strategy = m_strategies[static_cast<SectionType>(section)];
|
||||
CHECK(strategy, ());
|
||||
return strategy->NumberOfRows(self);
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView
|
||||
cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
auto const & strategy = m_strategies[static_cast<SectionType>(indexPath.section)];
|
||||
CHECK(strategy, ());
|
||||
return strategy->BuildCell(tableView, indexPath, self);
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
auto const & strategy = m_strategies[static_cast<SectionType>(indexPath.section)];
|
||||
CHECK(strategy, ());
|
||||
return strategy->SelectCell(tableView, indexPath, self);
|
||||
}
|
||||
|
||||
#pragma mark - SettingsTableViewSwitchCellDelegate
|
||||
|
||||
- (void)switchCell:(SettingsTableViewSwitchCell *)cell didChangeValue:(BOOL)value
|
||||
{
|
||||
if (cell == voiceInstructionsCell)
|
||||
{
|
||||
[MWMTextToSpeech setTTSEnabled:value];
|
||||
auto indexSet = [NSIndexSet indexSetWithIndexesInRange:{base::Underlying(Section::StreetNames), base::Underlying(Section::Count) - 1}];
|
||||
auto const animation = UITableViewRowAnimationFade;
|
||||
if (value)
|
||||
[self.tableView insertSections:indexSet withRowAnimation:animation];
|
||||
else
|
||||
[self.tableView deleteSections:indexSet withRowAnimation:animation];
|
||||
}
|
||||
else if (cell == streetNamesCell)
|
||||
{
|
||||
[MWMTextToSpeech setStreetNamesTTSEnabled:value];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,5 +0,0 @@
|
||||
#import "MWMTableViewController.h"
|
||||
|
||||
@interface MWMUnitsController : MWMTableViewController
|
||||
|
||||
@end
|
||||
@@ -1,49 +0,0 @@
|
||||
#import "MWMUnitsController.h"
|
||||
#import "MWMSettings.h"
|
||||
#import "SwiftBridge.h"
|
||||
|
||||
@interface MWMUnitsController ()
|
||||
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * kilometers;
|
||||
@property(weak, nonatomic) IBOutlet SettingsTableViewSelectableCell * miles;
|
||||
@property(weak, nonatomic) SettingsTableViewSelectableCell * selectedCell;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMUnitsController
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.title = L(@"measurement_units");
|
||||
|
||||
switch ([MWMSettings measurementUnits])
|
||||
{
|
||||
case MWMUnitsMetric: self.selectedCell = self.kilometers; break;
|
||||
case MWMUnitsImperial: self.selectedCell = self.miles; break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setSelectedCell:(SettingsTableViewSelectableCell *)cell
|
||||
{
|
||||
SettingsTableViewSelectableCell * selectedCell = _selectedCell;
|
||||
if (selectedCell == cell)
|
||||
return;
|
||||
|
||||
selectedCell.accessoryType = UITableViewCellAccessoryNone;
|
||||
cell.accessoryType = UITableViewCellAccessoryCheckmark;
|
||||
cell.selected = NO;
|
||||
_selectedCell = cell;
|
||||
if (cell == self.kilometers)
|
||||
[MWMSettings setMeasurementUnits:MWMUnitsMetric];
|
||||
else
|
||||
[MWMSettings setMeasurementUnits:MWMUnitsImperial];
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
self.selectedCell = [tableView cellForRowAtIndexPath:indexPath];
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,6 +1,5 @@
|
||||
import SwiftUI
|
||||
|
||||
|
||||
/// View for the OpenStreetMapp profile
|
||||
struct ExistingProfileView: View {
|
||||
// MARK: - Properties
|
||||
@@ -25,6 +24,10 @@ struct ExistingProfileView: View {
|
||||
@State private var showNotes: Bool = false
|
||||
|
||||
|
||||
/// The publisher to know when to stop showing the Safari view for the login form
|
||||
private let stopShowingLoginPublisher = NotificationCenter.default.publisher(for: SafariView.dismissNotificationName)
|
||||
|
||||
|
||||
/// If the profile is being presented as an alert
|
||||
var isPresentedAsAlert: Bool = false
|
||||
|
||||
@@ -33,36 +36,32 @@ struct ExistingProfileView: View {
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
if Profile.needsReauthorization {
|
||||
ScrollView {
|
||||
List {
|
||||
Text("osm_profile_reauthorize_promt")
|
||||
.font(.headline)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding()
|
||||
.font(.headline)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
} else if !isPresentedAsAlert {
|
||||
ScrollView {
|
||||
VStack {
|
||||
List {
|
||||
Section {
|
||||
VStack {
|
||||
Text(Profile.numberOfEdits ?? 0, format: .number)
|
||||
.font(.largeTitle)
|
||||
.bold()
|
||||
.frame(maxWidth: .infinity)
|
||||
.font(.largeTitle)
|
||||
.bold()
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
Text("osm_profile_verfied_changes")
|
||||
}
|
||||
.padding()
|
||||
.padding([.top, .bottom])
|
||||
.frame(maxWidth: .infinity)
|
||||
.background {
|
||||
RoundedRectangle(cornerRadius: 10)
|
||||
.stroke(Color.secondary.opacity(0.3), lineWidth: 1)
|
||||
}
|
||||
|
||||
} footer: {
|
||||
if let editHistoryUrl = Profile.editHistoryUrl {
|
||||
Button {
|
||||
showEditHistory = true
|
||||
} label: {
|
||||
Text("osm_profile_view_edit_history")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedProminentButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -70,25 +69,30 @@ struct ExistingProfileView: View {
|
||||
.sheet(isPresented: $showEditHistory) {
|
||||
SafariView(url: editHistoryUrl, dismissButton: .close)
|
||||
}
|
||||
.padding([.top, .bottom])
|
||||
.listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
}
|
||||
|
||||
if let notesUrl = Profile.notesUrl {
|
||||
}
|
||||
|
||||
if let notesUrl = Profile.notesUrl {
|
||||
Section {
|
||||
Button {
|
||||
showNotes = true
|
||||
} label: {
|
||||
Text("osm_profile_view_notes")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedProminentButtonStyle())
|
||||
.buttonBorderShape(.roundedRectangle(radius: 0))
|
||||
.controlSize(.large)
|
||||
.font(.headline)
|
||||
.padding(.top)
|
||||
.sheet(isPresented: $showNotes) {
|
||||
SafariView(url: notesUrl, dismissButton: .close)
|
||||
}
|
||||
.listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
.refreshable {
|
||||
await Profile.reload()
|
||||
@@ -106,7 +110,8 @@ struct ExistingProfileView: View {
|
||||
showLogin = true
|
||||
} label: {
|
||||
Text("osm_profile_reauthorize")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedProminentButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -116,7 +121,7 @@ struct ExistingProfileView: View {
|
||||
}
|
||||
|
||||
Divider()
|
||||
.padding([.top, .bottom])
|
||||
.padding([.top, .bottom])
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("osm_profile_remove_promt")
|
||||
@@ -126,7 +131,8 @@ struct ExistingProfileView: View {
|
||||
lastUpdated = Date.now
|
||||
} label: {
|
||||
Text("osm_profile_remove")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -139,7 +145,8 @@ struct ExistingProfileView: View {
|
||||
}
|
||||
} label: {
|
||||
Text("osm_more_about")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -147,6 +154,10 @@ struct ExistingProfileView: View {
|
||||
}
|
||||
}
|
||||
.padding([.bottom, .leading, .trailing])
|
||||
.background(Color(uiColor: .systemGroupedBackground))
|
||||
}
|
||||
.onReceive(stopShowingLoginPublisher) { _ in
|
||||
showLogin = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import SwiftUI
|
||||
|
||||
|
||||
/// View for the OpenStreetMapp profile
|
||||
struct NoExistingProfileView: View {
|
||||
// MARK: - Properties
|
||||
@@ -13,25 +12,29 @@ struct NoExistingProfileView: View {
|
||||
@State private var showLogin: Bool = false
|
||||
|
||||
|
||||
/// The publisher to know when to stop showing the Safari view for the login form
|
||||
private let stopShowingLoginPublisher = NotificationCenter.default.publisher(for: SafariView.dismissNotificationName)
|
||||
|
||||
|
||||
/// The actual view
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
ScrollView {
|
||||
List {
|
||||
VStack(alignment: .leading) {
|
||||
Text("osm_profile_promt")
|
||||
.font(.headline)
|
||||
.font(.headline)
|
||||
|
||||
HStack(alignment: .top) {
|
||||
Image(.osmLogo)
|
||||
.resizable()
|
||||
.aspectRatio(1, contentMode: .fit)
|
||||
.frame(maxWidth: 50)
|
||||
.padding(.top, 6)
|
||||
.resizable()
|
||||
.aspectRatio(1, contentMode: .fit)
|
||||
.frame(maxWidth: 50)
|
||||
.padding(.top, 6)
|
||||
|
||||
Text("osm_profile_explanation")
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.padding(.bottom)
|
||||
}
|
||||
|
||||
Spacer(minLength: 0)
|
||||
@@ -42,7 +45,8 @@ struct NoExistingProfileView: View {
|
||||
showLogin = true
|
||||
} label: {
|
||||
Text("osm_profile_login")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedProminentButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -53,7 +57,7 @@ struct NoExistingProfileView: View {
|
||||
}
|
||||
|
||||
Divider()
|
||||
.padding([.top, .bottom])
|
||||
.padding([.top, .bottom])
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("osm_profile_register_promt")
|
||||
@@ -62,7 +66,8 @@ struct NoExistingProfileView: View {
|
||||
openUrl(Profile.registrationUrl)
|
||||
} label: {
|
||||
Text("osm_profile_register")
|
||||
.frame(maxWidth: .infinity)
|
||||
.lineLimit(1)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedButtonStyle())
|
||||
.controlSize(.large)
|
||||
@@ -70,6 +75,10 @@ struct NoExistingProfileView: View {
|
||||
}
|
||||
}
|
||||
.padding([.bottom, .leading, .trailing])
|
||||
.background(Color(uiColor: .systemGroupedBackground))
|
||||
}
|
||||
.onReceive(stopShowingLoginPublisher) { _ in
|
||||
showLogin = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import SwiftUI
|
||||
|
||||
|
||||
/// View for the OpenStreetMap profile
|
||||
struct ProfileView: View {
|
||||
// MARK: - Properties
|
||||
@@ -21,6 +20,10 @@ struct ProfileView: View {
|
||||
var isPresentedAsAlert: Bool = false
|
||||
|
||||
|
||||
/// The publisher to know when to stop showing the Safari view for the login form
|
||||
private let stopShowingLoginPublisher = NotificationCenter.default.publisher(for: SafariView.dismissNotificationName)
|
||||
|
||||
|
||||
/// The actual view
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
@@ -33,7 +36,7 @@ struct ProfileView: View {
|
||||
Text("close")
|
||||
} icon: {
|
||||
Image(systemName: "xmark.circle.fill")
|
||||
.font(.title)
|
||||
.font(.title)
|
||||
}
|
||||
}
|
||||
.labelStyle(.iconOnly)
|
||||
@@ -41,6 +44,7 @@ struct ProfileView: View {
|
||||
.foregroundStyle(.primary)
|
||||
.padding([.top, .leading, .trailing])
|
||||
.frame(maxWidth: .infinity, alignment: .trailing)
|
||||
.background(Color(uiColor: .systemGroupedBackground))
|
||||
}
|
||||
|
||||
if Profile.isExisting {
|
||||
@@ -50,6 +54,7 @@ struct ProfileView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.accentColor(.accent)
|
||||
.navigationViewStyle(StackNavigationViewStyle())
|
||||
.navigationTitle(Profile.name ?? String(localized: "osm_profile"))
|
||||
.toolbar {
|
||||
@@ -71,5 +76,10 @@ struct ProfileView: View {
|
||||
}
|
||||
}
|
||||
.tag(lastUpdated)
|
||||
.onReceive(stopShowingLoginPublisher) { _ in
|
||||
if isPresentedAsAlert {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
177
iphone/Maps/UI/Settings/SettingsNavigationView.swift
Normal file
177
iphone/Maps/UI/Settings/SettingsNavigationView.swift
Normal file
@@ -0,0 +1,177 @@
|
||||
import SwiftUI
|
||||
|
||||
/// View for thenavigation settings
|
||||
struct SettingsNavigationView: View {
|
||||
// MARK: - Properties
|
||||
|
||||
/// If the perspective view should be used during routing
|
||||
@State var hasPerspectiveViewWhileRouting: Bool = true
|
||||
|
||||
|
||||
/// If auto zoom should be used during routing
|
||||
@State var hasAutoZoomWhileRouting: Bool = true
|
||||
|
||||
|
||||
/// If voice guidance should be provided during routing
|
||||
@State var shouldProvideVoiceRouting: Bool = true
|
||||
|
||||
|
||||
/// The selected language for voice guidance during routing
|
||||
@State var selectedLanguageForVoiceRouting: Settings.VoiceRoutingLanguage.ID? = nil
|
||||
|
||||
|
||||
/// If street names should be announced in the voice guidance during routing
|
||||
@State var shouldAnnounceStreetnamesWhileVoiceRouting: Bool = false
|
||||
|
||||
|
||||
/// The selected announcement of speed traps in the voice guidance during routing
|
||||
@State var selectedAnnouncingSpeedTrapsWhileVoiceRouting: Settings.AnnouncingSpeedTrapsWhileVoiceRouting = .never
|
||||
|
||||
|
||||
/// If toll roads should be avoided during routing
|
||||
@State var shouldAvoidTollRoadsWhileRouting: Bool = false
|
||||
|
||||
|
||||
/// If unpaved roads should be avoided during routing
|
||||
@State var shouldAvoidUnpavedRoadsWhileRouting: Bool = false
|
||||
|
||||
|
||||
/// If ferries should be avoided during routing
|
||||
@State var shouldAvoidFerriesWhileRouting: Bool = false
|
||||
|
||||
|
||||
/// If motorways should be avoided during routing
|
||||
@State var shouldAvoidMotorwaysWhileRouting: Bool = false
|
||||
|
||||
|
||||
/// The actual view
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
List {
|
||||
Section {
|
||||
Toggle("pref_map_3d_title", isOn: $hasPerspectiveViewWhileRouting)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("pref_map_auto_zoom", isOn: $hasAutoZoomWhileRouting)
|
||||
.tint(.accent)
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle("pref_tts_enable_title", isOn: $shouldProvideVoiceRouting)
|
||||
.tint(.accent)
|
||||
|
||||
if shouldProvideVoiceRouting {
|
||||
Picker(selection: $selectedLanguageForVoiceRouting) {
|
||||
ForEach(Settings.availableLanguagesForVoiceRouting) { languageForVoiceRouting in
|
||||
Text(languageForVoiceRouting.localizedName)
|
||||
.tag(languageForVoiceRouting.id)
|
||||
}
|
||||
} label: {
|
||||
Text("pref_tts_language_title")
|
||||
}
|
||||
|
||||
Toggle(isOn: $shouldAnnounceStreetnamesWhileVoiceRouting) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("pref_tts_street_names_title")
|
||||
|
||||
Text("pref_tts_street_names_description")
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
.tint(.accent)
|
||||
|
||||
Picker(selection: $selectedAnnouncingSpeedTrapsWhileVoiceRouting) {
|
||||
ForEach(Settings.AnnouncingSpeedTrapsWhileVoiceRouting.allCases) { announcingSpeedTrapsWhileVoiceRouting in
|
||||
Text(announcingSpeedTrapsWhileVoiceRouting.description)
|
||||
}
|
||||
} label: {
|
||||
Text("speedcams_alert_title")
|
||||
}
|
||||
}
|
||||
} header: {
|
||||
Text("pref_tts_title")
|
||||
} footer: {
|
||||
Button {
|
||||
Settings.playVoiceRoutingTest()
|
||||
} label: {
|
||||
Text("pref_tts_test_voice_title")
|
||||
.bold()
|
||||
.lineLimit(1)
|
||||
.padding(4)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(BorderedButtonStyle())
|
||||
.padding([.top, .bottom])
|
||||
.listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle("avoid_tolls", isOn: $shouldAvoidTollRoadsWhileRouting)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("avoid_unpaved", isOn: $shouldAvoidUnpavedRoadsWhileRouting)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("avoid_ferry", isOn: $shouldAvoidFerriesWhileRouting)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("avoid_motorways", isOn: $shouldAvoidMotorwaysWhileRouting)
|
||||
.tint(.accent)
|
||||
} header: {
|
||||
Text("driving_options_title")
|
||||
}
|
||||
}
|
||||
}
|
||||
.accentColor(.accent)
|
||||
.navigationViewStyle(StackNavigationViewStyle())
|
||||
.navigationTitle(String(localized: "prefs_group_route"))
|
||||
.onAppear {
|
||||
hasPerspectiveViewWhileRouting = Settings.hasPerspectiveViewWhileRouting
|
||||
hasAutoZoomWhileRouting = Settings.hasAutoZoomWhileRouting
|
||||
shouldProvideVoiceRouting = Settings.shouldProvideVoiceRouting
|
||||
selectedLanguageForVoiceRouting = Settings.languageForVoiceRouting
|
||||
shouldAnnounceStreetnamesWhileVoiceRouting = Settings.shouldAnnounceStreetnamesWhileVoiceRouting
|
||||
selectedAnnouncingSpeedTrapsWhileVoiceRouting = Settings.announcingSpeedTrapsWhileVoiceRouting
|
||||
shouldAvoidTollRoadsWhileRouting = Settings.shouldAvoidTollRoadsWhileRouting
|
||||
shouldAvoidUnpavedRoadsWhileRouting = Settings.shouldAvoidUnpavedRoadsWhileRouting
|
||||
shouldAvoidFerriesWhileRouting = Settings.shouldAvoidFerriesWhileRouting
|
||||
shouldAvoidMotorwaysWhileRouting = Settings.shouldAvoidMotorwaysWhileRouting
|
||||
}
|
||||
.onChange(of: hasPerspectiveViewWhileRouting) { changedHasPerspectiveViewWhileRouting in
|
||||
Settings.hasPerspectiveViewWhileRouting = changedHasPerspectiveViewWhileRouting
|
||||
}
|
||||
.onChange(of: hasAutoZoomWhileRouting) { changedHasAutoZoomWhileRouting in
|
||||
Settings.hasAutoZoomWhileRouting = changedHasAutoZoomWhileRouting
|
||||
}
|
||||
.onChange(of: shouldProvideVoiceRouting) { changedShouldProvideVoiceRouting in
|
||||
Settings.shouldProvideVoiceRouting = changedShouldProvideVoiceRouting
|
||||
}
|
||||
.onChange(of: selectedLanguageForVoiceRouting) { changedSelectedLanguageForVoiceRouting in
|
||||
if let changedSelectedLanguageForVoiceRouting {
|
||||
Settings.languageForVoiceRouting = changedSelectedLanguageForVoiceRouting
|
||||
}
|
||||
}
|
||||
.onChange(of: shouldAnnounceStreetnamesWhileVoiceRouting) { changedShouldAnnounceStreetnamesWhileVoiceRouting in
|
||||
Settings.shouldAnnounceStreetnamesWhileVoiceRouting = changedShouldAnnounceStreetnamesWhileVoiceRouting
|
||||
}
|
||||
.onChange(of: selectedAnnouncingSpeedTrapsWhileVoiceRouting) { changedSelectedAnnouncingSpeedTrapsWhileVoiceRouting in
|
||||
Settings.announcingSpeedTrapsWhileVoiceRouting = changedSelectedAnnouncingSpeedTrapsWhileVoiceRouting
|
||||
}
|
||||
.onChange(of: shouldAvoidTollRoadsWhileRouting) { changedShouldAvoidTollRoadsWhileRouting in
|
||||
Settings.shouldAvoidTollRoadsWhileRouting = changedShouldAvoidTollRoadsWhileRouting
|
||||
}
|
||||
.onChange(of: shouldAvoidUnpavedRoadsWhileRouting) { changedShouldAvoidUnpavedRoadsWhileRouting in
|
||||
Settings.shouldAvoidUnpavedRoadsWhileRouting = changedShouldAvoidUnpavedRoadsWhileRouting
|
||||
}
|
||||
.onChange(of: shouldAvoidUnpavedRoadsWhileRouting) { changedShouldAvoidUnpavedRoadsWhileRouting in
|
||||
Settings.shouldAvoidUnpavedRoadsWhileRouting = changedShouldAvoidUnpavedRoadsWhileRouting
|
||||
}
|
||||
.onChange(of: shouldAvoidFerriesWhileRouting) { changedShouldAvoidFerriesWhileRouting in
|
||||
Settings.shouldAvoidFerriesWhileRouting = changedShouldAvoidFerriesWhileRouting
|
||||
}
|
||||
.onChange(of: shouldAvoidMotorwaysWhileRouting) { changedShouldAvoidMotorwaysWhileRouting in
|
||||
Settings.shouldAvoidMotorwaysWhileRouting = changedShouldAvoidMotorwaysWhileRouting
|
||||
}
|
||||
}
|
||||
}
|
||||
299
iphone/Maps/UI/Settings/SettingsView.swift
Normal file
299
iphone/Maps/UI/Settings/SettingsView.swift
Normal file
@@ -0,0 +1,299 @@
|
||||
import SwiftUI
|
||||
|
||||
/// View for the settings
|
||||
struct SettingsView: View {
|
||||
// MARK: - Properties
|
||||
|
||||
/// The dismiss action of the environment
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
|
||||
/// The selected distance unit
|
||||
@State private var selectedDistanceUnit: Settings.DistanceUnit = .metric
|
||||
|
||||
|
||||
/// If zoom buttons should be displayed
|
||||
@State private var hasZoomButtons: Bool = true
|
||||
|
||||
|
||||
/// If 3D buildings should be displayed
|
||||
@State private var has3dBuildings: Bool = true
|
||||
|
||||
|
||||
/// If automatic map downloads should be enabled
|
||||
@State private var hasAutomaticDownload: Bool = true
|
||||
|
||||
|
||||
/// If an increased font size should be used for map labels
|
||||
@State private var hasIncreasedFontsize: Bool = false
|
||||
|
||||
|
||||
/// If names should be transliterated to Latin
|
||||
@State private var shouldTransliterateToLatin: Bool = true
|
||||
|
||||
|
||||
/// The selected appearance
|
||||
@State private var selectedAppearance: Settings.Appearance = .auto
|
||||
|
||||
|
||||
/// If the bookmarks should be synced via iCloud
|
||||
@State private var shouldSync: Bool = false
|
||||
|
||||
|
||||
/// If the sync beta alert should be shown
|
||||
@State private var showSyncBetaAlert: Bool = false
|
||||
|
||||
|
||||
/// If the sync is possible
|
||||
@State private var isSyncPossible: Bool = true
|
||||
|
||||
|
||||
/// If the compass should be calibrated
|
||||
@State private var shouldCalibrateCompass: Bool = true
|
||||
|
||||
|
||||
/// The selected power saving mode
|
||||
@State private var selectedPowerSavingMode: Settings.PowerSavingMode = .never
|
||||
|
||||
|
||||
/// The selected mobile data policy
|
||||
@State private var selectedMobileDataPolicy: Settings.MobileDataPolicy = .always
|
||||
|
||||
|
||||
/// If our custom logging is enabled
|
||||
@State private var isLogging: Bool = false
|
||||
|
||||
|
||||
/// The actual view
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
List {
|
||||
Section {
|
||||
NavigationLink {
|
||||
ProfileView()
|
||||
} label: {
|
||||
HStack {
|
||||
Text("osm_profile")
|
||||
.lineLimit(1)
|
||||
.layoutPriority(2)
|
||||
|
||||
Spacer(minLength: 0)
|
||||
.layoutPriority(0)
|
||||
|
||||
Text(Profile.name ?? String())
|
||||
.lineLimit(1)
|
||||
.foregroundStyle(.secondary)
|
||||
.layoutPriority(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
Picker(selection: $selectedDistanceUnit) {
|
||||
ForEach(Settings.DistanceUnit.allCases) { distanceUnit in
|
||||
Text(distanceUnit.description)
|
||||
}
|
||||
} label: {
|
||||
Text("measurement_units")
|
||||
}
|
||||
|
||||
Toggle("pref_zoom_title", isOn: $hasZoomButtons)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle(isOn: $has3dBuildings) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("pref_map_3d_buildings_title")
|
||||
|
||||
if selectedPowerSavingMode == .maximum {
|
||||
Text("pref_map_3d_buildings_disabled_summary")
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tint(.accent)
|
||||
.disabled(selectedPowerSavingMode == .maximum)
|
||||
|
||||
Toggle("autodownload", isOn: $hasAutomaticDownload)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("big_font", isOn: $hasIncreasedFontsize)
|
||||
.tint(.accent)
|
||||
|
||||
Toggle("transliteration_title", isOn: $shouldTransliterateToLatin)
|
||||
.tint(.accent)
|
||||
|
||||
Picker(selection: $selectedAppearance) {
|
||||
ForEach(Settings.Appearance.allCases) { appearance in
|
||||
Text(appearance.description)
|
||||
}
|
||||
} label: {
|
||||
Text("pref_appearance_title")
|
||||
}
|
||||
}
|
||||
|
||||
NavigationLink("prefs_group_route") {
|
||||
SettingsNavigationView()
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle(isOn: $shouldSync) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("icloud_sync")
|
||||
|
||||
if !isSyncPossible {
|
||||
Text("icloud_disabled_message")
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tint(.accent)
|
||||
.disabled(!isSyncPossible)
|
||||
.alert("enable_icloud_synchronization_title", isPresented: $showSyncBetaAlert) {
|
||||
Button {
|
||||
Settings.hasShownSyncBetaAlert = true
|
||||
Settings.shouldSync = true
|
||||
shouldSync = true
|
||||
} label: {
|
||||
Text("enable")
|
||||
}
|
||||
|
||||
Button {
|
||||
Settings.createBookmarksBackupBecauseOfSyncBeta { hasCreatedBackup in
|
||||
if hasCreatedBackup {
|
||||
Settings.hasShownSyncBetaAlert = true
|
||||
Settings.shouldSync = true
|
||||
shouldSync = true
|
||||
} else {
|
||||
Settings.shouldSync = false
|
||||
shouldSync = false
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
Text("backup")
|
||||
}
|
||||
|
||||
Button(role: .cancel) {
|
||||
// Do nothing
|
||||
} label: {
|
||||
Text("cancel")
|
||||
}
|
||||
} message: {
|
||||
Text("enable_icloud_synchronization_message")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle("pref_calibration_title", isOn: $shouldCalibrateCompass)
|
||||
.tint(.accent)
|
||||
|
||||
Picker(selection: $selectedPowerSavingMode) {
|
||||
ForEach(Settings.PowerSavingMode.allCases) { powerSavingMode in
|
||||
Text(powerSavingMode.description)
|
||||
}
|
||||
} label: {
|
||||
Text("power_managment_title")
|
||||
}
|
||||
|
||||
Picker(selection: $selectedMobileDataPolicy) {
|
||||
ForEach(Settings.MobileDataPolicy.allCases) { mobileDataPolicy in
|
||||
Text(mobileDataPolicy.description)
|
||||
}
|
||||
} label: {
|
||||
Text("mobile_data")
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle(isOn: $isLogging) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("enable_logging")
|
||||
|
||||
if isLogging {
|
||||
Text(Settings.logSize, formatter: Settings.logSizeFormatter)
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tint(.accent)
|
||||
} footer: {
|
||||
Text("enable_logging_warning_message")
|
||||
}
|
||||
}
|
||||
.navigationTitle(String(localized: "settings"))
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .confirmationAction) {
|
||||
Button {
|
||||
dismiss()
|
||||
} label: {
|
||||
Text("close")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationViewStyle(StackNavigationViewStyle())
|
||||
.onAppear {
|
||||
selectedDistanceUnit = Settings.distanceUnit
|
||||
hasZoomButtons = Settings.hasZoomButtons
|
||||
has3dBuildings = Settings.has3dBuildings
|
||||
hasAutomaticDownload = Settings.hasAutomaticDownload
|
||||
hasIncreasedFontsize = Settings.hasIncreasedFontsize
|
||||
shouldTransliterateToLatin = Settings.shouldTransliterateToLatin
|
||||
selectedAppearance = Settings.appearance
|
||||
shouldSync = Settings.shouldSync
|
||||
shouldCalibrateCompass = Settings.shouldCalibrateCompass
|
||||
selectedPowerSavingMode = Settings.powerSavingMode
|
||||
selectedMobileDataPolicy = Settings.mobileDataPolicy
|
||||
isLogging = Settings.isLogging
|
||||
}
|
||||
.onChange(of: selectedDistanceUnit) { changedSelectedDistanceUnit in
|
||||
Settings.distanceUnit = changedSelectedDistanceUnit
|
||||
}
|
||||
.onChange(of: hasZoomButtons) { changedHasZoomButtons in
|
||||
Settings.hasZoomButtons = changedHasZoomButtons
|
||||
}
|
||||
.onChange(of: has3dBuildings) { changedHas3dBuildings in
|
||||
Settings.has3dBuildings = changedHas3dBuildings
|
||||
}
|
||||
.onChange(of: hasAutomaticDownload) { changedHasAutomaticDownload in
|
||||
Settings.hasAutomaticDownload = changedHasAutomaticDownload
|
||||
}
|
||||
.onChange(of: hasIncreasedFontsize) { changedHasIncreasedFontsize in
|
||||
Settings.hasIncreasedFontsize = changedHasIncreasedFontsize
|
||||
}
|
||||
.onChange(of: shouldTransliterateToLatin) { changedShouldTransliterateToLatin in
|
||||
Settings.shouldTransliterateToLatin = changedShouldTransliterateToLatin
|
||||
}
|
||||
.onChange(of: selectedAppearance) { changedSelectedAppearance in
|
||||
Settings.appearance = changedSelectedAppearance
|
||||
}
|
||||
.onChange(of: shouldSync) { changedShouldSync in
|
||||
if changedShouldSync, !Settings.hasShownSyncBetaAlert {
|
||||
showSyncBetaAlert = true
|
||||
shouldSync = false
|
||||
} else {
|
||||
Settings.shouldSync = changedShouldSync
|
||||
}
|
||||
}
|
||||
.onChange(of: shouldCalibrateCompass) { changedShouldCalibrateCompass in
|
||||
Settings.shouldCalibrateCompass = changedShouldCalibrateCompass
|
||||
}
|
||||
.onChange(of: selectedPowerSavingMode) { changedSelectedPowerSavingMode in
|
||||
Settings.powerSavingMode = changedSelectedPowerSavingMode
|
||||
}
|
||||
.onChange(of: selectedMobileDataPolicy) { changedSelectedMobileDataPolicy in
|
||||
Settings.mobileDataPolicy = changedSelectedMobileDataPolicy
|
||||
}
|
||||
.onChange(of: isLogging) { changedIsLogging in
|
||||
Settings.isLogging = changedIsLogging
|
||||
}
|
||||
.onReceive(Settings.syncStatePublisher) { syncState in
|
||||
isSyncPossible = syncState.isAvailable
|
||||
}
|
||||
.accentColor(.alternativeAccent)
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Wns-nH-AQU">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Wns-nH-AQU">
|
||||
<device id="iPad13_0rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
@@ -29,11 +29,11 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1376"/>
|
||||
<subviews>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="65S-M4-TnM" customClass="NavigationInfoArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1332"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1307"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TdT-ia-GP9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1356"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1331"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="350" id="XLL-zv-Bym"/>
|
||||
@@ -50,7 +50,7 @@
|
||||
</variation>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aVk-ab-LFJ" customClass="TabBarArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="1308" width="1032" height="68"/>
|
||||
<rect key="frame" x="0.0" y="1283" width="1032" height="93"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" priority="100" constant="350" id="aj4-lb-h52"/>
|
||||
@@ -67,26 +67,26 @@
|
||||
</variation>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="awj-9E-eBS" customClass="PlacePageArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1356"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1331"/>
|
||||
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FFY-Dy-Wou" customClass="VisibleArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1356"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1331"/>
|
||||
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NI8-tV-i2B" customClass="WidgetsArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1332"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1307"/>
|
||||
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xJx-UU-IdV" customClass="SideButtonsArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1332"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1307"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QKu-4A-UgP" customClass="TrafficButtonArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1332"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1307"/>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yto-Gu-Ugz" userLabel="Track Recording Button Area" customClass="TrackRecordingButtonArea" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1332"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1307"/>
|
||||
<color key="backgroundColor" red="0.0" green="1" blue="0.0" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
|
||||
</view>
|
||||
</subviews>
|
||||
@@ -99,7 +99,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="at1-V1-pzl" customClass="TouchTransparentView" customModule="CoMaps" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="722" width="440" height="152"/>
|
||||
<rect key="frame" x="0.0" y="1131" width="1032" height="152"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<gestureRecognizers/>
|
||||
<constraints>
|
||||
@@ -209,7 +209,7 @@
|
||||
<segue destination="h4a-ne-bSJ" kind="custom" identifier="Map2MapDownloaderSegue" customClass="MWMSegue" id="Tkr-Ad-FQL"/>
|
||||
<segue destination="lFr-lA-JTW" kind="show" identifier="PP2BookmarkEditing" id="0A8-4b-0A2"/>
|
||||
<segue destination="Psz-BY-Fy4" kind="presentation" identifier="PP2BookmarkEditingIPAD" modalPresentationStyle="formSheet" id="k6v-a7-5DO"/>
|
||||
<segue destination="DdR-kk-MnB" kind="custom" identifier="Map2Settings" customClass="MWMSegue" id="wtl-on-KxQ"/>
|
||||
<segue destination="zWe-Rs-11p" kind="presentation" identifier="Map2Settings" id="QPJ-CO-oy8"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="cKg-Q7-bFd" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@@ -309,7 +309,7 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="none" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="X1H-IB-Nv1">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1288"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1263"/>
|
||||
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="PressBackground"/>
|
||||
@@ -320,7 +320,7 @@
|
||||
</connections>
|
||||
</tableView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aQv-7U-zAP">
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1288"/>
|
||||
<rect key="frame" x="0.0" y="24" width="1032" height="1263"/>
|
||||
<subviews>
|
||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="PrH-u2-IEv" userLabel="Editor View" customClass="MWMTextView">
|
||||
<rect key="frame" x="0.0" y="36" width="1032" height="88"/>
|
||||
@@ -358,7 +358,7 @@
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="separator_image" translatesAutoresizingMaskIntoConstraints="NO" id="5T5-Pp-hb5">
|
||||
<rect key="frame" x="0.0" y="1243" width="1032" height="1"/>
|
||||
<rect key="frame" x="0.0" y="1218" width="1032" height="1"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="ZXK-zv-uSz"/>
|
||||
</constraints>
|
||||
@@ -488,7 +488,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SZQ-ra-FC3" userLabel="Mode Switch">
|
||||
<rect key="frame" x="0.0" y="1312" width="1032" height="44"/>
|
||||
<rect key="frame" x="0.0" y="1287" width="1032" height="44"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fB1-w2-lJI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="44"/>
|
||||
@@ -647,7 +647,7 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="JbV-y9-HBo">
|
||||
<rect key="frame" x="0.0" y="80" width="1032" height="1276"/>
|
||||
<rect key="frame" x="0.0" y="80" width="1032" height="1251"/>
|
||||
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView:PressBackground"/>
|
||||
@@ -718,7 +718,7 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="ina-WD-kps">
|
||||
<rect key="frame" x="0.0" y="80" width="1032" height="1276"/>
|
||||
<rect key="frame" x="0.0" y="80" width="1032" height="1251"/>
|
||||
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="TableView:PressBackground"/>
|
||||
@@ -806,7 +806,7 @@
|
||||
</connections>
|
||||
</containerView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CDj-ol-HRP">
|
||||
<rect key="frame" x="0.0" y="1292" width="1032" height="84"/>
|
||||
<rect key="frame" x="0.0" y="1267" width="1032" height="109"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="PressBackground"/>
|
||||
@@ -849,20 +849,20 @@
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="MWMNoMapsViewController" id="3el-Zi-2E4" customClass="MWMNoMapsViewController" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="4WP-vj-Alg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="1032" height="1376"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gmw-e3-n53" userLabel="Container" customClass="MWMNoMapsView">
|
||||
<rect key="frame" x="13" y="24" width="367" height="804"/>
|
||||
<rect key="frame" x="308.5" y="24" width="415.5" height="1307"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dCZ-PN-2Ob" userLabel="BoundsView">
|
||||
<rect key="frame" x="16" y="0.0" width="335" height="804"/>
|
||||
<rect key="frame" x="16" y="0.0" width="383.5" height="1307"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="87G-jh-N8H" userLabel="CenteredView">
|
||||
<rect key="frame" x="0.0" y="347.5" width="335" height="109.5"/>
|
||||
<rect key="frame" x="0.0" y="599" width="383.5" height="109.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="У вас нет загруженных карт" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="abh-G0-Alr" userLabel="Title">
|
||||
<rect key="frame" x="0.0" y="40" width="335" height="24"/>
|
||||
<rect key="frame" x="0.0" y="40" width="383.5" height="24"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -872,7 +872,7 @@
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Загрузите необходимые карты, чтобы находить места и пользоваться навигацией без интернета." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LaW-Ad-mYI" userLabel="Text">
|
||||
<rect key="frame" x="0.0" y="76" width="335" height="33.5"/>
|
||||
<rect key="frame" x="0.0" y="76" width="383.5" height="33.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -930,7 +930,7 @@
|
||||
</connections>
|
||||
</view>
|
||||
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Moj-UK-oyl" userLabel="DownloadMaps" customClass="MWMButton">
|
||||
<rect key="frame" x="76.5" y="748" width="240" height="44"/>
|
||||
<rect key="frame" x="396" y="1247" width="240" height="44"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="240" id="49x-bx-JJj"/>
|
||||
@@ -1030,6 +1030,14 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1818" y="-190"/>
|
||||
</scene>
|
||||
<!--Settings Bridge Controller-->
|
||||
<scene sceneID="rC6-l4-Abg">
|
||||
<objects>
|
||||
<hostingController storyboardIdentifier="SettingsBridgeController" id="zWe-Rs-11p" customClass="SettingsBridgeController" customModule="CoMaps" customModuleProvider="target" sceneMemberID="viewController"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="c37-uR-cHF" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2098" y="190"/>
|
||||
</scene>
|
||||
<!--Downloader No Results Embed View Controller-->
|
||||
<scene sceneID="Bce-Yn-A6n">
|
||||
<objects>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user