Skip to content

Commit 9634203

Browse files
committed
Changed MusicController to singleton and added NotificationCenter functionality to listen for playback state changes in Apple Music. Now changes in Apple Music app are reflected on PineTime interface.
1 parent a187e25 commit 9634203

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

InfiniLink/BLE/BLEUpdateHandler.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct BLEUpdatedCharacteristicHandler {
3232
switch characteristic.uuid {
3333
case bleManager.cbuuidList.musicControl:
3434
let musicControl = [UInt8](characteristic.value!)
35-
MusicController().controlMusic(controlNumber: Int(musicControl[0]))
35+
MusicController.shared.controlMusic(controlNumber: Int(musicControl[0]))
3636
case bleManager.cbuuidList.hrm:
3737
let bpm = heartRate(from: characteristic)
3838
bleManager.heartBPM = Double(bpm)

InfiniLink/Music/MusicController.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Foundation
99
import MediaPlayer
10+
import NotificationCenter
1011

1112
class MusicController {
1213
/*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
@@ -16,7 +17,7 @@ class MusicController {
1617

1718
TODO: figure out the formatting that PineTime expects for time elapsed/total time. Hex value of 0101 = 12:32, 0102 = 04:48. Writing decimal does nothing. ASCII also gives wacky results
1819
*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*/
19-
20+
static let shared = MusicController()
2021
let bleManager = BLEManager.shared
2122

2223
var musicPlayer = MPMusicPlayerController.systemMusicPlayer
@@ -32,6 +33,15 @@ class MusicController {
3233
enum musicState {
3334
case play, pause, nextTrack, prevTrack
3435
}
36+
init() {
37+
musicPlayer.beginGeneratingPlaybackNotifications()
38+
NotificationCenter.default.addObserver(self, selector: #selector(self.onNotificationReceipt(_:)), name: .MPMusicPlayerControllerPlaybackStateDidChange, object: nil)
39+
}
40+
41+
@objc func onNotificationReceipt(_ notification: Notification) {
42+
musicPlaying = musicPlayer.playbackState.rawValue
43+
updateMusicInformation(songInfo: getCurrentSongInfo())
44+
}
3545

3646
func controlMusic(controlNumber: Int) {
3747

0 commit comments

Comments
 (0)