@javascriptcommon/react-native-track-player 1.2.9 → 4.1.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 (437) hide show
  1. package/LICENSE +201 -21
  2. package/README.md +8 -0
  3. package/android/build.gradle +92 -18
  4. package/android/proguard-rules.txt +0 -3
  5. package/android/src/main/AndroidManifest.xml +10 -13
  6. package/android/src/main/java/com/doublesymmetry/trackplayer/HeadlessJsMediaService.kt +199 -0
  7. package/android/src/main/java/com/doublesymmetry/trackplayer/TrackPlayer.kt +33 -0
  8. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/AudioPlayerStateExt.kt +19 -0
  9. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/EnumExtensions.kt +5 -0
  10. package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/NumberExt.kt +13 -0
  11. package/android/src/main/java/com/doublesymmetry/trackplayer/model/MetadataAdapter.kt +227 -0
  12. package/android/src/main/java/com/doublesymmetry/trackplayer/model/NowPlayingMetadata.kt +16 -0
  13. package/android/src/main/java/com/doublesymmetry/trackplayer/model/PlaybackMetadata.kt +203 -0
  14. package/android/src/main/java/com/doublesymmetry/trackplayer/model/State.kt +13 -0
  15. package/android/src/main/java/com/doublesymmetry/trackplayer/model/Track.kt +67 -0
  16. package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackAudioItem.kt +18 -0
  17. package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackMetadata.kt +38 -0
  18. package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicEvents.kt +67 -0
  19. package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt +778 -0
  20. package/android/src/main/java/com/doublesymmetry/trackplayer/service/MusicService.kt +1286 -0
  21. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/AppForegroundTracker.kt +35 -0
  22. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/BundleUtils.kt +147 -0
  23. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/CoilBitmapLoader.kt +65 -0
  24. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/MediaItemBuilder.kt +41 -0
  25. package/android/src/main/java/com/doublesymmetry/trackplayer/utils/RejectionException.kt +11 -0
  26. package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoView.kt +42 -0
  27. package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoViewManager.kt +18 -0
  28. package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/EventHolder.kt +30 -0
  29. package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/PlayerEventHolder.kt +124 -0
  30. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioContentType.kt +10 -0
  31. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItem.kt +118 -0
  32. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItemTransitionReason.kt +33 -0
  33. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioPlayerState.kt +30 -0
  34. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/BufferConfig.kt +8 -0
  35. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CacheConfig.kt +17 -0
  36. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/Capability.kt +19 -0
  37. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CustomButton.kt +19 -0
  38. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/FocusChangeData.kt +3 -0
  39. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/MediaSessionCallback.kt +17 -0
  40. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayWhenReadyChangeData.kt +3 -0
  41. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackEndedReason.kt +5 -0
  42. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackError.kt +6 -0
  43. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerConfig.kt +36 -0
  44. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerOptions.kt +40 -0
  45. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PositionChangedReason.kt +39 -0
  46. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/RepeatMode.kt +16 -0
  47. package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/WakeMode.kt +7 -0
  48. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/AudioPlayer.kt +756 -0
  49. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/ForwardingPlayer.java +1124 -0
  50. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/QueuedAudioPlayer.kt +279 -0
  51. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/APMRenderersFactory.kt +33 -0
  52. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Buffer.kt +34 -0
  53. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Cache.kt +27 -0
  54. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/FocusManager.kt +59 -0
  55. package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/MediaFactory.kt +130 -0
  56. package/android/src/main/java/com/lovegaoshi/kotlinaudio/processors/TeeListener.kt +171 -0
  57. package/android/src/main/java/com/lovegaoshi/kotlinaudio/service/MusicService.kt +127 -0
  58. package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/FFT.java +99 -0
  59. package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/Utils.kt +113 -0
  60. package/android/src/main/res/drawable/baseline_repeat_24.xml +5 -0
  61. package/android/src/main/res/drawable/baseline_repeat_one_24.xml +5 -0
  62. package/android/src/main/res/drawable/forward.xml +5 -0
  63. package/android/src/main/res/drawable/heart_24px.xml +5 -0
  64. package/android/src/main/res/drawable/hearte_24px.xml +5 -0
  65. package/android/src/main/res/drawable/ifl_24px.xml +5 -0
  66. package/android/src/main/res/drawable/rewind.xml +5 -0
  67. package/android/src/main/res/drawable/shuffle_24px.xml +5 -0
  68. package/android/src/main/res/values/strings.xml +5 -0
  69. package/android/src/main/res/xml/automotive_app_desc.xml +3 -0
  70. package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/22AMillion.jpg +0 -0
  71. package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/Contents.json +21 -0
  72. package/ios/Example/SwiftAudio/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  73. package/ios/Example/SwiftAudio/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  74. package/ios/Example/SwiftAudio/Assets.xcassets/Contents.json +6 -0
  75. package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/Contents.json +21 -0
  76. package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/cover.jpg +0 -0
  77. package/ios/Example/SwiftAudio/AudioController.swift +46 -0
  78. package/ios/Example/SwiftAudio/Extensions.swift +22 -0
  79. package/ios/Example/SwiftAudio/PlayerView.swift +172 -0
  80. package/ios/Example/SwiftAudio/PlayerViewModel.swift +120 -0
  81. package/ios/Example/SwiftAudio/Preview Content/Preview Assets.xcassets/Contents.json +6 -0
  82. package/ios/Example/SwiftAudio/QueueView.swift +65 -0
  83. package/ios/{TrackPlayer.xcodeproj/xcuserdata/marco.xcuserdatad/xcschemes/xcschememanagement.plist → Example/SwiftAudio/SwiftAudio.entitlements} +6 -8
  84. package/ios/Example/SwiftAudio/SwiftAudioApp.swift +17 -0
  85. package/ios/Example/SwiftAudio.xcodeproj/project.pbxproj +412 -0
  86. package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/contents.xcworkspacedata +1 -1
  87. package/ios/RNTrackPlayer/Models/Capabilities.swift +39 -4
  88. package/ios/RNTrackPlayer/Models/MediaURL.swift +12 -6
  89. package/ios/RNTrackPlayer/Models/MetadataAdapter.swift +147 -0
  90. package/ios/RNTrackPlayer/Models/PitchAlgorithms.swift +13 -0
  91. package/ios/RNTrackPlayer/Models/SessionCategories.swift +106 -0
  92. package/ios/RNTrackPlayer/Models/State.swift +26 -0
  93. package/ios/RNTrackPlayer/Models/Track.swift +74 -54
  94. package/ios/RNTrackPlayer/RNTrackPlayer.swift +867 -406
  95. package/ios/RNTrackPlayer/Support/RNTrackPlayer-Bridging-Header.h +1 -0
  96. package/ios/RNTrackPlayer/TrackPlayer.h +14 -0
  97. package/ios/RNTrackPlayer/TrackPlayer.mm +249 -0
  98. package/ios/RNTrackPlayer/Utils/EventType.swift +45 -0
  99. package/ios/RNTrackPlayer/Utils/Metadata.swift +60 -0
  100. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoView.swift +83 -0
  101. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.m +5 -0
  102. package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.swift +17 -0
  103. package/ios/SwiftAudioEx/Package.swift +20 -0
  104. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapper.swift +531 -0
  105. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperDelegate.swift +27 -0
  106. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperProtocol.swift +69 -0
  107. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperState.swift +43 -0
  108. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioItem.swift +158 -0
  109. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayer.swift +459 -0
  110. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayerError.swift +26 -0
  111. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSession.swift +33 -0
  112. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSessionController.swift +135 -0
  113. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioTap.swift +96 -0
  114. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Event.swift +155 -0
  115. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/MediaItemProperty.swift +95 -0
  116. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoCenter.swift +17 -0
  117. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoController.swift +73 -0
  118. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoControllerProtocol.swift +26 -0
  119. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoKeyValue.swift +14 -0
  120. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoProperty.swift +234 -0
  121. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemNotificationObserver.swift +102 -0
  122. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemObserver.swift +136 -0
  123. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerObserver.swift +120 -0
  124. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerTimeObserver.swift +112 -0
  125. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueueManager.swift +356 -0
  126. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueuedAudioPlayer.swift +236 -0
  127. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommand.swift +170 -0
  128. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommandController.swift +206 -0
  129. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RepeatMode.swift +15 -0
  130. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/TimeEventFrequency.swift +26 -0
  131. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Utils/DispatchQueueType.swift +18 -0
  132. package/ios/SwiftAudioEx/Sources/SwiftAudioEx/WaveformAudioTap.swift +159 -0
  133. package/lib/specs/NativeTrackPlayer.d.ts +134 -0
  134. package/lib/specs/NativeTrackPlayer.js +4 -0
  135. package/lib/src/TrackPlayerModule.web.d.ts +2 -0
  136. package/lib/src/TrackPlayerModule.web.js +2 -0
  137. package/lib/src/VideoView.d.ts +16 -0
  138. package/lib/src/VideoView.js +25 -0
  139. package/lib/src/constants/AndroidAudioContentType.d.ts +35 -0
  140. package/lib/src/constants/AndroidAudioContentType.js +36 -0
  141. package/lib/src/constants/AndroidAutoContentStyle.d.ts +10 -0
  142. package/lib/src/constants/AndroidAutoContentStyle.js +11 -0
  143. package/lib/src/constants/AppKilledPlaybackBehavior.d.ts +17 -0
  144. package/lib/src/constants/AppKilledPlaybackBehavior.js +18 -0
  145. package/lib/src/constants/Capability.d.ts +17 -0
  146. package/lib/src/constants/Capability.js +19 -0
  147. package/lib/src/constants/Event.d.ts +172 -0
  148. package/lib/src/constants/Event.js +173 -0
  149. package/lib/src/constants/IOSCategory.d.ts +36 -0
  150. package/lib/src/constants/IOSCategory.js +37 -0
  151. package/lib/src/constants/IOSCategoryMode.d.ts +47 -0
  152. package/lib/src/constants/IOSCategoryMode.js +48 -0
  153. package/lib/src/constants/IOSCategoryOptions.d.ts +44 -0
  154. package/lib/src/constants/IOSCategoryOptions.js +45 -0
  155. package/lib/src/constants/MediaItemPlayable.d.ts +4 -0
  156. package/lib/src/constants/MediaItemPlayable.js +5 -0
  157. package/lib/src/constants/PitchAlgorithm.d.ts +14 -0
  158. package/lib/src/constants/PitchAlgorithm.js +16 -0
  159. package/lib/src/constants/RatingType.d.ts +8 -0
  160. package/lib/src/constants/RatingType.js +10 -0
  161. package/lib/src/constants/RepeatMode.d.ts +8 -0
  162. package/lib/src/constants/RepeatMode.js +10 -0
  163. package/lib/src/constants/State.d.ts +34 -0
  164. package/lib/src/constants/State.js +35 -0
  165. package/lib/src/constants/TrackType.d.ts +6 -0
  166. package/lib/src/constants/TrackType.js +7 -0
  167. package/lib/src/constants/index.d.ts +14 -0
  168. package/lib/src/constants/index.js +14 -0
  169. package/lib/src/hooks/index.d.ts +6 -0
  170. package/lib/src/hooks/index.js +6 -0
  171. package/lib/src/hooks/useActiveTrack.d.ts +2 -0
  172. package/lib/src/hooks/useActiveTrack.js +28 -0
  173. package/lib/src/hooks/useAppIsInBackground.d.ts +1 -0
  174. package/lib/src/hooks/useAppIsInBackground.js +16 -0
  175. package/lib/src/hooks/useIsPlaying.d.ts +35 -0
  176. package/lib/src/hooks/useIsPlaying.js +50 -0
  177. package/lib/src/hooks/usePlayWhenReady.d.ts +1 -0
  178. package/lib/src/hooks/usePlayWhenReady.js +27 -0
  179. package/lib/src/hooks/usePlaybackState.d.ts +10 -0
  180. package/lib/src/hooks/usePlaybackState.js +35 -0
  181. package/lib/src/hooks/useProgress.d.ts +7 -0
  182. package/lib/src/hooks/useProgress.js +55 -0
  183. package/lib/src/hooks/useTrackPlayerEvents.d.ts +8 -0
  184. package/lib/src/hooks/useTrackPlayerEvents.js +30 -0
  185. package/lib/src/index.d.ts +6 -0
  186. package/lib/src/index.js +6 -0
  187. package/lib/src/interfaces/AndroidAutoBrowseTree.d.ts +5 -0
  188. package/lib/src/interfaces/AndroidAutoBrowseTree.js +1 -0
  189. package/lib/src/interfaces/AndroidOptions.d.ts +41 -0
  190. package/lib/src/interfaces/AndroidOptions.js +1 -0
  191. package/lib/src/interfaces/CustomButtons.d.ts +5 -0
  192. package/lib/src/interfaces/CustomButtons.js +1 -0
  193. package/lib/src/interfaces/FeedbackOptions.d.ts +6 -0
  194. package/lib/src/interfaces/FeedbackOptions.js +1 -0
  195. package/lib/src/interfaces/MediaItem.d.ts +18 -0
  196. package/lib/src/interfaces/MediaItem.js +1 -0
  197. package/lib/src/interfaces/MetadataOptions.d.ts +3 -0
  198. package/lib/src/interfaces/MetadataOptions.js +1 -0
  199. package/lib/src/interfaces/NowPlayingMetadata.d.ts +4 -0
  200. package/lib/src/interfaces/NowPlayingMetadata.js +1 -0
  201. package/lib/src/interfaces/PlaybackState.d.ts +8 -0
  202. package/lib/src/interfaces/PlaybackState.js +1 -0
  203. package/lib/src/interfaces/PlayerOptions.d.ts +132 -0
  204. package/lib/src/interfaces/PlayerOptions.js +1 -0
  205. package/lib/src/interfaces/Progress.d.ts +15 -0
  206. package/lib/src/interfaces/Progress.js +1 -0
  207. package/lib/src/interfaces/ResourceObject.d.ts +1 -0
  208. package/lib/src/interfaces/ResourceObject.js +1 -0
  209. package/lib/src/interfaces/ServiceHandler.d.ts +1 -0
  210. package/lib/src/interfaces/ServiceHandler.js +1 -0
  211. package/lib/src/interfaces/Track.d.ts +21 -0
  212. package/lib/src/interfaces/Track.js +1 -0
  213. package/lib/src/interfaces/TrackMetadataBase.d.ts +28 -0
  214. package/lib/src/interfaces/TrackMetadataBase.js +1 -0
  215. package/lib/src/interfaces/UpdateOptions.d.ts +52 -0
  216. package/lib/src/interfaces/UpdateOptions.js +1 -0
  217. package/lib/src/interfaces/events/AudioMetadataReceivedEvent.d.ts +33 -0
  218. package/lib/src/interfaces/events/AudioMetadataReceivedEvent.js +1 -0
  219. package/lib/src/interfaces/events/ControllerConnectedEvent.d.ts +8 -0
  220. package/lib/src/interfaces/events/ControllerConnectedEvent.js +1 -0
  221. package/lib/src/interfaces/events/EventPayloadByEvent.d.ts +77 -0
  222. package/lib/src/interfaces/events/EventPayloadByEvent.js +1 -0
  223. package/lib/src/interfaces/events/FFTUpdateEvent.d.ts +7 -0
  224. package/lib/src/interfaces/events/FFTUpdateEvent.js +1 -0
  225. package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.d.ts +24 -0
  226. package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.js +1 -0
  227. package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.d.ts +4 -0
  228. package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.js +1 -0
  229. package/lib/src/interfaces/events/PlaybackErrorEvent.d.ts +6 -0
  230. package/lib/src/interfaces/events/PlaybackErrorEvent.js +1 -0
  231. package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.d.ts +16 -0
  232. package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.js +1 -0
  233. package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.d.ts +4 -0
  234. package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.js +1 -0
  235. package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.d.ts +4 -0
  236. package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.js +1 -0
  237. package/lib/src/interfaces/events/PlaybackQueueEndedEvent.d.ts +9 -0
  238. package/lib/src/interfaces/events/PlaybackQueueEndedEvent.js +1 -0
  239. package/lib/src/interfaces/events/PlaybackResumeEvent.d.ts +3 -0
  240. package/lib/src/interfaces/events/PlaybackResumeEvent.js +1 -0
  241. package/lib/src/interfaces/events/PlaybackTrackChangedEvent.d.ts +11 -0
  242. package/lib/src/interfaces/events/PlaybackTrackChangedEvent.js +1 -0
  243. package/lib/src/interfaces/events/PlayerErrorEvent.d.ts +6 -0
  244. package/lib/src/interfaces/events/PlayerErrorEvent.js +1 -0
  245. package/lib/src/interfaces/events/RemoteBrowseEvent.d.ts +4 -0
  246. package/lib/src/interfaces/events/RemoteBrowseEvent.js +1 -0
  247. package/lib/src/interfaces/events/RemoteCustomActionEvent.d.ts +7 -0
  248. package/lib/src/interfaces/events/RemoteCustomActionEvent.js +1 -0
  249. package/lib/src/interfaces/events/RemoteDuckEvent.d.ts +13 -0
  250. package/lib/src/interfaces/events/RemoteDuckEvent.js +1 -0
  251. package/lib/src/interfaces/events/RemoteJumpBackwardEvent.d.ts +7 -0
  252. package/lib/src/interfaces/events/RemoteJumpBackwardEvent.js +1 -0
  253. package/lib/src/interfaces/events/RemoteJumpForwardEvent.d.ts +7 -0
  254. package/lib/src/interfaces/events/RemoteJumpForwardEvent.js +1 -0
  255. package/lib/src/interfaces/events/RemotePlayIdEvent.d.ts +4 -0
  256. package/lib/src/interfaces/events/RemotePlayIdEvent.js +1 -0
  257. package/lib/src/interfaces/events/RemotePlaySearchEvent.d.ts +9 -0
  258. package/lib/src/interfaces/events/RemotePlaySearchEvent.js +1 -0
  259. package/lib/src/interfaces/events/RemoteSearchEvent.d.ts +3 -0
  260. package/lib/src/interfaces/events/RemoteSearchEvent.js +1 -0
  261. package/lib/src/interfaces/events/RemoteSeekEvent.d.ts +4 -0
  262. package/lib/src/interfaces/events/RemoteSeekEvent.js +1 -0
  263. package/lib/src/interfaces/events/RemoteSetRatingEvent.d.ts +4 -0
  264. package/lib/src/interfaces/events/RemoteSetRatingEvent.js +1 -0
  265. package/lib/src/interfaces/events/RemoteSkipEvent.d.ts +3 -0
  266. package/lib/src/interfaces/events/RemoteSkipEvent.js +1 -0
  267. package/lib/src/interfaces/events/index.d.ts +20 -0
  268. package/lib/src/interfaces/events/index.js +20 -0
  269. package/lib/src/interfaces/index.d.ts +15 -0
  270. package/lib/src/interfaces/index.js +15 -0
  271. package/lib/src/resolveAssetSource.d.ts +2 -0
  272. package/lib/src/resolveAssetSource.js +3 -0
  273. package/lib/src/resolveAssetSource.web.d.ts +2 -0
  274. package/lib/src/resolveAssetSource.web.js +8 -0
  275. package/lib/src/trackPlayer.d.ts +371 -0
  276. package/lib/src/trackPlayer.js +627 -0
  277. package/lib/web/TrackPlayer/Player.d.ts +40 -0
  278. package/lib/web/TrackPlayer/Player.js +188 -0
  279. package/lib/web/TrackPlayer/PlaylistPlayer.d.ts +31 -0
  280. package/lib/web/TrackPlayer/PlaylistPlayer.js +181 -0
  281. package/lib/web/TrackPlayer/RepeatMode.d.ts +5 -0
  282. package/lib/web/TrackPlayer/RepeatMode.js +6 -0
  283. package/lib/web/TrackPlayer/SetupNotCalledError.d.ts +3 -0
  284. package/lib/web/TrackPlayer/SetupNotCalledError.js +5 -0
  285. package/lib/web/TrackPlayer/index.d.ts +3 -0
  286. package/lib/web/TrackPlayer/index.js +3 -0
  287. package/lib/web/TrackPlayerModule.d.ts +63 -0
  288. package/lib/web/TrackPlayerModule.js +153 -0
  289. package/lib/web/index.d.ts +3 -0
  290. package/lib/web/index.js +3 -0
  291. package/package.json +85 -6
  292. package/react-native-track-player.podspec +13 -13
  293. package/specs/NativeTrackPlayer.ts +153 -0
  294. package/src/TrackPlayerModule.web.ts +2 -0
  295. package/src/VideoView.tsx +51 -0
  296. package/src/constants/AndroidAudioContentType.ts +35 -0
  297. package/src/constants/AndroidAutoContentStyle.ts +10 -0
  298. package/src/constants/AppKilledPlaybackBehavior.ts +19 -0
  299. package/src/constants/Capability.ts +19 -0
  300. package/src/constants/Event.ts +173 -0
  301. package/src/constants/IOSCategory.ts +36 -0
  302. package/src/constants/IOSCategoryMode.ts +47 -0
  303. package/src/constants/IOSCategoryOptions.ts +44 -0
  304. package/src/constants/MediaItemPlayable.ts +4 -0
  305. package/src/constants/PitchAlgorithm.ts +16 -0
  306. package/src/constants/RatingType.ts +10 -0
  307. package/src/constants/RepeatMode.ts +10 -0
  308. package/src/constants/State.ts +34 -0
  309. package/src/constants/TrackType.ts +6 -0
  310. package/src/constants/index.ts +14 -0
  311. package/src/hooks/index.ts +6 -0
  312. package/src/hooks/useActiveTrack.ts +36 -0
  313. package/src/hooks/useAppIsInBackground.ts +20 -0
  314. package/src/hooks/useIsPlaying.ts +56 -0
  315. package/src/hooks/usePlayWhenReady.ts +37 -0
  316. package/src/hooks/usePlaybackState.ts +45 -0
  317. package/src/hooks/useProgress.ts +64 -0
  318. package/src/hooks/useTrackPlayerEvents.ts +48 -0
  319. package/src/index.ts +8 -0
  320. package/src/interfaces/AndroidAutoBrowseTree.ts +6 -0
  321. package/src/interfaces/AndroidOptions.ts +48 -0
  322. package/src/interfaces/CustomButtons.ts +6 -0
  323. package/src/interfaces/FeedbackOptions.ts +7 -0
  324. package/src/interfaces/MediaItem.ts +19 -0
  325. package/src/interfaces/MetadataOptions.ts +4 -0
  326. package/src/interfaces/NowPlayingMetadata.ts +5 -0
  327. package/src/interfaces/PlaybackState.ts +11 -0
  328. package/src/interfaces/PlayerOptions.ts +138 -0
  329. package/src/interfaces/Progress.ts +15 -0
  330. package/src/interfaces/ResourceObject.ts +1 -0
  331. package/src/interfaces/ServiceHandler.ts +1 -0
  332. package/src/interfaces/Track.ts +23 -0
  333. package/src/interfaces/TrackMetadataBase.ts +29 -0
  334. package/src/interfaces/UpdateOptions.ts +59 -0
  335. package/src/interfaces/events/AudioMetadataReceivedEvent.ts +37 -0
  336. package/src/interfaces/events/ControllerConnectedEvent.ts +9 -0
  337. package/src/interfaces/events/EventPayloadByEvent.ts +80 -0
  338. package/src/interfaces/events/FFTUpdateEvent.ts +9 -0
  339. package/src/interfaces/events/PlaybackActiveTrackChangedEvent.ts +29 -0
  340. package/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.ts +4 -0
  341. package/src/interfaces/events/PlaybackErrorEvent.ts +6 -0
  342. package/src/interfaces/events/PlaybackMetadataReceivedEvent.ts +16 -0
  343. package/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.ts +4 -0
  344. package/src/interfaces/events/PlaybackProgressUpdatedEvent.ts +5 -0
  345. package/src/interfaces/events/PlaybackQueueEndedEvent.ts +9 -0
  346. package/src/interfaces/events/PlaybackResumeEvent.ts +5 -0
  347. package/src/interfaces/events/PlaybackTrackChangedEvent.ts +11 -0
  348. package/src/interfaces/events/PlayerErrorEvent.ts +6 -0
  349. package/src/interfaces/events/RemoteBrowseEvent.ts +4 -0
  350. package/src/interfaces/events/RemoteCustomActionEvent.ts +7 -0
  351. package/src/interfaces/events/RemoteDuckEvent.ts +13 -0
  352. package/src/interfaces/events/RemoteJumpBackwardEvent.ts +7 -0
  353. package/src/interfaces/events/RemoteJumpForwardEvent.ts +7 -0
  354. package/src/interfaces/events/RemotePlayIdEvent.ts +4 -0
  355. package/src/interfaces/events/RemotePlaySearchEvent.ts +21 -0
  356. package/src/interfaces/events/RemoteSearchEvent.ts +3 -0
  357. package/src/interfaces/events/RemoteSeekEvent.ts +4 -0
  358. package/src/interfaces/events/RemoteSetRatingEvent.ts +5 -0
  359. package/src/interfaces/events/RemoteSkipEvent.ts +3 -0
  360. package/src/interfaces/events/index.ts +20 -0
  361. package/src/interfaces/index.ts +15 -0
  362. package/src/resolveAssetSource.ts +3 -0
  363. package/src/resolveAssetSource.web.ts +10 -0
  364. package/src/trackPlayer.ts +806 -0
  365. package/web/TrackPlayer/Player.ts +201 -0
  366. package/web/TrackPlayer/PlaylistPlayer.ts +215 -0
  367. package/web/TrackPlayer/RepeatMode.ts +6 -0
  368. package/web/TrackPlayer/SetupNotCalledError.ts +5 -0
  369. package/web/TrackPlayer/index.ts +3 -0
  370. package/web/TrackPlayerModule.ts +181 -0
  371. package/web/index.ts +4 -0
  372. package/CHANGELOG.md +0 -75
  373. package/android/react-native-music-control.iml +0 -139
  374. package/android/react-native-track-player.iml +0 -151
  375. package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.java +0 -28
  376. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.java +0 -55
  377. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.java +0 -298
  378. package/android/src/main/java/com/guichaguri/trackplayer/service/HeadlessJsMediaService.java +0 -174
  379. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.java +0 -47
  380. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.java +0 -383
  381. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.java +0 -271
  382. package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.java +0 -243
  383. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.java +0 -148
  384. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.java +0 -379
  385. package/android/src/main/java/com/guichaguri/trackplayer/service/models/Track.java +0 -141
  386. package/android/src/main/java/com/guichaguri/trackplayer/service/models/TrackType.java +0 -35
  387. package/android/src/main/res/drawable-hdpi/ic_forward.png +0 -0
  388. package/android/src/main/res/drawable-hdpi/ic_logo.png +0 -0
  389. package/android/src/main/res/drawable-hdpi/ic_next.png +0 -0
  390. package/android/src/main/res/drawable-hdpi/ic_pause.png +0 -0
  391. package/android/src/main/res/drawable-hdpi/ic_play.png +0 -0
  392. package/android/src/main/res/drawable-hdpi/ic_previous.png +0 -0
  393. package/android/src/main/res/drawable-hdpi/ic_rewind.png +0 -0
  394. package/android/src/main/res/drawable-hdpi/ic_stop.png +0 -0
  395. package/android/src/main/res/drawable-mdpi/ic_forward.png +0 -0
  396. package/android/src/main/res/drawable-mdpi/ic_logo.png +0 -0
  397. package/android/src/main/res/drawable-mdpi/ic_next.png +0 -0
  398. package/android/src/main/res/drawable-mdpi/ic_pause.png +0 -0
  399. package/android/src/main/res/drawable-mdpi/ic_play.png +0 -0
  400. package/android/src/main/res/drawable-mdpi/ic_previous.png +0 -0
  401. package/android/src/main/res/drawable-mdpi/ic_rewind.png +0 -0
  402. package/android/src/main/res/drawable-mdpi/ic_stop.png +0 -0
  403. package/android/src/main/res/drawable-xhdpi/ic_forward.png +0 -0
  404. package/android/src/main/res/drawable-xhdpi/ic_logo.png +0 -0
  405. package/android/src/main/res/drawable-xhdpi/ic_next.png +0 -0
  406. package/android/src/main/res/drawable-xhdpi/ic_pause.png +0 -0
  407. package/android/src/main/res/drawable-xhdpi/ic_play.png +0 -0
  408. package/android/src/main/res/drawable-xhdpi/ic_previous.png +0 -0
  409. package/android/src/main/res/drawable-xhdpi/ic_rewind.png +0 -0
  410. package/android/src/main/res/drawable-xhdpi/ic_stop.png +0 -0
  411. package/android/src/main/res/drawable-xxhdpi/ic_forward.png +0 -0
  412. package/android/src/main/res/drawable-xxhdpi/ic_logo.png +0 -0
  413. package/android/src/main/res/drawable-xxhdpi/ic_next.png +0 -0
  414. package/android/src/main/res/drawable-xxhdpi/ic_pause.png +0 -0
  415. package/android/src/main/res/drawable-xxhdpi/ic_play.png +0 -0
  416. package/android/src/main/res/drawable-xxhdpi/ic_previous.png +0 -0
  417. package/android/src/main/res/drawable-xxhdpi/ic_rewind.png +0 -0
  418. package/android/src/main/res/drawable-xxhdpi/ic_stop.png +0 -0
  419. package/android/src/main/res/drawable-xxxhdpi/ic_forward.png +0 -0
  420. package/android/src/main/res/drawable-xxxhdpi/ic_logo.png +0 -0
  421. package/android/src/main/res/drawable-xxxhdpi/ic_next.png +0 -0
  422. package/android/src/main/res/drawable-xxxhdpi/ic_pause.png +0 -0
  423. package/android/src/main/res/drawable-xxxhdpi/ic_play.png +0 -0
  424. package/android/src/main/res/drawable-xxxhdpi/ic_previous.png +0 -0
  425. package/android/src/main/res/drawable-xxxhdpi/ic_rewind.png +0 -0
  426. package/android/src/main/res/drawable-xxxhdpi/ic_stop.png +0 -0
  427. package/index.d.ts +0 -174
  428. package/index.js +0 -4
  429. package/ios/RNTrackPlayer/RNTrackPlayerBridge.h +0 -12
  430. package/ios/RNTrackPlayer/RNTrackPlayerBridge.m +0 -29
  431. package/ios/TrackPlayer.xcodeproj/project.pbxproj +0 -495
  432. package/ios/TrackPlayer.xcodeproj/project.xcworkspace/xcuserdata/marco.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  433. package/lib/ProgressComponent.js +0 -70
  434. package/lib/eventTypes.js +0 -28
  435. package/lib/hooks.js +0 -160
  436. package/lib/index.js +0 -177
  437. /package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
