capacitor-plugin-playlist 0.5.1 → 0.6.1

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 (127) hide show
  1. package/README.md +29 -23
  2. package/android/build.gradle +2 -4
  3. package/android/src/main/java/org/dwbn/plugins/playlist/App.kt +0 -43
  4. package/android/src/main/java/org/dwbn/plugins/playlist/PlaylistPlugin.kt +217 -153
  5. package/android/src/main/java/org/dwbn/plugins/playlist/RmxAudioPlayer.java +4 -2
  6. package/android/src/main/java/org/dwbn/plugins/playlist/manager/PlaylistManager.kt +8 -6
  7. package/android/src/main/java/org/dwbn/plugins/playlist/playlist/AudioApi.kt +20 -11
  8. package/android/src/main/java/org/dwbn/plugins/playlist/playlist/AudioPlaylistHandler.java +1 -46
  9. package/android/src/main/java/org/dwbn/plugins/playlist/playlist/BaseMediaApi.kt +4 -8
  10. package/android/src/main/java/org/dwbn/plugins/playlist/service/MediaService.kt +17 -0
  11. package/package.json +1 -1
  12. package/android/.gradle/8.0.2/checksums/checksums.lock +0 -0
  13. package/android/.gradle/8.0.2/checksums/md5-checksums.bin +0 -0
  14. package/android/.gradle/8.0.2/checksums/sha1-checksums.bin +0 -0
  15. package/android/.gradle/8.0.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  16. package/android/.gradle/8.0.2/dependencies-accessors/gc.properties +0 -0
  17. package/android/.gradle/8.0.2/executionHistory/executionHistory.bin +0 -0
  18. package/android/.gradle/8.0.2/executionHistory/executionHistory.lock +0 -0
  19. package/android/.gradle/8.0.2/fileChanges/last-build.bin +0 -0
  20. package/android/.gradle/8.0.2/fileHashes/fileHashes.bin +0 -0
  21. package/android/.gradle/8.0.2/fileHashes/fileHashes.lock +0 -0
  22. package/android/.gradle/8.0.2/fileHashes/resourceHashesCache.bin +0 -0
  23. package/android/.gradle/8.0.2/gc.properties +0 -0
  24. package/android/.gradle/8.2.1/checksums/checksums.lock +0 -0
  25. package/android/.gradle/8.2.1/checksums/md5-checksums.bin +0 -0
  26. package/android/.gradle/8.2.1/checksums/sha1-checksums.bin +0 -0
  27. package/android/.gradle/8.2.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  28. package/android/.gradle/8.2.1/dependencies-accessors/gc.properties +0 -0
  29. package/android/.gradle/8.2.1/executionHistory/executionHistory.bin +0 -0
  30. package/android/.gradle/8.2.1/executionHistory/executionHistory.lock +0 -0
  31. package/android/.gradle/8.2.1/fileChanges/last-build.bin +0 -0
  32. package/android/.gradle/8.2.1/fileHashes/fileHashes.bin +0 -0
  33. package/android/.gradle/8.2.1/fileHashes/fileHashes.lock +0 -0
  34. package/android/.gradle/8.2.1/gc.properties +0 -0
  35. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  36. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  37. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  38. package/android/.gradle/config.properties +0 -2
  39. package/android/.gradle/file-system.probe +0 -0
  40. package/android/.gradle/vcs-1/gc.properties +0 -0
  41. package/android/.idea/compiler.xml +0 -6
  42. package/android/.idea/gradle.xml +0 -19
  43. package/android/.idea/kotlinc.xml +0 -6
  44. package/android/.idea/migrations.xml +0 -10
  45. package/android/.idea/misc.xml +0 -9
  46. package/android/.idea/vcs.xml +0 -6
  47. package/android/bin/.gradle/8.0.2/checksums/checksums.lock +0 -0
  48. package/android/bin/.gradle/8.0.2/checksums/md5-checksums.bin +0 -0
  49. package/android/bin/.gradle/8.0.2/checksums/sha1-checksums.bin +0 -0
  50. package/android/bin/.gradle/8.0.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  51. package/android/bin/.gradle/8.0.2/dependencies-accessors/gc.properties +0 -0
  52. package/android/bin/.gradle/8.0.2/executionHistory/executionHistory.bin +0 -0
  53. package/android/bin/.gradle/8.0.2/executionHistory/executionHistory.lock +0 -0
  54. package/android/bin/.gradle/8.0.2/fileChanges/last-build.bin +0 -0
  55. package/android/bin/.gradle/8.0.2/fileHashes/fileHashes.bin +0 -0
  56. package/android/bin/.gradle/8.0.2/fileHashes/fileHashes.lock +0 -0
  57. package/android/bin/.gradle/8.0.2/fileHashes/resourceHashesCache.bin +0 -0
  58. package/android/bin/.gradle/8.0.2/gc.properties +0 -0
  59. package/android/bin/.gradle/8.2.1/checksums/checksums.lock +0 -0
  60. package/android/bin/.gradle/8.2.1/checksums/md5-checksums.bin +0 -0
  61. package/android/bin/.gradle/8.2.1/checksums/sha1-checksums.bin +0 -0
  62. package/android/bin/.gradle/8.2.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  63. package/android/bin/.gradle/8.2.1/dependencies-accessors/gc.properties +0 -0
  64. package/android/bin/.gradle/8.2.1/executionHistory/executionHistory.bin +0 -0
  65. package/android/bin/.gradle/8.2.1/executionHistory/executionHistory.lock +0 -0
  66. package/android/bin/.gradle/8.2.1/fileChanges/last-build.bin +0 -0
  67. package/android/bin/.gradle/8.2.1/fileHashes/fileHashes.bin +0 -0
  68. package/android/bin/.gradle/8.2.1/fileHashes/fileHashes.lock +0 -0
  69. package/android/bin/.gradle/8.2.1/gc.properties +0 -0
  70. package/android/bin/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  71. package/android/bin/.gradle/buildOutputCleanup/cache.properties +0 -2
  72. package/android/bin/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  73. package/android/bin/.gradle/config.properties +0 -2
  74. package/android/bin/.gradle/file-system.probe +0 -0
  75. package/android/bin/.gradle/vcs-1/gc.properties +0 -0
  76. package/android/bin/.idea/compiler.xml +0 -6
  77. package/android/bin/.idea/gradle.xml +0 -19
  78. package/android/bin/.idea/kotlinc.xml +0 -6
  79. package/android/bin/.idea/migrations.xml +0 -10
  80. package/android/bin/.idea/misc.xml +0 -9
  81. package/android/bin/.idea/vcs.xml +0 -6
  82. package/android/bin/.project +0 -34
  83. package/android/bin/build.gradle +0 -79
  84. package/android/bin/gradle/wrapper/gradle-wrapper.jar +0 -0
  85. package/android/bin/gradle/wrapper/gradle-wrapper.properties +0 -7
  86. package/android/bin/gradle.properties +0 -22
  87. package/android/bin/gradlew +0 -248
  88. package/android/bin/gradlew.bat +0 -92
  89. package/android/bin/local.properties +0 -8
  90. package/android/bin/proguard-rules.pro +0 -21
  91. package/android/bin/settings.gradle +0 -2
  92. package/android/bin/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.class +0 -0
  93. package/android/bin/src/main/AndroidManifest.xml +0 -4
  94. package/android/bin/src/main/java/org/dwbn/plugins/playlist/App.kt +0 -62
  95. package/android/bin/src/main/java/org/dwbn/plugins/playlist/FakeR.kt +0 -39
  96. package/android/bin/src/main/java/org/dwbn/plugins/playlist/OnStatusCallback.kt +0 -34
  97. package/android/bin/src/main/java/org/dwbn/plugins/playlist/OnStatusReportListener.class +0 -0
  98. package/android/bin/src/main/java/org/dwbn/plugins/playlist/PlaylistItemOptions.class +0 -0
  99. package/android/bin/src/main/java/org/dwbn/plugins/playlist/PlaylistPlugin.kt +0 -356
  100. package/android/bin/src/main/java/org/dwbn/plugins/playlist/RmxAudioErrorType.class +0 -0
  101. package/android/bin/src/main/java/org/dwbn/plugins/playlist/RmxAudioPlayer.class +0 -0
  102. package/android/bin/src/main/java/org/dwbn/plugins/playlist/RmxAudioStatusMessage.class +0 -0
  103. package/android/bin/src/main/java/org/dwbn/plugins/playlist/RmxConstants.class +0 -0
  104. package/android/bin/src/main/java/org/dwbn/plugins/playlist/TrackRemovalItem.class +0 -0
  105. package/android/bin/src/main/java/org/dwbn/plugins/playlist/data/AudioTrack.kt +0 -94
  106. package/android/bin/src/main/java/org/dwbn/plugins/playlist/manager/MediaControlsListener.kt +0 -13
  107. package/android/bin/src/main/java/org/dwbn/plugins/playlist/manager/Options.kt +0 -77
  108. package/android/bin/src/main/java/org/dwbn/plugins/playlist/manager/PlaylistManager.kt +0 -286
  109. package/android/bin/src/main/java/org/dwbn/plugins/playlist/notification/PlaylistNotificationProvider.kt +0 -26
  110. package/android/bin/src/main/java/org/dwbn/plugins/playlist/playlist/AudioApi.kt +0 -101
  111. package/android/bin/src/main/java/org/dwbn/plugins/playlist/playlist/AudioPlaylistHandler$Builder.class +0 -0
  112. package/android/bin/src/main/java/org/dwbn/plugins/playlist/playlist/AudioPlaylistHandler.class +0 -0
  113. package/android/bin/src/main/java/org/dwbn/plugins/playlist/playlist/BaseMediaApi.kt +0 -40
  114. package/android/bin/src/main/java/org/dwbn/plugins/playlist/service/MediaImageProvider.kt +0 -79
  115. package/android/bin/src/main/java/org/dwbn/plugins/playlist/service/MediaService.kt +0 -53
  116. package/android/bin/src/main/res/.gitkeep +0 -0
  117. package/android/bin/src/main/res/drawable/ic_closed_caption_white_24dp.xml +0 -9
  118. package/android/bin/src/main/res/drawable/ic_demo_icon_adaptive.xml +0 -15
  119. package/android/bin/src/main/res/drawable/ic_launcher_background.xml +0 -48
  120. package/android/bin/src/main/res/drawable/ic_launcher_foreground.xml +0 -22
  121. package/android/bin/src/main/res/drawable/ic_notification_icon.png +0 -0
  122. package/android/bin/src/main/res/layout/bridge_layout_main.xml +0 -15
  123. package/android/bin/src/main/res/values/colors.xml +0 -3
  124. package/android/bin/src/main/res/values/strings.xml +0 -3
  125. package/android/bin/src/main/res/values/styles.xml +0 -3
  126. package/android/bin/src/test/java/com/getcapacitor/ExampleUnitTest.class +0 -0
  127. package/android/local.properties +0 -8
