@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,379 +0,0 @@
1
- package com.guichaguri.trackplayer.service.metadata;
2
-
3
- import static androidx.core.app.NotificationCompat.PRIORITY_MAX;
4
-
5
- import android.app.AlarmManager;
6
- import android.app.Notification;
7
- import android.app.NotificationChannel;
8
- import android.app.NotificationManager;
9
- import android.app.PendingIntent;
10
- import android.content.ComponentName;
11
- import android.content.Context;
12
- import android.content.Intent;
13
- import android.content.pm.ServiceInfo;
14
- import android.graphics.Bitmap;
15
- import android.graphics.BitmapFactory;
16
- import android.net.Uri;
17
- import android.os.Build;
18
- import android.os.Bundle;
19
- import androidx.core.app.NotificationCompat;
20
- import androidx.core.app.NotificationCompat.Action;
21
- import android.support.v4.media.MediaMetadataCompat;
22
- import android.support.v4.media.RatingCompat;
23
-
24
- import androidx.core.app.NotificationManagerCompat;
25
- import androidx.media.app.NotificationCompat.MediaStyle;
26
- import androidx.media.session.MediaButtonReceiver;
27
- import android.support.v4.media.session.MediaSessionCompat;
28
- import android.support.v4.media.session.PlaybackStateCompat;
29
- import com.bumptech.glide.Glide;
30
- import com.bumptech.glide.RequestManager;
31
- import com.bumptech.glide.request.target.SimpleTarget;
32
- import com.bumptech.glide.request.transition.Transition;
33
- import com.facebook.react.bridge.ReactContext;
34
- import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper;
35
- import com.guichaguri.trackplayer.R;
36
- import com.guichaguri.trackplayer.service.MusicManager;
37
- import com.guichaguri.trackplayer.service.MusicService;
38
- import com.guichaguri.trackplayer.service.Utils;
39
- import com.guichaguri.trackplayer.service.models.Track;
40
- import java.util.ArrayList;
41
- import java.util.Calendar;
42
- import java.util.List;
43
-
44
- /**
45
- * @author Guichaguri
46
- */
47
- public class MetadataManager {
48
-
49
- private final MusicService service;
50
- private final MusicManager manager;
51
- private final MediaSessionCompat session;
52
-
53
- private int ratingType = RatingCompat.RATING_NONE;
54
- private int jumpInterval = 15;
55
- private long actions = 0;
56
- private long compactActions = 0;
57
- private SimpleTarget<Bitmap> artworkTarget;
58
- private NotificationCompat.Builder builder;
59
- private Bundle optionsBundle = null;
60
-
61
- private boolean hideArtworkLockScreenBackground;
62
-
63
- private Action previousAction, rewindAction, playAction, pauseAction, stopAction, forwardAction, nextAction;
64
-
65
- public MetadataManager(MusicService service, MusicManager manager) {
66
- this.service = service;
67
- this.manager = manager;
68
-
69
- String channel = Utils.getNotificationChannel((Context) service);
70
- this.builder = new NotificationCompat.Builder(service, channel);
71
- this.session = new MediaSessionCompat(service, "TrackPlayer", null, null);
72
-
73
- session.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS);
74
- session.setCallback(new ButtonEvents(service, manager));
75
-
76
- Context context = service.getApplicationContext();
77
- String packageName = context.getPackageName();
78
- Intent openApp = context.getPackageManager().getLaunchIntentForPackage(packageName);
79
-
80
- if (openApp == null) {
81
- openApp = new Intent();
82
- openApp.setPackage(packageName);
83
- openApp.addCategory(Intent.CATEGORY_LAUNCHER);
84
- }
85
-
86
- // Prevent the app from launching a new instance
87
- openApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
88
-
89
- // Add the Uri data so apps can identify that it was a notification click
90
- openApp.setAction(Intent.ACTION_VIEW);
91
- openApp.setData(Uri.parse("trackplayer://notification.click"));
92
-
93
- int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_UPDATE_CURRENT;
94
-
95
- builder.setContentIntent(PendingIntent.getActivity(context, 0, openApp, flags));
96
-
97
- builder.setSmallIcon(R.drawable.ic_logo);
98
- builder.setCategory(NotificationCompat.CATEGORY_TRANSPORT);
99
-
100
- // Stops the playback when the notification is swiped away
101
- builder.setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(service, PlaybackStateCompat.ACTION_STOP));
102
-
103
- // Make it visible in the lockscreen
104
- builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
105
- }
106
-
107
- public MediaSessionCompat getSession() {
108
- return session;
109
- }
110
-
111
- /**
112
- * Updates the metadata options
113
- * @param options The options
114
- */
115
- public void updateOptions(Bundle options) {
116
- optionsBundle = options;
117
- List<Integer> capabilities = options.getIntegerArrayList("capabilities");
118
- List<Integer> notification = options.getIntegerArrayList("notificationCapabilities");
119
- List<Integer> compact = options.getIntegerArrayList("compactCapabilities");
120
-
121
- hideArtworkLockScreenBackground = options.getBoolean("hideArtworkLockScreenBackground");
122
-
123
- actions = 0;
124
- compactActions = 0;
125
-
126
- if(capabilities != null) {
127
- // Create the actions mask
128
- for(int cap : capabilities) actions |= cap;
129
-
130
- // If there is no notification capabilities defined, we'll show all capabilities available
131
- if(notification == null) notification = capabilities;
132
-
133
- // Initialize all actions based on the options
134
-
135
- previousAction = createAction(notification, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS, "Previous",
136
- getIcon(options, "previousIcon", R.drawable.ic_previous));
137
- rewindAction = createAction(notification, PlaybackStateCompat.ACTION_REWIND, "Rewind",
138
- getIcon(options, "rewindIcon", R.drawable.ic_rewind));
139
- playAction = createAction(notification, PlaybackStateCompat.ACTION_PLAY, "Play",
140
- getIcon(options, "playIcon", R.drawable.ic_play));
141
- pauseAction = createAction(notification, PlaybackStateCompat.ACTION_PAUSE, "Pause",
142
- getIcon(options, "pauseIcon", R.drawable.ic_pause));
143
- stopAction = createAction(notification, PlaybackStateCompat.ACTION_STOP, "Stop",
144
- getIcon(options, "stopIcon", R.drawable.ic_stop));
145
- forwardAction = createAction(notification, PlaybackStateCompat.ACTION_FAST_FORWARD, "Forward",
146
- getIcon(options, "forwardIcon", R.drawable.ic_forward));
147
- nextAction = createAction(notification, PlaybackStateCompat.ACTION_SKIP_TO_NEXT, "Next",
148
- getIcon(options, "nextIcon", R.drawable.ic_next));
149
-
150
- // Update the action mask for the compact view
151
- if(compact != null) {
152
- for(int cap : compact) compactActions |= cap;
153
- }
154
- }
155
-
156
- // Update the color
157
- builder.setColor(Utils.getInt(options, "color", NotificationCompat.COLOR_DEFAULT));
158
-
159
- // Update the icon
160
- builder.setSmallIcon(getIcon(options, "icon", R.drawable.ic_logo));
161
-
162
- // Update the jump interval
163
- jumpInterval = Utils.getInt(options, "jumpInterval", 15);
164
-
165
- // Update the rating type
166
- ratingType = Utils.getInt(options, "ratingType", RatingCompat.RATING_NONE);
167
- session.setRatingType(ratingType);
168
-
169
- updateNotification();
170
- }
171
-
172
- public Bundle getOptionsBundle() { return optionsBundle; }
173
-
174
- public int getRatingType() {
175
- return ratingType;
176
- }
177
-
178
- public int getJumpInterval() {
179
- return jumpInterval;
180
- }
181
-
182
- public void removeNotifications() {
183
- String ns = Context.NOTIFICATION_SERVICE;
184
- Context context = service.getApplicationContext();
185
- NotificationManager manager = (NotificationManager) context.getSystemService(ns);
186
- manager.cancelAll();
187
- }
188
-
189
- /**
190
- * Updates the artwork
191
- * @param bitmap The new artwork
192
- */
193
- protected void updateArtwork(Bitmap bitmap) {
194
- Track track = manager.getCurrentTrack();
195
- if(track == null) return;
196
-
197
- MediaMetadataCompat.Builder metadata = track.toMediaMetadata();
198
-
199
- metadata.putBitmap(hideArtworkLockScreenBackground ? MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON : MediaMetadataCompat.METADATA_KEY_ART, bitmap);
200
- builder.setLargeIcon(bitmap);
201
-
202
- session.setMetadata(metadata.build());
203
- updateNotification();
204
- }
205
-
206
- /**
207
- * Updates the current track
208
- * @param track The new track
209
- */
210
- public void updateMetadata(Track track) {
211
- MediaMetadataCompat.Builder metadata = track.toMediaMetadata();
212
-
213
- RequestManager rm = Glide.with(service.getApplicationContext());
214
- if(artworkTarget != null) rm.clear(artworkTarget);
215
-
216
- if(track.artwork != null) {
217
- artworkTarget = rm.asBitmap()
218
- .load(track.artwork)
219
- .into(new SimpleTarget<Bitmap>() {
220
- @Override
221
- public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
222
- try {
223
- metadata.putBitmap(hideArtworkLockScreenBackground ? MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON :
224
- MediaMetadataCompat.METADATA_KEY_ART, resource);
225
- builder.setLargeIcon(resource);
226
-
227
- session.setMetadata(metadata.build());
228
- updateNotification();
229
- }catch(Exception ex){}
230
- artworkTarget = null;
231
- }
232
- });
233
- }
234
-
235
- builder.setContentTitle(track.title);
236
- builder.setContentText(track.artist);
237
- builder.setSubText(track.album);
238
-
239
- session.setMetadata(metadata.build());
240
- updateNotification();
241
- }
242
-
243
- /**
244
- * Updates the playback state
245
- * @param state The player
246
- */
247
- public void updatePlayback(int state, long position, long bufferedPosition, int rate) {
248
- boolean playing = Utils.isPlaying(state);
249
- List<Integer> compact = new ArrayList<>();
250
- builder.mActions.clear();
251
-
252
- // Adds the media buttons to the notification
253
-
254
- addAction(previousAction, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS, compact);
255
- addAction(rewindAction, PlaybackStateCompat.ACTION_REWIND, compact);
256
-
257
- if(playing) {
258
- addAction(pauseAction, PlaybackStateCompat.ACTION_PAUSE, compact);
259
- } else {
260
- addAction(playAction, PlaybackStateCompat.ACTION_PLAY, compact);
261
- }
262
-
263
- addAction(stopAction, PlaybackStateCompat.ACTION_STOP, compact);
264
- addAction(forwardAction, PlaybackStateCompat.ACTION_FAST_FORWARD, compact);
265
- addAction(nextAction, PlaybackStateCompat.ACTION_SKIP_TO_NEXT, compact);
266
-
267
- // Prevent the media style from being used in older Huawei devices that don't support custom styles
268
- if(!Build.MANUFACTURER.toLowerCase().contains("huawei") || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
269
-
270
- MediaStyle style = new MediaStyle();
271
-
272
- if(playing) {
273
- style.setShowCancelButton(false);
274
- } else {
275
- // Shows the cancel button on pre-lollipop versions due to a bug
276
- style.setShowCancelButton(true);
277
- style.setCancelButtonIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(service,
278
- PlaybackStateCompat.ACTION_STOP));
279
- }
280
-
281
- // Links the media session
282
- style.setMediaSession(session.getSessionToken());
283
-
284
- // Updates the compact media buttons for the notification
285
- if (!compact.isEmpty()) {
286
- int[] compactIndexes = new int[compact.size()];
287
-
288
- for (int i = 0; i < compact.size(); i++) compactIndexes[i] = compact.get(i);
289
-
290
- style.setShowActionsInCompactView(compactIndexes);
291
- }
292
-
293
- builder.setStyle(style);
294
-
295
- }
296
-
297
- // Updates the media session state
298
- PlaybackStateCompat.Builder pb = new PlaybackStateCompat.Builder();
299
- pb.setActions(actions);
300
- pb.setState(state, position, rate);
301
- pb.setBufferedPosition(bufferedPosition);
302
-
303
- session.setPlaybackState(pb.build());
304
- updateNotification();
305
- }
306
-
307
- public void setActive(boolean active) {
308
- this.session.setActive(active);
309
-
310
- updateNotification();
311
- }
312
-
313
- public void destroy(Boolean intentToStop) {
314
- service.stopForeground(false);
315
-
316
- if (!intentToStop) {
317
- updateNotification();
318
- } else {
319
- session.setActive(false);
320
- session.release();
321
- }
322
- }
323
-
324
- private void updateNotification() {
325
- try {
326
- if(session.isActive()) {
327
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
328
- service.startForeground(1, builder
329
- .setForegroundServiceBehavior(Notification.FOREGROUND_SERVICE_IMMEDIATE)
330
- .setPriority(PRIORITY_MAX)
331
- .build(), ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK);
332
- }else{
333
- service.startForeground(1, builder
334
- .setForegroundServiceBehavior(Notification.FOREGROUND_SERVICE_IMMEDIATE)
335
- .setPriority(PRIORITY_MAX)
336
- .build());
337
- }
338
- }
339
- }catch(Exception ex){
340
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
341
- Context context = service.getApplicationContext();
342
- AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
343
- Intent i = new Intent(context, MusicService.class);
344
- PendingIntent pi = PendingIntent.getForegroundService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
345
- Calendar calendar = Calendar.getInstance();
346
- calendar.setTimeInMillis(System.currentTimeMillis());
347
- calendar.add(Calendar.MILLISECOND, 200);
348
- mgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
349
- }
350
- }
351
- }
352
-
353
- private int getIcon(Bundle options, String propertyName, int defaultIcon) {
354
- if(!options.containsKey(propertyName)) return defaultIcon;
355
-
356
- Bundle bundle = options.getBundle(propertyName);
357
- if(bundle == null) return defaultIcon;
358
-
359
- ResourceDrawableIdHelper helper = ResourceDrawableIdHelper.getInstance();
360
- int icon = helper.getResourceDrawableId(service, bundle.getString("uri"));
361
- if(icon == 0) return defaultIcon;
362
-
363
- return icon;
364
- }
365
-
366
- private Action createAction(List<Integer> caps, long action, String title, int icon) {
367
- if(!caps.contains((int)action)) return null;
368
-
369
- return new Action(icon, title, MediaButtonReceiver.buildMediaButtonPendingIntent(service, action));
370
- }
371
-
372
- private void addAction(Action action, long id, List<Integer> compact) {
373
- if(action == null) return;
374
-
375
- if((compactActions & id) != 0) compact.add(builder.mActions.size());
376
- builder.mActions.add(action);
377
- }
378
-
379
- }
@@ -1,141 +0,0 @@
1
- package com.guichaguri.trackplayer.service.models;
2
-
3
- import android.content.Context;
4
- import android.net.Uri;
5
- import android.os.Bundle;
6
- import android.support.v4.media.MediaDescriptionCompat;
7
- import android.support.v4.media.MediaMetadataCompat;
8
- import android.support.v4.media.RatingCompat;
9
- import android.support.v4.media.session.MediaSessionCompat.QueueItem;
10
- import com.guichaguri.trackplayer.service.Utils;
11
-
12
- import org.json.JSONObject;
13
-
14
- import java.io.IOException;
15
- import java.util.ArrayList;
16
- import java.util.HashMap;
17
- import java.util.List;
18
- import java.util.Map;
19
-
20
- import static android.support.v4.media.MediaMetadataCompat.*;
21
- import static com.guichaguri.trackplayer.service.Utils.bundleToJson;
22
-
23
- /**
24
- * @author Guichaguri
25
- */
26
- public class Track {
27
- public String id;
28
- public int resourceId;
29
-
30
- public TrackType type = TrackType.DEFAULT;
31
-
32
- public String contentType;
33
- public String userAgent;
34
-
35
- public Uri artwork;
36
-
37
- public String title;
38
- public String artist;
39
- public String album;
40
- public String date;
41
- public String genre;
42
- public long duration;
43
- public Bundle originalItem;
44
- public JSONObject json;
45
-
46
- public RatingCompat rating;
47
-
48
- public Map<String, String> headers;
49
-
50
- public final long queueId;
51
-
52
- public Track(Context context, Bundle bundle, int ratingType) {
53
- id = bundle.getString("id");
54
-
55
- String trackType = bundle.getString("type", "default");
56
-
57
- for(TrackType t : TrackType.values()) {
58
- if(t.name.equalsIgnoreCase(trackType)) {
59
- type = t;
60
- break;
61
- }
62
- }
63
-
64
- contentType = bundle.getString("contentType");
65
- userAgent = bundle.getString("userAgent");
66
-
67
- Bundle httpHeaders = bundle.getBundle("headers");
68
- if(httpHeaders != null) {
69
- headers = new HashMap<>();
70
- for(String header : httpHeaders.keySet()) {
71
- headers.put(header, httpHeaders.getString(header));
72
- }
73
- }
74
-
75
- setMetadata(context, bundle, ratingType);
76
-
77
- queueId = System.currentTimeMillis();
78
- json = bundleToJson(bundle);
79
- originalItem = bundle;
80
- }
81
-
82
- public void setMetadata(Context context, Bundle bundle, int ratingType) {
83
- artwork = Utils.getUri(context, bundle, "artwork");
84
-
85
- title = bundle.getString("title");
86
- artist = bundle.getString("artist");
87
- album = bundle.getString("album");
88
- date = bundle.getString("date");
89
- genre = bundle.getString("genre");
90
- try {
91
- duration = Utils.toMillis(bundle.getDouble("duration", 0));
92
-
93
- }catch(Exception ex){
94
- int durationInt = bundle.getInt("duration", 0);
95
- duration = Utils.toMillis((long)durationInt);
96
- }
97
-
98
- rating = Utils.getRating(bundle, "rating", ratingType);
99
-
100
- if (originalItem != null && originalItem != bundle)
101
- originalItem.putAll(bundle);
102
- }
103
-
104
- public MediaMetadataCompat.Builder toMediaMetadata() {
105
- MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
106
-
107
- builder.putString(METADATA_KEY_TITLE, title);
108
- builder.putString(METADATA_KEY_ARTIST, artist);
109
- builder.putString(METADATA_KEY_ALBUM, album);
110
- builder.putString(METADATA_KEY_DATE, date);
111
- builder.putString(METADATA_KEY_GENRE, genre);
112
- //builder.putString(METADATA_KEY_MEDIA_URI, uri.toString());
113
- builder.putString(METADATA_KEY_MEDIA_ID, id);
114
-
115
- if (duration > 0) {
116
- builder.putLong(METADATA_KEY_DURATION, duration);
117
- }
118
-
119
- if (artwork != null) {
120
- builder.putString(METADATA_KEY_ART_URI, artwork.toString());
121
- }
122
-
123
- if (rating != null) {
124
- builder.putRating(METADATA_KEY_RATING, rating);
125
- }
126
-
127
- return builder;
128
- }
129
-
130
- public QueueItem toQueueItem() {
131
- MediaDescriptionCompat descr = new MediaDescriptionCompat.Builder()
132
- .setTitle(title)
133
- .setSubtitle(artist)
134
- .setMediaId(id)
135
- //.setMediaUri(uri)
136
- .setIconUri(artwork)
137
- .build();
138
-
139
- return new QueueItem(descr, queueId);
140
- }
141
- }
@@ -1,35 +0,0 @@
1
- package com.guichaguri.trackplayer.service.models;
2
-
3
- /**
4
- * @author Guichaguri
5
- */
6
- public enum TrackType {
7
-
8
- /**
9
- * The default media type. Should be used for streams over HTTP or files
10
- */
11
- DEFAULT("default"),
12
-
13
- /**
14
- * The DASH media type for adaptive streams. Should be used with DASH manifests
15
- */
16
- DASH("dash"),
17
-
18
- /**
19
- * The HLS media type for adaptive streams. Should be used with HLS playlists
20
- */
21
- HLS("hls"),
22
-
23
- /**
24
- * The SmoothStreaming media type for adaptive streams. Should be used with SmoothStreaming manifests
25
- */
26
- SMOOTH_STREAMING("smoothstreaming");
27
-
28
-
29
- public final String name;
30
-
31
- TrackType(String name) {
32
- this.name = name;
33
- }
34
-
35
- }