@@ -1,298 +0,0 @@
1
- package com.guichaguri.trackplayer.module;
2
-
3
- import android.app.AlarmManager;
4
- import android.app.PendingIntent;
5
- import android.app.Service;
6
- import android.content.ComponentName;
7
- import android.content.Context;
8
- import android.content.Intent;
9
- import android.content.IntentFilter;
10
- import android.content.ServiceConnection;
11
- import android.os.Build;
12
- import android.os.Bundle;
13
- import android.os.IBinder;
14
- import android.support.v4.media.RatingCompat;
15
- import android.support.v4.media.session.PlaybackStateCompat;
16
- import android.util.Log;
17
- import androidx.localbroadcastmanager.content.LocalBroadcastManager;
18
- import com.facebook.react.bridge.*;
19
- import com.guichaguri.trackplayer.service.MusicBinder;
20
- import com.guichaguri.trackplayer.service.MusicService;
21
- import com.guichaguri.trackplayer.service.Utils;
22
- import com.guichaguri.trackplayer.service.models.Track;
23
-
24
- import javax.annotation.Nonnull;
25
- import javax.annotation.Nullable;
26
- import java.util.*;
27
-
28
- /**
29
- * @author Guichaguri
30
- */
31
- public class MusicModule extends ReactContextBaseJavaModule implements ServiceConnection {
32
-
33
- private MusicBinder binder;
34
- private MusicEvents eventHandler;
35
- private ArrayDeque<Runnable> initCallbacks = new ArrayDeque<>();
36
- private boolean connecting = false;
37
- private Bundle options;
38
-
39
- public MusicModule(ReactApplicationContext reactContext) {
40
- super(reactContext);
41
- }
42
-
43
- @Override
44
- @Nonnull
45
- public String getName() {
46
- return "TrackPlayerModule";
47
- }
48
-
49
- @Override
50
- public void initialize() {
51
- ReactContext context = getReactApplicationContext();
52
- LocalBroadcastManager manager = LocalBroadcastManager.getInstance(context);
53
-
54
- eventHandler = new MusicEvents(context);
55
- manager.registerReceiver(eventHandler, new IntentFilter(Utils.EVENT_INTENT));
56
- }
57
-
58
- @Override
59
- public void onCatalystInstanceDestroy() {
60
- ReactContext context = getReactApplicationContext();
61
-
62
- if(eventHandler != null) {
63
- LocalBroadcastManager manager = LocalBroadcastManager.getInstance(context);
64
-
65
- manager.unregisterReceiver(eventHandler);
66
- eventHandler = null;
67
- }
68
- }
69
-
70
- @Override
71
- public void onServiceConnected(ComponentName name, IBinder service) {
72
- binder = (MusicBinder)service;
73
- connecting = false;
74
-
75
- // Reapply options that user set before with updateOptions
76
- if (options != null) {
77
- binder.updateOptions(options);
78
- }
79
-
80
- // Triggers all callbacks
81
- while(!initCallbacks.isEmpty()) {
82
- binder.post(initCallbacks.remove());
83
- }
84
- }
85
-
86
- @Override
87
- public void onServiceDisconnected(ComponentName name) {
88
- binder = null;
89
- connecting = false;
90
- }
91
-
92
- /**
93
- * Waits for a connection to the service and/or runs the {@link Runnable} in the player thread
94
- */
95
- private void waitForConnection(Runnable r) {
96
- if(binder != null) {
97
- binder.post(r);
98
- return;
99
- } else {
100
- initCallbacks.add(r);
101
- }
102
-
103
- if(connecting) return;
104
-
105
- ReactApplicationContext context = getReactApplicationContext();
106
-
107
- // Binds the service to get a MediaWrapper instance
108
- Intent intent = new Intent(context, MusicService.class);
109
- //context.startService(intent);
110
- try {
111
- if (Build.VERSION.SDK_INT >= 26) {
112
- context.startForegroundService(intent);
113
- } else {
114
- context.startService(intent);
115
- }
116
- }catch(Exception ex){
117
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
118
- AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
119
- Intent i = new Intent(context, MusicService.class);
120
- PendingIntent pi = PendingIntent.getForegroundService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
121
- Calendar calendar = Calendar.getInstance();
122
- calendar.setTimeInMillis(System.currentTimeMillis());
123
- calendar.add(Calendar.MILLISECOND, 200);
124
- mgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
125
- }
126
- }
127
- intent.setAction(Utils.CONNECT_INTENT);
128
- context.bindService(intent, this, 0);
129
-
130
-
131
-
132
- connecting = true;
133
- }
134
-
135
- /* ****************************** API ****************************** */
136
-
137
- @Nullable
138
- @Override
139
- public Map<String, Object> getConstants() {
140
- Map<String, Object> constants = new HashMap<>();
141
-
142
- // Capabilities
143
- constants.put("CAPABILITY_PLAY", PlaybackStateCompat.ACTION_PLAY);
144
- constants.put("CAPABILITY_PLAY_FROM_ID", PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID);
145
- constants.put("CAPABILITY_PLAY_FROM_SEARCH", PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH);
146
- constants.put("CAPABILITY_PAUSE", PlaybackStateCompat.ACTION_PAUSE);
147
- constants.put("CAPABILITY_STOP", PlaybackStateCompat.ACTION_STOP);
148
- constants.put("CAPABILITY_SEEK_TO", PlaybackStateCompat.ACTION_SEEK_TO);
149
- constants.put("CAPABILITY_SKIP", PlaybackStateCompat.ACTION_SKIP_TO_QUEUE_ITEM);
150
- constants.put("CAPABILITY_SKIP_TO_NEXT", PlaybackStateCompat.ACTION_SKIP_TO_NEXT);
151
- constants.put("CAPABILITY_SKIP_TO_PREVIOUS", PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS);
152
- constants.put("CAPABILITY_SET_RATING", PlaybackStateCompat.ACTION_SET_RATING);
153
- constants.put("CAPABILITY_JUMP_FORWARD", PlaybackStateCompat.ACTION_FAST_FORWARD);
154
- constants.put("CAPABILITY_JUMP_BACKWARD", PlaybackStateCompat.ACTION_REWIND);
155
-
156
- // States
157
- constants.put("STATE_NONE", PlaybackStateCompat.STATE_NONE);
158
- constants.put("STATE_READY", PlaybackStateCompat.STATE_PAUSED);
159
- constants.put("STATE_PLAYING", PlaybackStateCompat.STATE_PLAYING);
160
- constants.put("STATE_PAUSED", PlaybackStateCompat.STATE_PAUSED);
161
- constants.put("STATE_STOPPED", PlaybackStateCompat.STATE_STOPPED);
162
- constants.put("STATE_BUFFERING", PlaybackStateCompat.STATE_BUFFERING);
163
- constants.put("STATE_CONNECTING", PlaybackStateCompat.STATE_CONNECTING);
164
-
165
- // Rating Types
166
- constants.put("RATING_HEART", RatingCompat.RATING_HEART);
167
- constants.put("RATING_THUMBS_UP_DOWN", RatingCompat.RATING_THUMB_UP_DOWN);
168
- constants.put("RATING_3_STARS", RatingCompat.RATING_3_STARS);
169
- constants.put("RATING_4_STARS", RatingCompat.RATING_4_STARS);
170
- constants.put("RATING_5_STARS", RatingCompat.RATING_5_STARS);
171
- constants.put("RATING_PERCENTAGE", RatingCompat.RATING_PERCENTAGE);
172
-
173
- return constants;
174
- }
175
-
176
- @ReactMethod
177
- public void destroy() {
178
- // Ignore if it was already destroyed
179
- if (binder == null && !connecting) return;
180
-
181
- try {
182
- if(binder != null) {
183
- binder.destroy();
184
- binder = null;
185
- }
186
-
187
- ReactContext context = getReactApplicationContext();
188
- if(context != null) context.unbindService(this);
189
- } catch(Exception ex) {
190
- // This method shouldn't be throwing unhandled errors even if something goes wrong.
191
- Log.e(Utils.LOG, "An error occurred while destroying the service", ex);
192
- }
193
- }
194
-
195
- @ReactMethod
196
- public void updateOptions(ReadableMap data, final Promise callback) {
197
- // keep options as we may need them for correct MetadataManager reinitialization later
198
- options = Arguments.toBundle(data);
199
-
200
- waitForConnection(() -> {
201
- if(binder != null)
202
- binder.updateOptions(options);
203
- callback.resolve(null);
204
- });
205
- }
206
-
207
- @ReactMethod
208
- public void setNowPlaying(ReadableMap trackMap, final Promise callback) {
209
- final Bundle bundle = Arguments.toBundle(trackMap);
210
-
211
- waitForConnection(() -> {
212
- try {
213
- int state = trackMap.hasKey("state") ? trackMap.getInt("state") : 0;
214
-
215
- long elapsedTime = -1;
216
-
217
- if(trackMap.hasKey("elapsedTime")) {
218
- try {
219
- elapsedTime = Utils.toMillis(trackMap.getDouble("elapsedTime"));
220
-
221
- }
222
- catch(Exception ex){
223
- elapsedTime = Utils.toMillis((long)trackMap.getInt("elapsedTime"));
224
- }
225
- }
226
-
227
- Track track = new Track(getReactApplicationContext(), bundle, binder.getRatingType());
228
- binder.getManager().setCurrentTrack(track);
229
- binder.getManager().getMetadata().updateMetadata(track);
230
- binder.getManager().setState(state, elapsedTime);
231
- } catch(Exception ex) {
232
- callback.reject("invalid_track_object", ex);
233
- return;
234
- }
235
-
236
- if(binder != null && binder.getManager() != null && binder.getManager().getCurrentTrack() == null)
237
- callback.reject("invalid_track_object", "Track is missing a required key");
238
-
239
- callback.resolve(null);
240
- });
241
- }
242
-
243
- @ReactMethod
244
- public void updatePlayback(ReadableMap trackMap, final Promise callback) {
245
- final Bundle bundle = Arguments.toBundle(trackMap);
246
-
247
- waitForConnection(() -> {
248
- try {
249
- int state = trackMap.hasKey("state") ? trackMap.getInt("state") : 0;
250
- long elapsedTime = -1;
251
-
252
- if(trackMap.hasKey("elapsedTime")) {
253
- try {
254
- elapsedTime = Utils.toMillis((long)trackMap.getInt("elapsedTime"));
255
- }
256
- catch(Exception ex){
257
- elapsedTime = Utils.toMillis(trackMap.getDouble("elapsedTime"));
258
- }
259
- }
260
-
261
- long duration = -1;
262
-
263
- if(trackMap.hasKey("duration")) {
264
- try {
265
- duration = Utils.toMillis((long)trackMap.getInt("duration"));
266
- }
267
- catch(Exception ex){
268
- duration = Utils.toMillis(trackMap.getDouble("duration"));
269
- }
270
- }
271
- //update current track duration
272
- Track currentTrack = binder.getManager().getCurrentTrack();
273
- if(currentTrack != null && duration > -1)
274
- {
275
- currentTrack.duration = duration;
276
- binder.getManager().getMetadata().updateMetadata(currentTrack);
277
- }
278
-
279
- binder.getManager().setState(state, elapsedTime);
280
- } catch (Exception ex) {
281
- callback.reject("invalid_track_object", ex);
282
- return;
283
- }
284
-
285
- if (binder != null && binder.getManager() != null && binder.getManager().getCurrentTrack() == null)
286
- callback.reject("invalid_track_object", "Track is missing a required key");
287
- });
288
- }
289
- @ReactMethod
290
- public void reset(final Promise callback) {
291
- waitForConnection(() -> {
292
- if(binder != null && binder.getManager() != null) {
293
- binder.getManager().onReset();
294
- callback.resolve(null);
295
- }
296
- });
297
- }
298
- }
@@ -1,174 +0,0 @@
1
- package com.guichaguri.trackplayer.service;
2
-
3
- import android.annotation.SuppressLint;
4
- import android.content.BroadcastReceiver;
5
- import android.content.Context;
6
- import android.content.Intent;
7
- import android.os.IBinder;
8
- import android.os.PowerManager;
9
-
10
- import androidx.annotation.Nullable;
11
- import androidx.media.MediaBrowserServiceCompat;
12
- import com.facebook.infer.annotation.Assertions;
13
- import com.facebook.react.bridge.ReactContext;
14
- import com.facebook.react.bridge.UiThreadUtil;
15
- import com.facebook.react.jstasks.HeadlessJsTaskConfig;
16
- import com.facebook.react.jstasks.HeadlessJsTaskContext;
17
- import com.facebook.react.jstasks.HeadlessJsTaskEventListener;
18
- import com.facebook.react.ReactInstanceManager;
19
- import com.facebook.react.ReactInstanceEventListener;
20
- import com.facebook.react.ReactNativeHost;
21
- import com.facebook.react.ReactApplication;
22
- import java.util.Set;
23
- import java.util.concurrent.CopyOnWriteArraySet;
24
-
25
- /**
26
- * Base class for running JS without a UI. Generally, you only need to override {@link
27
- * #getTaskConfig}, which is called for every {@link #onStartCommand}. The result, if not {@code
28
- * null}, is used to run a JS task.
29
- *
30
- * <p>If you need more fine-grained control over how tasks are run, you can override {@link
31
- * #onStartCommand} and call {@link #startTask} depending on your custom logic.
32
- *
33
- * <p>If you're starting a {@code HeadlessJsTaskService} from a {@code BroadcastReceiver} (e.g.
34
- * handling push notifications), make sure to call {@link #acquireWakeLockNow} before returning from
35
- * {@link BroadcastReceiver#onReceive}, to make sure the device doesn't go to sleep before the
36
- * service is started.
37
- */
38
- public abstract class HeadlessJsMediaService extends MediaBrowserServiceCompat implements HeadlessJsTaskEventListener {
39
-
40
- private final Set<Integer> mActiveTasks = new CopyOnWriteArraySet<>();
41
- private static @Nullable PowerManager.WakeLock sWakeLock;
42
-
43
-
44
-
45
- @Override
46
- public int onStartCommand(Intent intent, int flags, int startId) {
47
- HeadlessJsTaskConfig taskConfig = getTaskConfig(intent);
48
- if (taskConfig != null) {
49
- startTask(taskConfig);
50
- return START_REDELIVER_INTENT;
51
- }
52
- return START_NOT_STICKY;
53
- }
54
-
55
- /**
56
- * Called from {@link #onStartCommand} to create a {@link HeadlessJsTaskConfig} for this intent.
57
- *
58
- * @param intent the {@link Intent} received in {@link #onStartCommand}.
59
- * @return a {@link HeadlessJsTaskConfig} to be used with {@link #startTask}, or {@code null} to
60
- * ignore this command.
61
- */
62
- protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
63
- return null;
64
- }
65
-
66
- /**
67
- * Acquire a wake lock to ensure the device doesn't go to sleep while processing background tasks.
68
- */
69
- @SuppressLint("WakelockTimeout")
70
- public static void acquireWakeLockNow(Context context) {
71
- if (sWakeLock == null || !sWakeLock.isHeld()) {
72
- PowerManager powerManager =
73
- Assertions.assertNotNull((PowerManager) context.getSystemService(POWER_SERVICE));
74
- sWakeLock =
75
- powerManager.newWakeLock(
76
- PowerManager.PARTIAL_WAKE_LOCK, HeadlessJsMediaService.class.getCanonicalName());
77
- sWakeLock.setReferenceCounted(false);
78
- sWakeLock.acquire();
79
- }
80
- }
81
-
82
- @Override
83
- public @Nullable IBinder onBind(Intent intent) {
84
- return super.onBind(intent);
85
- }
86
-
87
- @Override
88
- public void onCreate() {
89
- super.onCreate();
90
- }
91
-
92
- /**
93
- * Start a task. This method handles starting a new React instance if required.
94
- *
95
- * <p>Has to be called on the UI thread.
96
- *
97
- * @param taskConfig describes what task to start and the parameters to pass to it
98
- */
99
- protected void startTask(final HeadlessJsTaskConfig taskConfig) {
100
- UiThreadUtil.assertOnUiThread();
101
- acquireWakeLockNow(this);
102
- final ReactInstanceManager reactInstanceManager =
103
- getReactNativeHost().getReactInstanceManager();
104
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
105
- if (reactContext == null) {
106
- reactInstanceManager.addReactInstanceEventListener(
107
- new ReactInstanceEventListener() {
108
- @Override
109
- public void onReactContextInitialized(ReactContext reactContext) {
110
- invokeStartTask(reactContext, taskConfig);
111
- reactInstanceManager.removeReactInstanceEventListener(this);
112
- }
113
- });
114
- reactInstanceManager.createReactContextInBackground();
115
- } else {
116
- invokeStartTask(reactContext, taskConfig);
117
- }
118
- }
119
-
120
- private void invokeStartTask(ReactContext reactContext, final HeadlessJsTaskConfig taskConfig) {
121
- final HeadlessJsTaskContext headlessJsTaskContext =
122
- HeadlessJsTaskContext.getInstance(reactContext);
123
- headlessJsTaskContext.addTaskEventListener(this);
124
-
125
- UiThreadUtil.runOnUiThread(
126
- new Runnable() {
127
- @Override
128
- public void run() {
129
- int taskId = headlessJsTaskContext.startTask(taskConfig);
130
- mActiveTasks.add(taskId);
131
- }
132
- });
133
- }
134
-
135
- @Override
136
- public void onDestroy() {
137
- super.onDestroy();
138
-
139
- if (getReactNativeHost().hasInstance()) {
140
- ReactInstanceManager reactInstanceManager = getReactNativeHost().getReactInstanceManager();
141
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
142
- if (reactContext != null) {
143
- HeadlessJsTaskContext headlessJsTaskContext =
144
- HeadlessJsTaskContext.getInstance(reactContext);
145
- headlessJsTaskContext.removeTaskEventListener(this);
146
- }
147
- }
148
- if (sWakeLock != null) {
149
- sWakeLock.release();
150
- }
151
- }
152
-
153
- @Override
154
- public void onHeadlessJsTaskStart(int taskId) {}
155
-
156
- @Override
157
- public void onHeadlessJsTaskFinish(int taskId) {
158
- mActiveTasks.remove(taskId);
159
- if (mActiveTasks.size() == 0) {
160
- stopSelf();
161
- }
162
- }
163
-
164
- /**
165
- * Get the {@link ReactNativeHost} used by this app. By default, assumes {@link #getApplication()}
166
- * is an instance of {@link ReactApplication} and calls {@link
167
- * ReactApplication#getReactNativeHost()}. Override this method if your application class does not
168
- * implement {@code ReactApplication} or you simply have a different mechanism for storing a
169
- * {@code ReactNativeHost}, e.g. as a static field somewhere.
170
- */
171
- protected ReactNativeHost getReactNativeHost() {
172
- return ((ReactApplication) getApplication()).getReactNativeHost();
173
- }
174
- }
@@ -1,47 +0,0 @@
1
- package com.guichaguri.trackplayer.service;
2
-
3
- import android.os.Binder;
4
- import android.os.Bundle;
5
- import android.os.Handler;
6
-
7
- /**
8
- * @author Guichaguri
9
- */
10
- public class MusicBinder extends Binder {
11
-
12
- private final MusicService service;
13
- private final MusicManager manager;
14
-
15
- public MusicBinder(MusicService service, MusicManager manager) {
16
- this.service = service;
17
- this.manager = manager;
18
- }
19
-
20
- public void post(Runnable r) {
21
- if(service == null)
22
- return;
23
-
24
- if(service.handler == null)
25
- service.handler = new Handler();
26
-
27
- service.handler.post(r);
28
- }
29
-
30
- public MusicManager getManager(){ return this.manager; }
31
-
32
- public void updateOptions(Bundle bundle) {
33
- manager.setStopWithApp(bundle.getBoolean("stopWithApp", false));
34
- manager.setAlwaysPauseOnInterruption(bundle.getBoolean("alwaysPauseOnInterruption", false));
35
- manager.getMetadata().updateOptions(bundle);
36
- }
37
-
38
- public int getRatingType() {
39
- return manager.getMetadata().getRatingType();
40
- }
41
-
42
- public void destroy() {
43
- service.destroy(true);
44
- service.stopSelf();
45
- }
46
-
47
- }