import UIKit import NotificationCenter import BuildConfig import WidgetItems import AppLockState private func rootPathForBasePath(_ appGroupPath: String) -> String { return appGroupPath + "/telegram-data" } @objc(TodayViewController) class TodayViewController: UIViewController, NCWidgetProviding { private var initializedInterface = false private var buildConfig: BuildConfig? private var primaryColor: UIColor = .black private var placeholderLabel: UILabel? override func viewDidLoad() { super.viewDidLoad() let appBundleIdentifier = Bundle.main.bundleIdentifier! guard let lastDotRange = appBundleIdentifier.range(of: ".", options: [.backwards]) else { return } let baseAppBundleId = String(appBundleIdentifier[.. Void)) { completionHandler(.newData) } @available(iOSApplicationExtension 10.0, *) func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { } private var widgetData: WidgetData? private func setWidgetData(widgetData: WidgetData, presentationData: WidgetPresentationData) { self.widgetData = widgetData self.peerViews.forEach { $0.removeFromSuperview() } self.peerViews = [] switch widgetData { case .notAuthorized, .disabled: break case let .peers(peers): for peer in peers.peers { let peerView = PeerView(primaryColor: self.primaryColor, accountPeerId: peers.accountPeerId, peer: peer, tapped: { [weak self] in if let strongSelf = self, let buildConfig = strongSelf.buildConfig { if let url = URL(string: "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(peer.id)") { strongSelf.extensionContext?.open(url, completionHandler: nil) } } }) self.view.addSubview(peerView) self.peerViews.append(peerView) } } if self.peerViews.isEmpty { self.setPlaceholderText(presentationData.applicationStartRequiredString) } else { self.placeholderLabel?.removeFromSuperview() self.placeholderLabel = nil } if let size = self.validLayout { self.updateLayout(size: size) } } private var validLayout: CGSize? private var peerViews: [PeerView] = [] override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() self.updateLayout(size: self.view.bounds.size) } private func updateLayout(size: CGSize) { self.validLayout = size if let placeholderLabel = self.placeholderLabel { placeholderLabel.frame = CGRect(origin: CGPoint(x: floor((size.width - placeholderLabel.bounds.width) / 2.0), y: floor((size.height - placeholderLabel.bounds.height) / 2.0)), size: placeholderLabel.bounds.size) } let peerSize = CGSize(width: 70.0, height: 100.0) var peerFrames: [CGRect] = [] var offset: CGFloat = 0.0 for _ in self.peerViews { let peerFrame = CGRect(origin: CGPoint(x: offset, y: 10.0), size: peerSize) offset += peerFrame.size.width if peerFrame.maxX > size.width { break } peerFrames.append(peerFrame) } var totalSize: CGFloat = 0.0 for i in 0 ..< peerFrames.count { totalSize += peerFrames[i].width } let spacing: CGFloat = floor((size.width - totalSize) / CGFloat(peerFrames.count)) offset = floor(spacing / 2.0) for i in 0 ..< peerFrames.count { let peerView = self.peerViews[i] peerView.frame = CGRect(origin: CGPoint(x: offset, y: 16.0), size: peerFrames[i].size) peerView.updateLayout(size: peerFrames[i].size) offset += peerFrames[i].width + spacing } } }