class CarPlayPlaylist { let radioPlayer = FRadioPlayer.shared var playerData: [Players] = [] var isFromCarPlay: Bool = false var playButtonStatus: Bool = false func load(_ completion: @escaping (Error?) -> Void) { self.playerData = SettingsDataManager.sharedInstance.playerData ?? [] completion(nil) } func play (playURL: URL) { isFromCarPlay = true self.radioPlayer.radioURL = playURL self.radioPlayer.play() } func setupCommandCenter () { MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "Current Playing song"] MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 0.0 let commandCenter = MPRemoteCommandCenter.shared() commandCenter.playCommand.isEnabled = true commandCenter.pauseCommand.isEnabled = true commandCenter.playCommand.addTarget { [weak self] (event) -> MPRemoteCommandHandlerStatus in self?.radioPlayer.play() // NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationCenterConstants.carPlayDidPlay), object: nil, userInfo: nil) return .success } commandCenter.pauseCommand.addTarget { [weak self] (event) -> MPRemoteCommandHandlerStatus in self?.radioPlayer.pause() // NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationCenterConstants.carPlayDidPause), object: nil, userInfo: nil) return .success } } extension CarPlayPlaylist { func addCommandCenterNotificationObservers() { NotificationCenter.default.addObserver(self, selector: #selector(commandCenterDidPlay), name: NSNotification.Name(rawValue: NotificationCenterConstants.commandCenterDidPlay), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(commandCenterDidPause), name: NSNotification.Name(rawValue: NotificationCenterConstants.commandCenterDidPause), object: nil) } func removeCommandCenterObservers() { NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NotificationCenterConstants.commandCenterDidPlay), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NotificationCenterConstants.commandCenterDidPause), object: nil) } @objc func commandCenterDidPlay() { // Playback rate should change the playback status MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 0.0 } @objc func commandCenterDidPause() { // Playback rate should change the playback status MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 1.0 } }