package/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # capacitor-plugin-playlist
2
+
2
3
  Will probably be published as @dwbn/capacitor-playlist
3
4
 
4
5
  A capacitor 3. 0 plugin for Android, iOS and Web with native support for audio playlists, background support, and lock screen controls
@@ -21,12 +22,13 @@ cordova, and here we wanna give back to the community our outcome, any help is a
21
22
 
22
23
  ## 2. Notes
23
24
 
24
- ### On *Android*, utilizes a wrapper over ExoPlayer called [ExoMedia](https://github.com/brianwernick/ExoMedia). ExoPlayer is a powerful, high-quality player for Android provided by Google
25
+ ### On _Android_, utilizes a wrapper over ExoPlayer called [ExoMedia](https://github.com/brianwernick/ExoMedia). ExoPlayer is a powerful, high-quality player for Android provided by Google
26
+
25
27
  ### On iOS, utilizes a customized AVQueuePlayer in order to provide feedback about track changes, buffering, etc.; given that AVQueuePlayer can keep the audio session running between songs.
26
28
 
27
- * This plugin is not designed to play mixable, rapid-fire, low-latency audio, as you would use in a game. A more appropriate cordova plugin for that use case is [cordova-plugin-nativeaudio](https://github.com/floatinghotpot/cordova-plugin-nativeaudio)
29
+ - This plugin is not designed to play mixable, rapid-fire, low-latency audio, as you would use in a game. A more appropriate cordova plugin for that use case is [cordova-plugin-nativeaudio](https://github.com/floatinghotpot/cordova-plugin-nativeaudio)
28
30
 
29
- * Cannot mix audio; again the NativeAudio plugin is probably more appropriate. This is due to supporting the lock screen and command center controls: only an app in command of audio can do this, otherwise the controls have no meaning. I would like to add an option to do this, it should be fairly straightforward; at the cost of not supporting the OS-level controls for that invokation.
31
+ - Cannot mix audio; again the NativeAudio plugin is probably more appropriate. This is due to supporting the lock screen and command center controls: only an app in command of audio can do this, otherwise the controls have no meaning. I would like to add an option to do this, it should be fairly straightforward; at the cost of not supporting the OS-level controls for that invokation.
30
32
 
31
33
  ## 3. Installation
32
34
 
@@ -36,10 +38,13 @@ As with most capacitor plugins...
36
38
  npm i capacitor-plugin-playlist
37
39
  npx cap sync
38
40
  ```
41
+
39
42
  ### For web
40
- include hlsjs in your build
41
43
 
42
- #### E.G. for Angular 2+:
44
+ include hlsjs in your build
45
+
46
+ #### E.G. for Angular 2+:
47
+
43
48
  ```
44
49
  npm i hls.js
45
50
  ```
@@ -55,16 +60,8 @@ architect => build => options:
55
60
  ]
56
61
  ```
57
62
 
58
- ### On Android:
59
-
60
- ##### Add to your build.gradle
61
- ```
62
- ext {
63
- exoPlayerVersion = "2.9.6"
64
- supportLibVersion = "28.0.0"
65
- }
66
- ```
67
63
  ##### AndroidManifest.xml:
64
+
68
65
  ```
69
66
  <uses-permission android:name="android.permission.WAKE_LOCK" />
70
67
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@@ -78,7 +75,9 @@ ext {
78
75
  ```
79
76
 
80
77
  ##### Glide image loading for notifiction center
78
+
81
79
  To be able to use glide you need to create a file MyAppGlideModule.java:
80
+
82
81
  ```
83
82
  package org.your.package.namespace;
84
83
 
@@ -88,10 +87,13 @@ import com.bumptech.glide.module.AppGlideModule;
88
87
  @GlideModule
89
88
  public final class MyAppGlideModule extends AppGlideModule {}
90
89
  ```
90
+
91
91
  also see https://guides.codepath.com/android/Displaying-Images-with-the-Glide-Library
92
92
 
93
93
  ### iOS
94
+
94
95
  ##### inside Info.plist:
96
+
95
97
  ```
96
98
  <key>UIBackgroundModes</key>
97
99
  <array>
@@ -105,6 +107,7 @@ Android normally will give you ~2-3 minutes of background playback before killin
105
107
  iOS will immediately stop playback when the app goes into the background if you do not include the `audio` `UIBackgroundMode`. iOS has an additional requirement that audio playback must never stop; when it does, the audio session will be terminated and playback cannot continue without user interaction.
106
108
 
107
109
  ### Android notification icon
110
+
108
111
  To show a better notification icon in Android Lollipop (API 21) and above, create a transparent (silhouette) icon and name the file e.g. as "ic_notification.png".
109
112
  Then you can use the options like:
110
113
 
@@ -124,8 +127,10 @@ Just drop into your project and go.
124
127
  Should be quite obvious howto adapt this for other frameworks, or just vanillaJS
125
128
 
126
129
  ### API
130
+
127
131
  Example:
128
132
  @see definition.ts
133
+
129
134
  ```
130
135
  import {Playlist, AudioTrack} from 'capacitor-plugin-playlist'
131
136
 
@@ -147,20 +152,21 @@ Its a meant as a drop in replacement
147
152
 
148
153
  in the best case you only change your import. :D
149
154
 
150
-
151
155
  ## 5. Todo
152
- * [iOS] Utilize [AudioPlayer](https://github.com/delannoyk/AudioPlayer) instead of directly implementing AVQueuePlayer. `AudioPlayer` includes some smart network recovery features
153
- * [iOS, Android] Add a full example
156
+
157
+ - [iOS] Utilize [AudioPlayer](https://github.com/delannoyk/AudioPlayer) instead of directly implementing AVQueuePlayer. `AudioPlayer` includes some smart network recovery features
158
+ - [iOS, Android] Add a full example
154
159
 
155
160
  ## 6. Credits
156
161
 
157
162
  There are several plugins that are similar to this one, but all are focused on aspects of the media management experience. This plugin takes inspiration from:
158
- * [cordova-plugin-playlist](https://github.com/Rolamix/cordova-plugin-playlist)
159
- * [cordova-plugin-media](https://github.com/apache/cordova-plugin-media)
160
- * [ExoMedia](https://github.com/brianwernick/ExoMedia)
161
- * [PlaylistCore](https://github.com/brianwernick/PlaylistCore) (provides player controls on top of ExoMedia)
162
- * [Bi-Directional AVQueuePlayer proof of concept](https://github.com/jrtaal/AVBidirectionalQueuePlayer)
163
- * [cordova-music-controls-plugin](https://github.com/homerours/cordova-music-controls-plugin)
163
+
164
+ - [cordova-plugin-playlist](https://github.com/Rolamix/cordova-plugin-playlist)
165
+ - [cordova-plugin-media](https://github.com/apache/cordova-plugin-media)
166
+ - [ExoMedia](https://github.com/brianwernick/ExoMedia)
167
+ - [PlaylistCore](https://github.com/brianwernick/PlaylistCore) (provides player controls on top of ExoMedia)
168
+ - [Bi-Directional AVQueuePlayer proof of concept](https://github.com/jrtaal/AVBidirectionalQueuePlayer)
169
+ - [cordova-music-controls-plugin](https://github.com/homerours/cordova-music-controls-plugin)
164
170
 
165
171
  ## 7. License
166
172
 
@@ -2,7 +2,6 @@ ext {
2
2
  junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
3
3
  androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
4
4
  androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
5
- exoPlayerVersion = project.hasProperty('exoPlayerVersion') ? rootProject.ext.exoPlayerVersion : "2.9.6"
6
5
  }
7
6
 
8
7
  buildscript {
@@ -65,15 +64,14 @@ dependencies {
65
64
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
66
65
 
67
66
  // Image Exomedia
68
- implementation 'com.devbrackets.android:exomedia:4.3.0'
69
- implementation "com.google.android.exoplayer:extension-okhttp:$exoPlayerVersion"
67
+ implementation 'com.devbrackets.android:exomedia:5.1.0'
70
68
 
71
69
  // Image Loading
72
70
  implementation 'com.github.bumptech.glide:glide:4.6.1'
73
71
  annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
74
72
 
75
73
  // Playlist support
76
- implementation 'com.devbrackets.android:playlistcore:2.1.0'
74
+ implementation 'com.devbrackets.android:playlistcore:2.2.0'
77
75
  implementation 'androidx.work:work-runtime-ktx:2.7.1'
78
76
 
79
77
  }
@@ -1,17 +1,7 @@
1
1
  package org.dwbn.plugins.playlist
2
2
 
3
3
  import android.app.Application
4
- import com.devbrackets.android.exomedia.ExoMedia
5
4
  import org.dwbn.plugins.playlist.manager.PlaylistManager
6
- import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory
7
- import com.google.android.exoplayer2.upstream.DataSource
8
- import com.google.android.exoplayer2.upstream.TransferListener
9
- import com.google.android.exoplayer2.upstream.cache.CacheDataSource
10
- import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory
11
- import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor
12
- import com.google.android.exoplayer2.upstream.cache.SimpleCache
13
- import okhttp3.OkHttpClient
14
- import java.io.File
15
5
 
16
6
  class App : Application() {
17
7
  private lateinit var _playlistManager: PlaylistManager;
@@ -25,38 +15,5 @@ class App : Application() {
25
15
  resetPlaylistManager()
26
16
  super.onCreate()
27
17
 
28
- configureExoMedia()
29
- }
30
-
31
- private fun configureExoMedia() {
32
- // Registers the media sources to use the OkHttp client instead of the standard Apache one
33
- // Note: the OkHttpDataSourceFactory can be found in the ExoPlayer extension library `extension-okhttp`
34
- ExoMedia.setDataSourceFactoryProvider(object : ExoMedia.DataSourceFactoryProvider {
35
- private var instance: CacheDataSourceFactory? = null
36
-
37
- override fun provide(
38
- userAgent: String,
39
- listener: TransferListener?
40
- ): DataSource.Factory {
41
- if (instance == null) {
42
- // Updates the network data source to use the OKHttp implementation
43
- val upstreamFactory =
44
- OkHttpDataSourceFactory(OkHttpClient(), userAgent, listener)
45
-
46
- // Adds a cache around the upstreamFactory
47
- val cache = SimpleCache(
48
- File(cacheDir, "ExoMediaCache"),
49
- LeastRecentlyUsedCacheEvictor((50 * 1024 * 1024).toLong())
50
- )
51
- instance = CacheDataSourceFactory(
52
- cache,
53
- upstreamFactory,
54
- CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR
55
- )
56
- }
57
-
58
- return instance!!
59
- }
60
- })
61
18
  }
62
19
  }