From 1b9eb3c572963814b949593427099c018f3f0354 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 15 Mar 2019 09:16:19 -0400 Subject: [PATCH] Ensure Callkit is enabled for locale. --- .../PrivacySettingsTableViewController.m | 4 +++- .../call/UserInterface/CallUIAdapter.swift | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m b/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m index 90978af3b..061796827 100644 --- a/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m +++ b/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m @@ -207,7 +207,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s selector:@selector(didToggleCallsHideIPAddressSwitch:)]]; [contents addSection:callingSection]; - if (@available(iOS 11, *)) { + if (CallUIAdapter.isCallkitDisabledForLocale) { + // Hide all CallKit-related prefs; CallKit is disabled. + } else if (@available(iOS 11, *)) { OWSTableSection *callKitSection = [OWSTableSection new]; [callKitSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString( diff --git a/Signal/src/call/UserInterface/CallUIAdapter.swift b/Signal/src/call/UserInterface/CallUIAdapter.swift index d2a2ba0b5..c998b475b 100644 --- a/Signal/src/call/UserInterface/CallUIAdapter.swift +++ b/Signal/src/call/UserInterface/CallUIAdapter.swift @@ -100,6 +100,9 @@ extension CallUIAdaptee { // So we use the non-CallKit call UI. Logger.info("choosing non-callkit adaptee for simulator.") adaptee = NonCallKitCallUIAdaptee(callService: callService, notificationPresenter: notificationPresenter) + } else if CallUIAdapter.isCallkitDisabledForLocale { + Logger.info("choosing non-callkit adaptee due to locale.") + adaptee = NonCallKitCallUIAdaptee(callService: callService, notificationPresenter: notificationPresenter) } else if #available(iOS 11, *) { Logger.info("choosing callkit adaptee for iOS11+") let showNames = Environment.shared.preferences.notificationPreviewType() != .noNameNoPreview @@ -129,6 +132,22 @@ extension CallUIAdaptee { callService.addObserverAndSyncState(observer: self) } + @objc + public static var isCallkitDisabledForLocale: Bool { + let locale = Locale.current + guard let regionCode = locale.regionCode else { + owsFailDebug("Missing region code.") + return false + } + + // Apple has stopped approving apps that use CallKit functionality in mainland China. + // When the "CN" region is enabled, this check simply switches to the same pre-CallKit + // interface that is still used by everyone on iOS 9. + // + // For further reference: https://forums.developer.apple.com/thread/103083 + return regionCode == "CN" + } + // MARK: Dependencies var audioSession: OWSAudioSession {