react-native-queue-player 1.0.3 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/android/src/main/java/com/margelo/nitro/queueplayer/BufferStateTranslator.kt +1 -1
  2. package/android/src/main/java/com/margelo/nitro/queueplayer/CarConnectionState.kt +46 -0
  3. package/android/src/main/java/com/margelo/nitro/queueplayer/Equalizer.kt +1 -3
  4. package/android/src/main/java/com/margelo/nitro/queueplayer/HeadlessJsMediaService.kt +2 -4
  5. package/android/src/main/java/com/margelo/nitro/queueplayer/LookaheadCacheWriter.kt +7 -9
  6. package/android/src/main/java/com/margelo/nitro/queueplayer/MilestoneTracker.kt +1 -2
  7. package/android/src/main/java/com/margelo/nitro/queueplayer/NotificationProvider.kt +6 -0
  8. package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackService.kt +33 -25
  9. package/android/src/main/java/com/margelo/nitro/queueplayer/PlaybackServiceCallback.kt +16 -1
  10. package/android/src/main/java/com/margelo/nitro/queueplayer/ProgressEmissionGate.kt +1 -1
  11. package/android/src/main/java/com/margelo/nitro/queueplayer/QueueMutationArithmetic.kt +1 -1
  12. package/android/src/main/java/com/margelo/nitro/queueplayer/QueueSkipArithmetic.kt +1 -1
  13. package/android/src/main/java/com/margelo/nitro/queueplayer/RemoteCommandDeduper.kt +1 -1
  14. package/android/src/main/java/com/margelo/nitro/queueplayer/SessionCommandForwardingPlayer.kt +9 -0
  15. package/android/src/main/java/com/margelo/nitro/queueplayer/SleepTimerCore.kt +1 -1
  16. package/android/src/main/java/com/margelo/nitro/queueplayer/TrackPlayer.kt +40 -27
  17. package/android/src/main/java/com/margelo/nitro/queueplayer/TransportStateTranslator.kt +2 -2
  18. package/android/src/main/res/values/strings.xml +0 -3
  19. package/android/src/test/java/com/margelo/nitro/queueplayer/AudioPipelineRenderersFactoryTest.kt +2 -5
  20. package/android/src/test/java/com/margelo/nitro/queueplayer/AvrcpMetadataTest.kt +1 -0
  21. package/android/src/test/java/com/margelo/nitro/queueplayer/BrowseCallbackRegistryTest.kt +1 -4
  22. package/android/src/test/java/com/margelo/nitro/queueplayer/CrossfadeEngineLifecycleTest.kt +1 -2
  23. package/android/src/test/java/com/margelo/nitro/queueplayer/CrossfadeEngineReplayGainTest.kt +3 -7
  24. package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerEngineTest.kt +1 -2
  25. package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerKtTest.kt +1 -3
  26. package/android/src/test/java/com/margelo/nitro/queueplayer/EqualizerLegacyEngineTest.kt +2 -3
  27. package/android/src/test/java/com/margelo/nitro/queueplayer/FFTProcessorTeeTest.kt +1 -2
  28. package/android/src/test/java/com/margelo/nitro/queueplayer/GaplessEngineLifecycleTest.kt +0 -2
  29. package/android/src/test/java/com/margelo/nitro/queueplayer/GaplessEngineReplayGainTest.kt +3 -8
  30. package/android/src/test/java/com/margelo/nitro/queueplayer/HeadlessJsMediaServiceTest.kt +2 -4
  31. package/android/src/test/java/com/margelo/nitro/queueplayer/MediaButtonDispatchTest.kt +1 -0
  32. package/android/src/test/java/com/margelo/nitro/queueplayer/MediaButtonPreferencesTest.kt +99 -0
  33. package/android/src/test/java/com/margelo/nitro/queueplayer/MediaItemBuilderTest.kt +2 -3
  34. package/android/src/test/java/com/margelo/nitro/queueplayer/MilestoneTrackerTest.kt +1 -3
  35. package/android/src/test/java/com/margelo/nitro/queueplayer/NowPlayingFormatExtractorTest.kt +1 -2
  36. package/android/src/test/java/com/margelo/nitro/queueplayer/PitchAwareAudioProcessorChainTest.kt +1 -1
  37. package/android/src/test/java/com/margelo/nitro/queueplayer/PitchCorrectionTest.kt +2 -2
  38. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceCallbackTest.kt +148 -7
  39. package/android/src/test/java/com/margelo/nitro/queueplayer/PlaybackServiceLifecycleTest.kt +2 -0
  40. package/android/src/test/java/com/margelo/nitro/queueplayer/ProgressEmissionGateTest.kt +1 -3
  41. package/android/src/test/java/com/margelo/nitro/queueplayer/SessionCommandForwardingPlayerTest.kt +58 -2
  42. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerEventsTest.kt +1 -2
  43. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerMutationTest.kt +2 -4
  44. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerPitchCorrectionTest.kt +1 -2
  45. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerPlaybackModeTest.kt +2 -3
  46. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerReplayGainTest.kt +1 -3
  47. package/android/src/test/java/com/margelo/nitro/queueplayer/TrackPlayerTransportTest.kt +2 -5
  48. package/android/src/test/java/com/margelo/nitro/queueplayer/VisualizerKtTest.kt +1 -2
  49. package/ios/AVPlayerItemQueueItemId.swift +2 -2
  50. package/ios/AVQueueBuilder.swift +12 -14
  51. package/ios/CarPlayCoordinator.swift +38 -0
  52. package/ios/CarPlayQueueBuilder.swift +82 -0
  53. package/ios/CarPlayQueueProvider.swift +73 -0
  54. package/ios/CarPlaySceneDelegate.swift +81 -7
  55. package/ios/CrossfadeEngine.swift +4 -5
  56. package/ios/InputGuards.swift +3 -3
  57. package/ios/LookaheadCache.swift +4 -6
  58. package/ios/LookaheadCachePrefetcher.swift +1 -1
  59. package/ios/MilestoneTracker.swift +1 -2
  60. package/ios/PlaybackErrorMapping.swift +6 -7
  61. package/ios/PlayerStateDerivation.swift +1 -2
  62. package/ios/ProgressEmissionGate.swift +1 -1
  63. package/ios/QueueMutationArithmetic.swift +2 -2
  64. package/ios/QueueSkipArithmetic.swift +8 -12
  65. package/ios/Siri/PlayMediaIntentHandler.swift +1 -5
  66. package/ios/SleepTimerCore.swift +1 -1
  67. package/ios/Tests/AudioTapProviderReplayGainTests.swift +5 -9
  68. package/ios/Tests/CarPlayBridgeTests.swift +2 -6
  69. package/ios/Tests/CarPlayBrowseBuilderTests.swift +1 -2
  70. package/ios/Tests/CarPlayCoordinatorTests.swift +35 -0
  71. package/ios/Tests/CarPlayQueueBuilderTests.swift +145 -0
  72. package/ios/Tests/EQProcessorTests.swift +1 -4
  73. package/ios/Tests/EQTapTests.swift +1 -2
  74. package/ios/Tests/EqualizerAudioMixProviderTests.swift +3 -4
  75. package/ios/Tests/EqualizerHybridTests.swift +1 -3
  76. package/ios/Tests/FFTProcessorTests.swift +10 -10
  77. package/ios/Tests/GaplessEngineLifecycleTests.swift +0 -2
  78. package/ios/Tests/LookaheadCacheEvictionTests.swift +1 -4
  79. package/ios/Tests/MetadataReaderTests.swift +0 -2
  80. package/ios/Tests/MilestoneTrackerTests.swift +1 -3
  81. package/ios/Tests/NowPlayingFormatExtractorTests.swift +3 -4
  82. package/ios/Tests/PlaybackErrorMappingTests.swift +0 -3
  83. package/ios/Tests/PlaybackModeStateMachineTests.swift +5 -9
  84. package/ios/Tests/PlayerStateDerivationTests.swift +1 -2
  85. package/ios/Tests/ProgressEmissionGateTests.swift +1 -3
  86. package/ios/Tests/QueueMutationArithmeticTests.swift +0 -3
  87. package/ios/Tests/RemoteCommandsTests.swift +2 -5
  88. package/ios/Tests/ReplayGainExtractorTests.swift +0 -5
  89. package/ios/Tests/SkipCapabilityTests.swift +4 -7
  90. package/ios/Tests/VoiceDonationTests.swift +4 -4
  91. package/ios/TrackPlayer.swift +52 -2
  92. package/lib/typescript/TrackPlayer.nitro.d.ts +17 -0
  93. package/lib/typescript/TrackPlayer.nitro.d.ts.map +1 -1
  94. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +5 -0
  95. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +1 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/queueplayer/HybridTrackPlayerSpec.kt +4 -0
  97. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +8 -0
  98. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +1 -0
  99. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +12 -0
  100. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +1 -0
  101. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +1 -0
  102. package/package.json +1 -1
  103. package/src/TrackPlayer.nitro.ts +18 -0
@@ -587,6 +587,22 @@ class TrackPlayer: HybridTrackPlayerSpec {
587
587
  canSkipNext: self.cachedSkipCapability.canSkipNext,
588
588
  canSkipPrevious: self.cachedSkipCapability.canSkipPrevious
589
589
  )
590
+ // Route CarPlay Up Next row taps through the same steps the
591
+ // `skipToIndex` Hybrid runs — engine guard, index validation,
592
+ // and cast routing (a tap during an active cast session jumps
593
+ // the RECEIVER; the local engine stays paused, so a local index
594
+ // write would desync from it) — then the local index write.
595
+ // Set + invoked on main; the scene delegate calls it from the
596
+ // Up Next row handler.
597
+ CarPlayCoordinator.shared.skipToIndexHandler = { [weak self] index in
598
+ guard let self = self else { return }
599
+ guard self.engine != nil else { return }
600
+ guard let target = InputGuards.validQueueIndex(
601
+ Double(index), count: self.tracks.count
602
+ ) else { return }
603
+ if CastTransportRouter.routeSkipToIndex(index: target) { return }
604
+ self.applyNewCurrentIndex(newIndex: target, reason: .userSkipToIndex)
605
+ }
590
606
  // Refresh on every configure() so a header / UA update lands
591
607
  // on the next artwork resolve. Live config — read fresh on
