diff --git a/.gitignore b/.gitignore index 249d3670f3..6e879fb6f0 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ DerivedData *.dSYM.zip *.ipa */xcuserdata/* +Display.xcodeproj/* diff --git a/BUCK b/BUCK index bcaf40a09a..d073d26cc1 100644 --- a/BUCK +++ b/BUCK @@ -1,5 +1,5 @@ -load('//tools:buck_utils.bzl', 'config_with_updated_linker_flags', 'configs_with_config') -load('//tools:buck_defs.bzl', 'combined_config', 'SHARED_CONFIGS', 'LIB_SPECIFIC_CONFIG') +load('//tools:buck_utils.bzl', 'config_with_updated_linker_flags', 'configs_with_config', 'combined_config') +load('//tools:buck_defs.bzl', 'SHARED_CONFIGS', 'EXTENSION_LIB_SPECIFIC_CONFIG') apple_library( name = 'DisplayPrivate', @@ -14,7 +14,7 @@ apple_library( 'Display/*.h', ], exclude = ['Display/Display.h']), modular = True, - configs = configs_with_config(combined_config([SHARED_CONFIGS, LIB_SPECIFIC_CONFIG])), + configs = configs_with_config(combined_config([SHARED_CONFIGS, EXTENSION_LIB_SPECIFIC_CONFIG])), compiler_flags = ['-w'], preprocessor_flags = ['-fobjc-arc'], visibility = ['//submodules/Display:Display'], @@ -32,7 +32,7 @@ apple_library( srcs = glob([ 'Display/*.swift', ]), - configs = configs_with_config(combined_config([SHARED_CONFIGS, LIB_SPECIFIC_CONFIG])), + configs = configs_with_config(combined_config([SHARED_CONFIGS, EXTENSION_LIB_SPECIFIC_CONFIG])), swift_compiler_flags = [ '-suppress-warnings', '-application-extension', diff --git a/Display.xcodeproj/xcuserdata/peter.xcuserdatad/xcschemes/Display.xcscheme b/Display.xcodeproj/xcuserdata/peter.xcuserdatad/xcschemes/Display.xcscheme deleted file mode 100644 index aebd30386b..0000000000 --- a/Display.xcodeproj/xcuserdata/peter.xcuserdatad/xcschemes/Display.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Display/AlertController.swift b/Display/AlertController.swift index c221ac7a51..7e74a95ee9 100644 --- a/Display/AlertController.swift +++ b/Display/AlertController.swift @@ -2,7 +2,13 @@ import Foundation import UIKit import AsyncDisplayKit +public enum AlertControllerThemeBackgroundType { + case light + case dark +} + public final class AlertControllerTheme: Equatable { + public let backgroundType: ActionSheetControllerThemeBackgroundType public let backgroundColor: UIColor public let separatorColor: UIColor public let highlightedItemColor: UIColor @@ -12,7 +18,8 @@ public final class AlertControllerTheme: Equatable { public let destructiveColor: UIColor public let disabledColor: UIColor - public init(backgroundColor: UIColor, separatorColor: UIColor, highlightedItemColor: UIColor, primaryColor: UIColor, secondaryColor: UIColor, accentColor: UIColor, destructiveColor: UIColor, disabledColor: UIColor) { + public init(backgroundType: ActionSheetControllerThemeBackgroundType, backgroundColor: UIColor, separatorColor: UIColor, highlightedItemColor: UIColor, primaryColor: UIColor, secondaryColor: UIColor, accentColor: UIColor, destructiveColor: UIColor, disabledColor: UIColor) { + self.backgroundType = backgroundType self.backgroundColor = backgroundColor self.separatorColor = separatorColor self.highlightedItemColor = highlightedItemColor @@ -24,6 +31,9 @@ public final class AlertControllerTheme: Equatable { } public static func ==(lhs: AlertControllerTheme, rhs: AlertControllerTheme) -> Bool { + if lhs.backgroundType != rhs.backgroundType { + return false + } if lhs.backgroundColor != rhs.backgroundColor { return false } diff --git a/Display/AlertControllerNode.swift b/Display/AlertControllerNode.swift index 70854f3835..eb9ebf16e5 100644 --- a/Display/AlertControllerNode.swift +++ b/Display/AlertControllerNode.swift @@ -3,9 +3,15 @@ import UIKit import AsyncDisplayKit final class AlertControllerNode: ASDisplayNode { - private let dimmingNode: ASDisplayNode + private let centerDimView: UIImageView + private let topDimView: UIView + private let bottomDimView: UIView + private let leftDimView: UIView + private let rightDimView: UIView + private let containerNode: ASDisplayNode private let effectNode: ASDisplayNode + private let backgroundNode: ASDisplayNode private let contentNode: AlertContentNode private let allowInputInset: Bool @@ -15,27 +21,51 @@ final class AlertControllerNode: ASDisplayNode { init(contentNode: AlertContentNode, theme: AlertControllerTheme, allowInputInset: Bool) { self.allowInputInset = allowInputInset - self.dimmingNode = ASDisplayNode() - self.dimmingNode.backgroundColor = UIColor(white: 0.0, alpha: 0.5) + + let dimColor = UIColor(white: 0.0, alpha: 0.5) + + self.centerDimView = UIImageView() + self.centerDimView.image = generateStretchableFilledCircleImage(radius: 16.0, color: nil, backgroundColor: dimColor) + + self.topDimView = UIView() + self.topDimView.backgroundColor = dimColor + self.topDimView.isUserInteractionEnabled = false + + self.bottomDimView = UIView() + self.bottomDimView.backgroundColor = dimColor + self.bottomDimView.isUserInteractionEnabled = false + + self.leftDimView = UIView() + self.leftDimView.backgroundColor = dimColor + self.leftDimView.isUserInteractionEnabled = false + + self.rightDimView = UIView() + self.rightDimView.backgroundColor = dimColor + self.rightDimView.isUserInteractionEnabled = false self.containerNode = ASDisplayNode() - self.containerNode.backgroundColor = theme.backgroundColor self.containerNode.layer.cornerRadius = 14.0 self.containerNode.layer.masksToBounds = true + self.backgroundNode = ASDisplayNode() + self.backgroundNode.backgroundColor = theme.backgroundColor + self.effectNode = ASDisplayNode(viewBlock: { - let view = UIView() - return view + return UIVisualEffectView(effect: UIBlurEffect(style: theme.backgroundType == .light ? .light : .dark)) }) self.contentNode = contentNode super.init() - self.addSubnode(self.dimmingNode) - - self.addSubnode(self.effectNode) + self.view.addSubview(self.centerDimView) + self.view.addSubview(self.topDimView) + self.view.addSubview(self.bottomDimView) + self.view.addSubview(self.leftDimView) + self.view.addSubview(self.rightDimView) + self.containerNode.addSubnode(self.effectNode) + self.containerNode.addSubnode(self.backgroundNode) self.containerNode.addSubnode(self.contentNode) self.addSubnode(self.containerNode) @@ -49,22 +79,34 @@ final class AlertControllerNode: ASDisplayNode { override func didLoad() { super.didLoad() - self.dimmingNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.dimmingNodeTapGesture(_:)))) + self.topDimView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.dimmingNodeTapGesture(_:)))) + self.bottomDimView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.dimmingNodeTapGesture(_:)))) } func updateTheme(_ theme: AlertControllerTheme) { + if let effectView = self.effectNode.view as? UIVisualEffectView { + effectView.effect = UIBlurEffect(style: theme.backgroundType == .light ? .light : .dark) + } self.containerNode.backgroundColor = theme.backgroundColor self.contentNode.updateTheme(theme) } func animateIn() { - self.dimmingNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + self.centerDimView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + self.topDimView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + self.bottomDimView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + self.leftDimView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) + self.rightDimView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3) self.containerNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25) self.containerNode.layer.animateSpring(from: 0.8 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.5, initialVelocity: 0.0, removeOnCompletion: true, additive: false, completion: nil) } func animateOut(completion: @escaping () -> Void) { - self.dimmingNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) + self.centerDimView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) + self.topDimView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) + self.bottomDimView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) + self.leftDimView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) + self.rightDimView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) self.containerNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false) self.containerNode.layer.animateScale(from: 1.0, to: 0.8, duration: 0.4, removeOnCompletion: false, completion: { _ in completion() @@ -74,8 +116,6 @@ final class AlertControllerNode: ASDisplayNode { func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { self.containerLayout = layout - transition.updateFrame(node: self.dimmingNode, frame: CGRect(origin: CGPoint(), size: layout.size)) - var insetOptions: ContainerViewLayoutInsetOptions = [.statusBar] if self.allowInputInset { insetOptions.insert(.input) @@ -89,8 +129,15 @@ final class AlertControllerNode: ASDisplayNode { let containerSize = CGSize(width: contentSize.width, height: contentSize.height) let containerFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - containerSize.width) / 2.0), y: contentAvailableFrame.minY + floor((contentAvailableFrame.size.height - containerSize.height) / 2.0)), size: containerSize) + transition.updateFrame(view: self.centerDimView, frame: containerFrame) + transition.updateFrame(view: self.topDimView, frame: CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: containerFrame.minY))) + transition.updateFrame(view: self.bottomDimView, frame: CGRect(origin: CGPoint(x: 0.0, y: containerFrame.maxY), size: CGSize(width: layout.size.width, height: layout.size.height - containerFrame.maxY))) + transition.updateFrame(view: self.leftDimView, frame: CGRect(origin: CGPoint(x: 0.0, y: containerFrame.minY), size: CGSize(width: containerFrame.minX, height: containerFrame.height))) + transition.updateFrame(view: self.rightDimView, frame: CGRect(origin: CGPoint(x: containerFrame.maxX, y: containerFrame.minY), size: CGSize(width: layout.size.width - containerFrame.maxX, height: containerFrame.height))) + transition.updateFrame(node: self.containerNode, frame: containerFrame) - transition.updateFrame(node: self.effectNode, frame: containerFrame) + transition.updateFrame(node: self.effectNode, frame: CGRect(origin: CGPoint(), size: containerFrame.size)) + transition.updateFrame(node: self.backgroundNode, frame: CGRect(origin: CGPoint(), size: containerFrame.size)) transition.updateFrame(node: self.contentNode, frame: CGRect(origin: CGPoint(), size: containerFrame.size)) } diff --git a/Display/HapticFeedback.swift b/Display/HapticFeedback.swift index 2379f0242d..2cb17e72cd 100644 --- a/Display/HapticFeedback.swift +++ b/Display/HapticFeedback.swift @@ -7,7 +7,7 @@ public enum ImpactHapticFeedbackStyle: Hashable { case heavy } -@available(iOSApplicationExtension 10.0, *) +@available(iOSApplicationExtension 10.0, iOS 10.0, *) private final class HapticFeedbackImpl { private lazy var impactGenerator: [ImpactHapticFeedbackStyle : UIImpactFeedbackGenerator] = { [.light: UIImpactFeedbackGenerator(style: .light), @@ -65,7 +65,7 @@ public final class HapticFeedback { }) } - @available(iOSApplicationExtension 10.0, *) + @available(iOSApplicationExtension 10.0, iOS 10.0, *) private func withImpl(_ f: (HapticFeedbackImpl) -> Void) { if self.impl == nil { self.impl = HapticFeedbackImpl() diff --git a/Display/NativeWindowHostView.swift b/Display/NativeWindowHostView.swift index 34db62ba67..7361f152fa 100644 --- a/Display/NativeWindowHostView.swift +++ b/Display/NativeWindowHostView.swift @@ -23,7 +23,7 @@ public final class PreviewingHostViewDelegate { } public protocol PreviewingHostView { - @available(iOSApplicationExtension 9.0, *) + @available(iOSApplicationExtension 9.0, iOS 9.0, *) var previewingDelegate: PreviewingHostViewDelegate? { get } } diff --git a/Display/NavigationController.swift b/Display/NavigationController.swift index 139f6e08cf..5477849529 100644 --- a/Display/NavigationController.swift +++ b/Display/NavigationController.swift @@ -803,7 +803,9 @@ open class NavigationController: UINavigationController, ContainableController, let appliedLayout = controllerLayout.withUpdatedInputHeight(controller.hasActiveInput ? controllerLayout.inputHeight : nil) controller.containerLayoutUpdated(appliedLayout, transition: .immediate) - strongSelf.currentPushDisposable.set((controller.ready.get() |> take(1)).start(next: { _ in + strongSelf.currentPushDisposable.set((controller.ready.get() + |> deliverOnMainQueue + |> take(1)).start(next: { _ in guard let strongSelf = self else { return } @@ -848,7 +850,9 @@ open class NavigationController: UINavigationController, ContainableController, controllerLayout.inputHeight = nil controller.containerLayoutUpdated(controllerLayout, transition: .immediate) } - self.currentPushDisposable.set((controller.ready.get() |> take(1)).start(next: { [weak self] _ in + self.currentPushDisposable.set((controller.ready.get() + |> deliverOnMainQueue + |> take(1)).start(next: { [weak self] _ in if let strongSelf = self { ready?.set(true) var controllers = strongSelf.viewControllers @@ -877,7 +881,9 @@ open class NavigationController: UINavigationController, ContainableController, controllerLayout.inputHeight = nil controller.containerLayoutUpdated(controllerLayout, transition: .immediate) } - strongSelf.currentPushDisposable.set((controller.ready.get() |> take(1)).start(next: { _ in + strongSelf.currentPushDisposable.set((controller.ready.get() + |> deliverOnMainQueue + |> take(1)).start(next: { _ in guard let strongSelf = self else { return } @@ -901,7 +907,9 @@ open class NavigationController: UINavigationController, ContainableController, controllerLayout.inputHeight = nil controller.containerLayoutUpdated(controllerLayout, transition: .immediate) } - strongSelf.currentPushDisposable.set((controller.ready.get() |> take(1)).start(next: { _ in + strongSelf.currentPushDisposable.set((controller.ready.get() + |> deliverOnMainQueue + |> take(1)).start(next: { _ in guard let strongSelf = self else { return } diff --git a/Display/TextAlertController.swift b/Display/TextAlertController.swift index b8474e9967..7b4d6cc62a 100644 --- a/Display/TextAlertController.swift +++ b/Display/TextAlertController.swift @@ -2,6 +2,8 @@ import Foundation import UIKit import AsyncDisplayKit +private let alertWidth: CGFloat = 270.0 + public enum TextAlertActionType { case genericAction case defaultAction @@ -20,18 +22,20 @@ public struct TextAlertAction { } } -private final class TextAlertContentActionNode: HighlightableButtonNode { - private let backgroundNode: ASDisplayNode - +public final class TextAlertContentActionNode: HighlightableButtonNode { + private var theme: AlertControllerTheme let action: TextAlertAction - init(theme: AlertControllerTheme, action: TextAlertAction) { + private let backgroundNode: ASDisplayNode + + public init(theme: AlertControllerTheme, action: TextAlertAction) { + self.theme = theme + self.action = action + self.backgroundNode = ASDisplayNode() self.backgroundNode.isLayerBacked = true self.backgroundNode.alpha = 0.0 - self.action = action - super.init() self.titleNode.maximumNumberOfLines = 2 @@ -54,16 +58,27 @@ private final class TextAlertContentActionNode: HighlightableButtonNode { self.updateTheme(theme) } - func updateTheme(_ theme: AlertControllerTheme) { + public var actionEnabled: Bool = true { + didSet { + self.isUserInteractionEnabled = self.actionEnabled + self.updateTitle() + } + } + + public func updateTheme(_ theme: AlertControllerTheme) { + self.theme = theme self.backgroundNode.backgroundColor = theme.highlightedItemColor - + self.updateTitle() + } + + private func updateTitle() { var font = Font.regular(17.0) - var color = theme.accentColor + var color: UIColor switch self.action.type { case .defaultAction, .genericAction: - break + color = self.actionEnabled ? self.theme.accentColor : self.theme.disabledColor case .destructiveAction: - color = theme.destructiveColor + color = self.actionEnabled ? self.theme.destructiveColor : self.theme.disabledColor } switch self.action.type { case .defaultAction: @@ -74,7 +89,7 @@ private final class TextAlertContentActionNode: HighlightableButtonNode { self.setAttributedTitle(NSAttributedString(string: self.action.title, font: font, textColor: color, paragraphAlignment: .center), for: []) } - override func didLoad() { + override public func didLoad() { super.didLoad() self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) @@ -84,7 +99,7 @@ private final class TextAlertContentActionNode: HighlightableButtonNode { self.action.action() } - override func layout() { + override public func layout() { super.layout() self.backgroundNode.frame = self.bounds @@ -201,16 +216,17 @@ public final class TextAlertContentNode: AlertContentNode { override public func updateTheme(_ theme: AlertControllerTheme) { self.theme = theme - let textFont: UIFont - if let titleNode = self.titleNode { - titleNode.attributedText = NSAttributedString(string: titleNode.attributedText?.string ?? "", font: Font.medium(17.0), textColor: theme.primaryColor, paragraphAlignment: .center) - textFont = Font.regular(13.0) - } else { - textFont = Font.semibold(17.0) + if let titleNode = self.titleNode, let attributedText = titleNode.attributedText { + let updatedText = NSMutableAttributedString(attributedString: attributedText) + updatedText.addAttribute(NSAttributedStringKey.foregroundColor, value: theme.primaryColor, range: NSRange(location: 0, length: updatedText.length)) + titleNode.attributedText = updatedText } - - self.textNode.attributedText = NSAttributedString(string: self.textNode.attributedText?.string ?? "", font: textFont, textColor: theme.primaryColor, paragraphAlignment: .center) - + if let attributedText = self.textNode.attributedText { + let updatedText = NSMutableAttributedString(attributedString: attributedText) + updatedText.addAttribute(NSAttributedStringKey.foregroundColor, value: theme.primaryColor, range: NSRange(location: 0, length: updatedText.length)) + self.textNode.attributedText = updatedText + } + self.actionNodesSeparator.backgroundColor = theme.separatorColor for actionNode in self.actionNodes { actionNode.updateTheme(theme) @@ -229,6 +245,9 @@ public final class TextAlertContentNode: AlertContentNode { let insets = UIEdgeInsets(top: 18.0, left: 18.0, bottom: 18.0, right: 18.0) + var size = size + size.width = min(size.width, alertWidth) + var titleSize: CGSize? if let titleNode = self.titleNode { titleSize = titleNode.measure(CGSize(width: size.width - insets.left - insets.right, height: CGFloat.greatestFiniteMagnitude)) @@ -265,10 +284,8 @@ public final class TextAlertContentNode: AlertContentNode { actionsHeight = actionButtonHeight * CGFloat(self.actionNodes.count) } - if let titleNode = titleNode, let titleSize = titleSize { - var contentWidth = max(max(titleSize.width, textSize.width), minActionsWidth) - contentWidth = max(contentWidth, 150.0) - + let contentWidth = alertWidth - insets.left - insets.right + if let titleNode = self.titleNode, let titleSize = titleSize { let spacing: CGFloat = 6.0 let titleFrame = CGRect(origin: CGPoint(x: insets.left + floor((contentWidth - titleSize.width) / 2.0), y: insets.top), size: titleSize) transition.updateFrame(node: titleNode, frame: titleFrame) @@ -278,9 +295,6 @@ public final class TextAlertContentNode: AlertContentNode { resultSize = CGSize(width: contentWidth + insets.left + insets.right, height: titleSize.height + spacing + textSize.height + actionsHeight + insets.top + insets.bottom) } else { - var contentWidth = max(textSize.width, minActionsWidth) - contentWidth = max(contentWidth, 150.0) - let textFrame = CGRect(origin: CGPoint(x: insets.left + floor((contentWidth - textSize.width) / 2.0), y: insets.top), size: textSize) transition.updateFrame(node: self.textNode, frame: textFrame) diff --git a/Display/ViewController.swift b/Display/ViewController.swift index 949dce2011..fea78f9d79 100644 --- a/Display/ViewController.swift +++ b/Display/ViewController.swift @@ -441,7 +441,7 @@ open class ViewControllerPresentationArguments { open func dismiss(completion: (() -> Void)? = nil) { } - @available(iOSApplicationExtension 9.0, *) + @available(iOSApplicationExtension 9.0, iOS 9.0, *) open func registerForPreviewing(with delegate: UIViewControllerPreviewingDelegate, sourceView: UIView, theme: PeekControllerTheme, onlyNative: Bool) { if self.traitCollection.forceTouchCapability == .available { let _ = super.registerForPreviewing(with: delegate, sourceView: sourceView) @@ -455,7 +455,7 @@ open class ViewControllerPresentationArguments { } } - @available(iOSApplicationExtension 9.0, *) + @available(iOSApplicationExtension 9.0, iOS 9.0, *) public func registerForPreviewingNonNative(with delegate: UIViewControllerPreviewingDelegate, sourceView: UIView, theme: PeekControllerTheme) { if self.traitCollection.forceTouchCapability != .available { if self.previewingContext == nil { @@ -467,7 +467,7 @@ open class ViewControllerPresentationArguments { } } - @available(iOSApplicationExtension 9.0, *) + @available(iOSApplicationExtension 9.0, iOS 9.0, *) open override func unregisterForPreviewing(withContext previewing: UIViewControllerPreviewing) { if self.previewingContext != nil { self.previewingContext = nil diff --git a/Display/ViewControllerPreviewing.swift b/Display/ViewControllerPreviewing.swift index e2442f3168..fafdce84e9 100644 --- a/Display/ViewControllerPreviewing.swift +++ b/Display/ViewControllerPreviewing.swift @@ -3,7 +3,7 @@ import UIKit import AsyncDisplayKit import SwiftSignalKit -@available(iOSApplicationExtension 9.0, *) +@available(iOSApplicationExtension 9.0, iOS 9.0, *) private final class ViewControllerPeekContent: PeekControllerContent { private let controller: ViewController private let menu: [PeekControllerMenuItem] @@ -85,7 +85,7 @@ private final class ViewControllerPeekContentNode: ASDisplayNode, PeekController } } -@available(iOSApplicationExtension 9.0, *) +@available(iOSApplicationExtension 9.0, iOS 9.0, *) final class SimulatedViewControllerPreviewing: NSObject, UIViewControllerPreviewing { weak var delegateImpl: UIViewControllerPreviewingDelegate? var delegate: UIViewControllerPreviewingDelegate { diff --git a/Display/VolumeControlStatusBar.swift b/Display/VolumeControlStatusBar.swift index 1ecb917183..35501ba9d5 100644 --- a/Display/VolumeControlStatusBar.swift +++ b/Display/VolumeControlStatusBar.swift @@ -9,8 +9,13 @@ private let volumeParameterKey = "AVSystemController_AudioVolumeNotificationPara private let changeReasonParameterKey = "AVSystemController_AudioVolumeChangeReasonNotificationParameter" private let explicitChangeReasonValue = "ExplicitVolumeChange" +private final class VolumeView: MPVolumeView { + @objc func _updateWirelessRouteStatus() { + } +} + final class VolumeControlStatusBar: UIView { - private let control: MPVolumeView + private let control: VolumeView private var observer: Any? private var currentValue: Float @@ -20,7 +25,7 @@ final class VolumeControlStatusBar: UIView { private var ignoreAdjustmentOnce = false init(frame: CGRect, shouldBeVisible: Signal) { - self.control = MPVolumeView(frame: CGRect(origin: CGPoint(x: -100.0, y: -100.0), size: CGSize(width: 100.0, height: 20.0))) + self.control = VolumeView(frame: CGRect(origin: CGPoint(x: -100.0, y: -100.0), size: CGSize(width: 100.0, height: 20.0))) self.control.alpha = 0.0001 self.currentValue = AVAudioSession.sharedInstance().outputVolume diff --git a/Display.xcodeproj/project.pbxproj b/Display_Xcode.xcodeproj/project.pbxproj similarity index 99% rename from Display.xcodeproj/project.pbxproj rename to Display_Xcode.xcodeproj/project.pbxproj index 14e2d0aeba..8edc164afd 100644 --- a/Display.xcodeproj/project.pbxproj +++ b/Display_Xcode.xcodeproj/project.pbxproj @@ -817,7 +817,7 @@ }; }; }; - buildConfigurationList = D05CC25D1B69316F00E235A3 /* Build configuration list for PBXProject "Display" */; + buildConfigurationList = D05CC25D1B69316F00E235A3 /* Build configuration list for PBXProject "Display_Xcode" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -1708,7 +1708,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D05CC25D1B69316F00E235A3 /* Build configuration list for PBXProject "Display" */ = { + D05CC25D1B69316F00E235A3 /* Build configuration list for PBXProject "Display_Xcode" */ = { isa = XCConfigurationList; buildConfigurations = ( D05CC2751B69316F00E235A3 /* DebugHockeyapp */, diff --git a/Display.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Display_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Display.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Display_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata