react-native-nitro-player 1.7.0-alpha.3 → 1.7.0-alpha.4

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 (59) hide show
  1. package/README.md +9 -0
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridPlayerQueue.kt +45 -7
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerAudioFocus.kt +65 -0
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +46 -14
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerListener.kt +2 -0
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerPlayback.kt +36 -12
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueue.kt +1 -1
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerQueueBuild.kt +9 -3
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerUrlLoader.kt +7 -3
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/AudioFocusController.kt +87 -0
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/ExoPlayerBuilder.kt +3 -0
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +8 -2
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/PlaybackService.kt +26 -1
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +60 -0
  15. package/ios/cast/CastQueueDiff.swift +58 -0
  16. package/ios/cast/CastQueueReconciler.swift +228 -0
  17. package/ios/core/CastSessionManager.swift +215 -31
  18. package/ios/core/TrackPlayerCast.swift +96 -65
  19. package/ios/core/TrackPlayerCore.swift +31 -0
  20. package/ios/core/TrackPlayerListener.swift +19 -3
  21. package/ios/core/TrackPlayerPlayback.swift +12 -10
  22. package/ios/core/TrackPlayerQueue.swift +10 -2
  23. package/ios/core/TrackPlayerQueueBuild.swift +21 -9
  24. package/ios/core/TrackPlayerTempQueue.swift +27 -15
  25. package/ios/core/TrackPlayerUrlLoader.swift +6 -2
  26. package/ios/playlist/PlaylistManager.swift +60 -1
  27. package/ios/queue/HybridPlayerQueue.swift +40 -13
  28. package/lib/hooks/callbackManager.d.ts +2 -0
  29. package/lib/hooks/callbackManager.js +23 -8
  30. package/lib/specs/TrackPlayer.nitro.d.ts +5 -1
  31. package/lib/types/PlayerQueue.d.ts +14 -0
  32. package/nitrogen/generated/android/c++/JAndroidAudioFocusMode.hpp +61 -0
  33. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.cpp +43 -0
  34. package/nitrogen/generated/android/c++/JHybridPlayerQueueSpec.hpp +2 -0
  35. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +4 -0
  36. package/nitrogen/generated/android/c++/JPlayerConfig.hpp +9 -3
  37. package/nitrogen/generated/android/c++/JShufflePlaylistOptions.hpp +57 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/AndroidAudioFocusMode.kt +24 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridPlayerQueueSpec.kt +8 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/PlayerConfig.kt +6 -3
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/ShufflePlaylistOptions.kt +38 -0
  42. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +36 -0
  43. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Umbrella.hpp +6 -0
  44. package/nitrogen/generated/ios/c++/HybridPlayerQueueSpecSwift.hpp +19 -0
  45. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +3 -0
  46. package/nitrogen/generated/ios/swift/AndroidAudioFocusMode.swift +44 -0
  47. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec.swift +2 -0
  48. package/nitrogen/generated/ios/swift/HybridPlayerQueueSpec_cxx.swift +38 -0
  49. package/nitrogen/generated/ios/swift/PlayerConfig.swift +12 -1
  50. package/nitrogen/generated/ios/swift/ShufflePlaylistOptions.swift +42 -0
  51. package/nitrogen/generated/shared/c++/AndroidAudioFocusMode.hpp +80 -0
  52. package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.cpp +2 -0
  53. package/nitrogen/generated/shared/c++/HybridPlayerQueueSpec.hpp +5 -0
  54. package/nitrogen/generated/shared/c++/PlayerConfig.hpp +9 -3
  55. package/nitrogen/generated/shared/c++/ShufflePlaylistOptions.hpp +83 -0
  56. package/package.json +1 -1
  57. package/src/hooks/callbackManager.ts +25 -10
  58. package/src/specs/TrackPlayer.nitro.ts +11 -0
  59. package/src/types/PlayerQueue.ts +17 -0
@@ -8,6 +8,7 @@ import type {
8
8
  PlayerConfig,
9
9
  Playlist,
10
10
  TimedMetadata,
11
+ ShufflePlaylistOptions,
11
12
  } from '../types/PlayerQueue'
12
13
 
13
14
  export interface PlayerQueue extends HybridObject<{
@@ -47,6 +48,16 @@ export interface PlayerQueue extends HybridObject<{
47
48
  trackId: string,
48
49
  newIndex: number
49
50
  ): Promise<void>
51
+ /** One native pass. Unknown ids are skipped; rejects only if the playlist does not exist. */
52
+ removeTracksFromPlaylist(
53
+ playlistId: string,
54
+ trackIds: string[]
55
+ ): Promise<void>
56
+ /** Fisher-Yates shuffle of the stored playlist, persisted. Never interrupts the playing item. */
57
+ shufflePlaylist(
58
+ playlistId: string,
59
+ options?: ShufflePlaylistOptions
60
+ ): Promise<void>
50
61
 
51
62
  // Playback control
52
63
  loadPlaylist(playlistId: string, index?: number): Promise<void>
@@ -26,6 +26,11 @@ export interface Playlist {
26
26
 
27
27
  export type QueueOperation = 'add' | 'remove' | 'clear' | 'update'
28
28
 
29
+ export interface ShufflePlaylistOptions {
30
+ /** Move the playing track to index 0 and shuffle the rest behind it (default: true). */
31
+ keepCurrentTrackFirst?: boolean
32
+ }
33
+
29
34
  export type TrackPlayerState = 'playing' | 'paused' | 'stopped' | 'buffering'
30
35
 
31
36
  export type Reason = 'user_action' | 'skip' | 'end' | 'error' | 'repeat'
@@ -56,6 +61,15 @@ export interface TimedMetadata {
56
61
  artworkUrl?: string
57
62
  }
58
63
 
64
+ /**
65
+ * How Android reacts when another app takes audio focus.
66
+ * - 'pause': pause for any interruption and resume after it (default, today's behaviour)
67
+ * - 'duck': keep playing at a reduced volume through transient interruptions
68
+ * - 'ignore': never react to audio focus at all
69
+ * iOS ignores this option.
70
+ */
71
+ export type AndroidAudioFocusMode = 'pause' | 'duck' | 'ignore'
72
+
59
73
  export interface PlayerConfig {
60
74
  androidAutoEnabled?: boolean
61
75
  carPlayEnabled?: boolean
@@ -75,4 +89,7 @@ export interface PlayerConfig {
75
89
  lookaheadCount?: number
76
90
 
77
91
  androidNotificationIcon?: string
92
+
93
+ /** How Android reacts when another app takes audio focus (default: 'pause'). */
94
+ androidAudioFocus?: AndroidAudioFocusMode
78
95
  }