592
608
  // each track-change resolve.
@@ -891,6 +907,8 @@ class TrackPlayer: HybridTrackPlayerSpec {
891
907
  // configure cycle.
892
908
  let coordinator = CarPlayCoordinator.shared
893
909
  coordinator.dataProvider.setSnapshot(nil)
910
+ coordinator.queueProvider.setSnapshot(nil)
911
+ coordinator.skipToIndexHandler = nil
894
912
  coordinator.pending.clear()
895
913
  coordinator.loader.clearCache()
896
914
  // engine.release() drains the underlying AVQueuePlayer's items +
@@ -2050,8 +2068,7 @@ class TrackPlayer: HybridTrackPlayerSpec {
2050
2068
 
2051
2069
  /// Map the Nitrogen-generated `RepeatMode` enum onto the pure-Swift
2052
2070
  /// `QueueSkipRepeatMode` so `QueueSkipArithmetic` can stay off the
2053
- /// Swift ↔ C++ interop path (needed so XCTest targets reach the
2054
- /// arithmetic without C++-interop friction).
2071
+ /// Swift ↔ C++ interop path.
2055
2072
  private func repeatModeAsSkipMode() -> QueueSkipRepeatMode {
2056
2073
  switch self.repeatModeState {
2057
2074
  case .off: return .off
@@ -2090,6 +2107,11 @@ class TrackPlayer: HybridTrackPlayerSpec {
2090
2107
  /// - `destroy` (resets to (false, false) so a final emit lets
2091
2108
  /// subscribers know the player is gone)
2092
2109
  internal func recomputeCapabilities() {
2110
+ // Every queue / current-index / repeat-mode change funnels through here,
2111
+ // so it's the single point that keeps the CarPlay Up Next mirror current
2112
+ // — done before the skip-capability dedup guard below so reorder/metadata
2113
+ // changes (which don't flip skip capability) still refresh the mirror.
2114
+ syncCarPlayQueueMirror()
2093
2115
  let mode = repeatModeAsSkipMode()
2094
2116
  let count = tracks.count
2095
2117
  let cur = currentTrackIndex
@@ -2110,6 +2132,30 @@ class TrackPlayer: HybridTrackPlayerSpec {
2110
2132
  )
2111
2133
  }
2112
2134
 
2135
+ /// Mirror the live queue + current index into the process-wide
2136
+ /// [CarPlayQueueProvider] so the CarPlay Up Next surface renders the
2137
+ /// current playback queue without round-tripping through JS. Driven
2138
+ /// from `recomputeCapabilities()`, which every queue / current-index /
2139
+ /// repeat-mode change funnels through. An empty queue clears the
2140
+ /// mirror to `nil` so the Up Next button hides. Main-thread only
2141
+ /// (queue state is main-bound).
2142
+ internal func syncCarPlayQueueMirror() {
2143
+ guard !self.tracks.isEmpty else {
2144
+ CarPlayCoordinator.shared.queueProvider.setSnapshot(nil)
2145
+ return
2146
+ }
2147
+ let entries = self.tracks.map { track in
2148
+ CarPlayQueueEntry(
2149
+ title: track.title ?? "",
2150
+ subtitle: track.artist ?? track.album,
2151
+ artworkUrl: track.artworkUrl
2152
+ )
2153
+ }
2154
+ CarPlayCoordinator.shared.queueProvider.setSnapshot(
2155
+ CarPlayQueueSnapshot(entries: entries, currentIndex: self.currentTrackIndex)
2156
+ )
2157
+ }
2158
+
2113
2159
  /// Apply a new `currentTrackIndex` and sync the AVQueuePlayer.
2114
2160
  ///
2115
2161
  /// **Forward skip** (newIndex > oldIndex) — surgical trim of items
@@ -4184,6 +4230,10 @@ class TrackPlayer: HybridTrackPlayerSpec {
4184
4230
  return CarPlayCoordinator.shared.bridge.registerOnCarDisconnect(callback)
4185
4231
  }
4186
4232
 
4233
+ func isCarConnected() throws -> Bool {
4234
+ return CarPlayCoordinator.shared.isCarConnected
4235
+ }
4236
+
4187
4237
  // MARK: - Lookahead cache — runtime config + status surface
4188
4238
  func setLookaheadCache(config: LookaheadCacheConfig) throws -> Promise<Void> {
4189
4239
  return Promise<Void>.async {
@@ -473,6 +473,23 @@ export interface TrackPlayer extends HybridObject<{
473
473
  * automotive-specific subscriptions the consumer set up on connect.
474
474
  */
475
475
  onCarDisconnect(callback: () => void): () => void;
476
+ /**
477
+ * Whether an automotive controller is connected right now. The
478
+ * pull-based counterpart to `onCarConnect` / `onCarDisconnect`: it holds
479
+ * the same state those events transition between, so a consumer that
480
+ * missed the connect event — e.g. it fired before the consumer registered
481
+ * its handler in this app process — can still gate car-only work, like
482
+ * pushing browse snapshots, on the current connection.
483
+ *
484
+ * `true` between the first automotive controller connecting and the last
485
+ * one dropping. "Automotive controller" is the same classification the
486
+ * connect/disconnect events use: the CarPlay scene on iOS; the headless
487
+ * Android Auto / Wear / Assistant controllers on Android. Returns `false`
488
+ * before the first connection and after a full disconnect. The state is
489
+ * process-scoped: a fresh app process starts disconnected until a
490
+ * controller connects within it.
491
+ */
492
+ isCarConnected(): boolean;
476
493
  /**
477
494
  * Fires when the platform's media service is freshly bound to the JS
478
495
  * side. `reason = 'first-bind'` for the initial bind during a JS-
@@ -1 +1 @@
1
- {"version":3,"file":"TrackPlayer.nitro.d.ts","sourceRoot":"","sources":["../../src/TrackPlayer.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EAChB,MAAM,SAAS,CAAC;AAMjB,MAAM,WAAW,WACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IAEzD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;;;;;;;;OAUG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD;;;;;;;;;OASG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D;;;;;;;;;;OAUG;IACH,QAAQ,IAAI,SAAS,EAAE,CAAC;IACxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB;;;;;;;OAOG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,8DAA8D;IAC9D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGhC,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,eAAe,IAAI,YAAY,CAAC;IAChC;;;;;;;;OAQG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,wBAAwB;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;;;;;OAOG;IACH,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE;;;;;;;;;;OAUG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,oEAAoE;IACpE,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;;;;;;;;;;;;;;OAeG;IACH,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAGvC,QAAQ,IAAI,WAAW,CAAC;IACxB;;;;;;;OAOG;IACH,oBAAoB,IAAI,MAAM,CAAC;IAC/B;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,IAAI,WAAW,GAAG,SAAS,CAAC;IACjD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,qEAAqE;IACrE,sBAAsB,IAAI,mBAAmB,CAAC;IAC9C,SAAS,IAAI,MAAM,CAAC;IACpB,6EAA6E;IAC7E,iBAAiB,IAAI,oBAAoB,CAAC;IAC1C;;;;OAIG;IACH,cAAc,IAAI,WAAW,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,IAAI,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,eAAe,IAAI,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;;OAeG;IACH,cAAc,IAAI,OAAO,CAAC;IAC1B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,IAAI,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,iBAAiB,IAAI,cAAc,CAAC;IACpC,mEAAmE;IACnE,aAAa,IAAI,eAAe,CAAC;IAGjC,aAAa,CACX,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAChE,MAAM,IAAI,CAAC;IACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,aAAa,CACX,QAAQ,EAAE,CACR,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,MAAM,GAAG,SAAS,KAChC,IAAI,GACR,MAAM,IAAI,CAAC;IACd;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,mBAAmB,CACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GACxD,MAAM,IAAI,CAAC;IACd,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7C;;;;;;;;;;;;;;;;;OAiBG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,GAC7C,MAAM,IAAI,CAAC;IACd;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3E;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE;;;;;OAKG;IACH,qBAAqB,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAO9E;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAElD;;;;OAIG;IACH,eAAe,CACb,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,GACpD,MAAM,IAAI,CAAC;IAEd;;;;;OAKG;IACH,eAAe,CACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,GACjD,MAAM,IAAI,CAAC;IAEd;;;;;;;;;;;;OAYG;IACH,uBAAuB,CACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,GAC9D,MAAM,IAAI,CAAC;IAEd;;;OAGG;IACH,mBAAmB,CACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,GAClD,MAAM,IAAI,CAAC;IAEd;;;;;;;;;;;;OAYG;IACH,qBAAqB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IAEzD;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAE/C;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAElD;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CACZ,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,GAC7C,MAAM,IAAI,CAAC;IAGd;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,uBAAuB,IAAI,WAAW,CAAC;IACvC;;;;;;OAMG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,2CAA2C;IAC3C,iBAAiB,IAAI,cAAc,CAAC;IAEpC;;;;;;;;OAQG;IACH,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAC/C;;;;;;OAMG;IACH,wBAAwB,CACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,GAClD,MAAM,IAAI,CAAC;CACf"}
1
+ {"version":3,"file":"TrackPlayer.nitro.d.ts","sourceRoot":"","sources":["../../src/TrackPlayer.nitro.ts"],"names":[],"mappings":"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"}
@@ -949,6 +949,11 @@ namespace margelo::nitro::queueplayer {
949
949
  }
950
950
  }();
951
951
  }
952
+ bool JHybridTrackPlayerSpec::isCarConnected() {
953
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isCarConnected");
954
+ auto __result = method(_javaPart);
955
+ return static_cast<bool>(__result);
956
+ }
952
957
  std::function<void()> JHybridTrackPlayerSpec::onServiceReady(const std::function<void(ServiceReadyReason /* reason */)>& callback) {
953
958
  static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>(jni::alias_ref<JFunc_void_ServiceReadyReason::javaobject> /* callback */)>("onServiceReady_cxx");
954
959
  auto __result = method(_javaPart, JFunc_void_ServiceReadyReason_cxx::fromCpp(callback));
@@ -113,6 +113,7 @@ namespace margelo::nitro::queueplayer {
113
113
  void donateVoiceVocabulary(const VoiceVocabulary& vocabulary) override;
114
114
  std::function<void()> onCarConnect(const std::function<void()>& callback) override;
115
115
  std::function<void()> onCarDisconnect(const std::function<void()>& callback) override;
116
+ bool isCarConnected() override;
116
117
  std::function<void()> onServiceReady(const std::function<void(ServiceReadyReason /* reason */)>& callback) override;
117
118
  std::shared_ptr<Promise<void>> setLookaheadCache(const LookaheadCacheConfig& config) override;
118
119
  CacheStatus getLookaheadCacheStatus() override;
@@ -346,6 +346,10 @@ abstract class HybridTrackPlayerSpec: HybridObject() {
346
346
  return Func_void_java(__result)
347
347
  }
348
348
 
349
+ @DoNotStrip
350
+ @Keep
351
+ abstract fun isCarConnected(): Boolean
352
+
349
353
  abstract fun onServiceReady(callback: (reason: ServiceReadyReason) -> Unit): () -> Unit
350
354
 
351
355
  @DoNotStrip
@@ -669,6 +669,14 @@ namespace margelo::nitro::queueplayer {
669
669
  auto __value = std::move(__result.value());
670
670
  return __value;
671
671
  }
672
+ inline bool isCarConnected() override {
673
+ auto __result = _swiftPart.isCarConnected();
674
+ if (__result.hasError()) [[unlikely]] {
675
+ std::rethrow_exception(__result.error());
676
+ }
677
+ auto __value = std::move(__result.value());
678
+ return __value;
679
+ }
672
680
  inline std::function<void()> onServiceReady(const std::function<void(ServiceReadyReason /* reason */)>& callback) override {
673
681
  auto __result = _swiftPart.onServiceReady(callback);
674
682
  if (__result.hasError()) [[unlikely]] {
@@ -72,6 +72,7 @@ public protocol HybridTrackPlayerSpec_protocol: HybridObject {
72
72
  func donateVoiceVocabulary(vocabulary: VoiceVocabulary) throws -> Void
73
73
  func onCarConnect(callback: @escaping () -> Void) throws -> () -> Void
74
74
  func onCarDisconnect(callback: @escaping () -> Void) throws -> () -> Void
75
+ func isCarConnected() throws -> Bool
75
76
  func onServiceReady(callback: @escaping (_ reason: ServiceReadyReason) -> Void) throws -> () -> Void
76
77
  func setLookaheadCache(config: LookaheadCacheConfig) throws -> Promise<Void>
77
78
  func getLookaheadCacheStatus() throws -> CacheStatus
@@ -1255,6 +1255,18 @@ open class HybridTrackPlayerSpec_cxx {
1255
1255
  }
1256
1256
  }
1257
1257
 
1258
+ @inline(__always)
1259
+ public final func isCarConnected() -> bridge.Result_bool_ {
1260
+ do {
1261
+ let __result = try self.__implementation.isCarConnected()
1262
+ let __resultCpp = __result
1263
+ return bridge.create_Result_bool_(__resultCpp)
1264
+ } catch (let __error) {
1265
+ let __exceptionPtr = __error.toCpp()
1266
+ return bridge.create_Result_bool_(__exceptionPtr)
1267
+ }
1268
+ }
1269
+
1258
1270
  @inline(__always)
1259
1271
  public final func onServiceReady(callback: bridge.Func_void_ServiceReadyReason) -> bridge.Result_std__function_void____ {
1260
1272
  do {
@@ -73,6 +73,7 @@ namespace margelo::nitro::queueplayer {
73
73
  prototype.registerHybridMethod("donateVoiceVocabulary", &HybridTrackPlayerSpec::donateVoiceVocabulary);
74
74
  prototype.registerHybridMethod("onCarConnect", &HybridTrackPlayerSpec::onCarConnect);
75
75
  prototype.registerHybridMethod("onCarDisconnect", &HybridTrackPlayerSpec::onCarDisconnect);
76
+ prototype.registerHybridMethod("isCarConnected", &HybridTrackPlayerSpec::isCarConnected);
76
77
  prototype.registerHybridMethod("onServiceReady", &HybridTrackPlayerSpec::onServiceReady);
77
78
  prototype.registerHybridMethod("setLookaheadCache", &HybridTrackPlayerSpec::setLookaheadCache);
78
79
  prototype.registerHybridMethod("getLookaheadCacheStatus", &HybridTrackPlayerSpec::getLookaheadCacheStatus);
@@ -187,6 +187,7 @@ namespace margelo::nitro::queueplayer {
187
187
  virtual void donateVoiceVocabulary(const VoiceVocabulary& vocabulary) = 0;
188
188
  virtual std::function<void()> onCarConnect(const std::function<void()>& callback) = 0;
189
189
  virtual std::function<void()> onCarDisconnect(const std::function<void()>& callback) = 0;
190
+ virtual bool isCarConnected() = 0;
190
191
  virtual std::function<void()> onServiceReady(const std::function<void(ServiceReadyReason /* reason */)>& callback) = 0;
191
192
  virtual std::shared_ptr<Promise<void>> setLookaheadCache(const LookaheadCacheConfig& config) = 0;
192
193
  virtual CacheStatus getLookaheadCacheStatus() = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-queue-player",
3
- "version": "1.0.3",
3
+ "version": "1.0.6",
4
4
  "description": "Nitro Modules audio playback library for React Native — gapless, EQ, crossfade, automotive, voice, casting",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/index.d.ts",
@@ -549,6 +549,24 @@ export interface TrackPlayer
549
549
  */
550
550
  onCarDisconnect(callback: () => void): () => void;
551
551
 
552
+ /**
553
+ * Whether an automotive controller is connected right now. The
554
+ * pull-based counterpart to `onCarConnect` / `onCarDisconnect`: it holds
555
+ * the same state those events transition between, so a consumer that
556
+ * missed the connect event — e.g. it fired before the consumer registered
557
+ * its handler in this app process — can still gate car-only work, like
558
+ * pushing browse snapshots, on the current connection.
559
+ *
560
+ * `true` between the first automotive controller connecting and the last
561
+ * one dropping. "Automotive controller" is the same classification the
562
+ * connect/disconnect events use: the CarPlay scene on iOS; the headless
563
+ * Android Auto / Wear / Assistant controllers on Android. Returns `false`
564
+ * before the first connection and after a full disconnect. The state is
565
+ * process-scoped: a fresh app process starts disconnected until a
566
+ * controller connects within it.
567
+ */
568
+ isCarConnected(): boolean;
569
+
552
570
  /**
553
571
  * Fires when the platform's media service is freshly bound to the JS
554
572
  * side. `reason = 'first-bind'` for the initial bind during a JS-