@javascriptcommon/react-native-track-player 1.2.9 → 1.2.24

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 (131) hide show
  1. package/android/build.gradle +61 -4
  2. package/android/src/main/AndroidManifest.xml +2 -4
  3. package/android/src/main/ic_home-playstore.png +0 -0
  4. package/android/src/main/ic_repeat-playstore.png +0 -0
  5. package/android/src/main/ic_repeat_50-playstore.png +0 -0
  6. package/android/src/main/ic_shuffle-playstore.png +0 -0
  7. package/android/src/main/ic_shuffle_50-playstore.png +0 -0
  8. package/android/src/main/ic_shuffle_sm-playstore.png +0 -0
  9. package/android/src/main/ic_stop-playstore.png +0 -0
  10. package/android/src/main/ic_test-playstore.png +0 -0
  11. package/android/src/main/java/com/guichaguri/trackplayer/{service/HeadlessJsMediaService.java → HeadlessJsMediaService.java} +83 -32
  12. package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.kt +25 -0
  13. package/android/src/main/java/com/guichaguri/trackplayer/extensions/AudioPlayerStateExt.kt +19 -0
  14. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/EventHolder.kt +30 -0
  15. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/NotificationEventHolder.kt +20 -0
  16. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/PlayerEventHolder.kt +111 -0
  17. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AAMediaSessionCallback.kt +10 -0
  18. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioContentType.kt +10 -0
  19. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioItem.kt +66 -0
  20. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioItemTransitionReason.kt +33 -0
  21. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioPlayerState.kt +30 -0
  22. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/BufferConfig.kt +8 -0
  23. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/CacheConfig.kt +17 -0
  24. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/Capability.kt +19 -0
  25. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/FocusChangeData.kt +3 -0
  26. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/MediaSessionCallback.kt +17 -0
  27. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationConfig.kt +43 -0
  28. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationMetadata.kt +8 -0
  29. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationState.kt +8 -0
  30. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayWhenReadyChangeData.kt +5 -0
  31. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackEndedReason.kt +5 -0
  32. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackError.kt +6 -0
  33. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackMetadata.kt +200 -0
  34. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayerConfig.kt +33 -0
  35. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayerOptions.kt +9 -0
  36. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PositionChangedReason.kt +39 -0
  37. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/QueuedPlayerOptions.kt +49 -0
  38. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/notification/NotificationManager.kt +678 -0
  39. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/AudioPlayer.kt +10 -0
  40. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/BaseAudioPlayer.kt +864 -0
  41. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/QueuedAudioPlayer.kt +269 -0
  42. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/components/MediaSourceExt.kt +35 -0
  43. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/components/PlayerCache.kt +26 -0
  44. package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/utils/Utils.kt +12 -0
  45. package/android/src/main/java/com/guichaguri/trackplayer/model/MetadataAdapter.kt +224 -0
  46. package/android/src/main/java/com/guichaguri/trackplayer/model/State.kt +13 -0
  47. package/android/src/main/java/com/guichaguri/trackplayer/model/Track.kt +120 -0
  48. package/android/src/main/java/com/guichaguri/trackplayer/model/TrackAudioItem.kt +19 -0
  49. package/android/src/main/java/com/guichaguri/trackplayer/model/TrackType.kt +11 -0
  50. package/android/src/main/java/com/guichaguri/trackplayer/module/AutoConnectionDetector.kt +151 -0
  51. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.kt +66 -0
  52. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.kt +1192 -0
  53. package/android/src/main/java/com/guichaguri/trackplayer/service/BundleUtils.kt +117 -0
  54. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.kt +31 -0
  55. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.kt +347 -0
  56. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.kt +1268 -0
  57. package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.kt +228 -0
  58. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.kt +141 -0
  59. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.kt +396 -0
  60. package/android/src/main/res/drawable-hdpi/ic_home.png +0 -0
  61. package/android/src/main/res/drawable-mdpi/ic_home.png +0 -0
  62. package/android/src/main/res/drawable-xhdpi/ic_home.png +0 -0
  63. package/android/src/main/res/drawable-xxhdpi/ic_home.png +0 -0
  64. package/android/src/main/res/drawable-xxxhdpi/ic_home.png +0 -0
  65. package/android/src/main/res/mipmap-hdpi/ic_arrow_down_circle_foreground.png +0 -0
  66. package/android/src/main/res/mipmap-hdpi/ic_clock_now_foreground.png +0 -0
  67. package/android/src/main/res/mipmap-hdpi/ic_close_foreground.png +0 -0
  68. package/android/src/main/res/mipmap-hdpi/ic_heart_foreground.png +0 -0
  69. package/android/src/main/res/mipmap-hdpi/ic_heart_outlined_foreground.png +0 -0
  70. package/android/src/main/res/mipmap-hdpi/ic_repeat_off_foreground.png +0 -0
  71. package/android/src/main/res/mipmap-hdpi/ic_repeat_on_foreground.png +0 -0
  72. package/android/src/main/res/mipmap-hdpi/ic_shuffle_off_foreground.png +0 -0
  73. package/android/src/main/res/mipmap-hdpi/ic_shuffle_on_foreground.png +0 -0
  74. package/android/src/main/res/mipmap-mdpi/ic_arrow_down_circle_foreground.png +0 -0
  75. package/android/src/main/res/mipmap-mdpi/ic_clock_now_foreground.png +0 -0
  76. package/android/src/main/res/mipmap-mdpi/ic_close_foreground.png +0 -0
  77. package/android/src/main/res/mipmap-mdpi/ic_heart_foreground.png +0 -0
  78. package/android/src/main/res/mipmap-mdpi/ic_heart_outlined_foreground.png +0 -0
  79. package/android/src/main/res/mipmap-mdpi/ic_repeat_off_foreground.png +0 -0
  80. package/android/src/main/res/mipmap-mdpi/ic_repeat_on_foreground.png +0 -0
  81. package/android/src/main/res/mipmap-mdpi/ic_shuffle_off_foreground.png +0 -0
  82. package/android/src/main/res/mipmap-mdpi/ic_shuffle_on_foreground.png +0 -0
  83. package/android/src/main/res/mipmap-xhdpi/ic_arrow_down_circle_foreground.png +0 -0
  84. package/android/src/main/res/mipmap-xhdpi/ic_clock_now_foreground.png +0 -0
  85. package/android/src/main/res/mipmap-xhdpi/ic_close_foreground.png +0 -0
  86. package/android/src/main/res/mipmap-xhdpi/ic_heart_foreground.png +0 -0
  87. package/android/src/main/res/mipmap-xhdpi/ic_heart_outlined_foreground.png +0 -0
  88. package/android/src/main/res/mipmap-xhdpi/ic_repeat_off_foreground.png +0 -0
  89. package/android/src/main/res/mipmap-xhdpi/ic_repeat_on_foreground.png +0 -0
  90. package/android/src/main/res/mipmap-xhdpi/ic_shuffle_off_foreground.png +0 -0
  91. package/android/src/main/res/mipmap-xhdpi/ic_shuffle_on_foreground.png +0 -0
  92. package/android/src/main/res/mipmap-xxhdpi/ic_arrow_down_circle_foreground.png +0 -0
  93. package/android/src/main/res/mipmap-xxhdpi/ic_clock_now_foreground.png +0 -0
  94. package/android/src/main/res/mipmap-xxhdpi/ic_close_foreground.png +0 -0
  95. package/android/src/main/res/mipmap-xxhdpi/ic_heart_foreground.png +0 -0
  96. package/android/src/main/res/mipmap-xxhdpi/ic_heart_outlined_foreground.png +0 -0
  97. package/android/src/main/res/mipmap-xxhdpi/ic_repeat_off_foreground.png +0 -0
  98. package/android/src/main/res/mipmap-xxhdpi/ic_repeat_on_foreground.png +0 -0
  99. package/android/src/main/res/mipmap-xxhdpi/ic_shuffle_off_foreground.png +0 -0
  100. package/android/src/main/res/mipmap-xxhdpi/ic_shuffle_on_foreground.png +0 -0
  101. package/android/src/main/res/mipmap-xxxhdpi/ic_arrow_down_circle_foreground.png +0 -0
  102. package/android/src/main/res/mipmap-xxxhdpi/ic_clock_now_foreground.png +0 -0
  103. package/android/src/main/res/mipmap-xxxhdpi/ic_close_foreground.png +0 -0
  104. package/android/src/main/res/mipmap-xxxhdpi/ic_heart_foreground.png +0 -0
  105. package/android/src/main/res/mipmap-xxxhdpi/ic_heart_outlined_foreground.png +0 -0
  106. package/android/src/main/res/mipmap-xxxhdpi/ic_repeat_off_foreground.png +0 -0
  107. package/android/src/main/res/mipmap-xxxhdpi/ic_repeat_on_foreground.png +0 -0
  108. package/android/src/main/res/mipmap-xxxhdpi/ic_shuffle_off_foreground.png +0 -0
  109. package/android/src/main/res/mipmap-xxxhdpi/ic_shuffle_on_foreground.png +0 -0
  110. package/android/src/main/res/raw/silent_5_seconds.mp3 +0 -0
  111. package/android/src/main/res/strings.xml +6 -0
  112. package/android/src/main/res/values/strings.xml +6 -0
  113. package/index.d.ts +62 -1
  114. package/lib/index.js +10 -9
  115. package/package.json +1 -1
  116. package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.java +0 -28
  117. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.java +0 -55
  118. package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.java +0 -298
  119. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.java +0 -47
  120. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.java +0 -383
  121. package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.java +0 -271
  122. package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.java +0 -243
  123. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.java +0 -148
  124. package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.java +0 -379
  125. package/android/src/main/java/com/guichaguri/trackplayer/service/models/Track.java +0 -141
  126. package/android/src/main/java/com/guichaguri/trackplayer/service/models/TrackType.java +0 -35
  127. package/android/src/main/res/drawable-hdpi/ic_logo.png +0 -0
  128. package/android/src/main/res/drawable-mdpi/ic_logo.png +0 -0
  129. package/android/src/main/res/drawable-xhdpi/ic_logo.png +0 -0
  130. package/android/src/main/res/drawable-xxhdpi/ic_logo.png +0 -0
  131. package/android/src/main/res/drawable-xxxhdpi/ic_logo.png +0 -0
@@ -1,243 +0,0 @@
1
- package com.guichaguri.trackplayer.service;
2
-
3
- import android.app.NotificationChannel;
4
- import android.app.NotificationManager;
5
- import android.content.ContentResolver;
6
- import android.content.Context;
7
- import android.content.res.Resources;
8
- import android.net.Uri;
9
- import android.os.Build;
10
- import android.os.Bundle;
11
- import android.support.v4.media.RatingCompat;
12
- import android.support.v4.media.session.PlaybackStateCompat;
13
- import android.util.Log;
14
-
15
- import com.facebook.react.bridge.Promise;
16
- import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper;
17
-
18
- import org.json.JSONArray;
19
- import org.json.JSONException;
20
- import org.json.JSONObject;
21
-
22
- import java.util.ArrayList;
23
- import java.util.Iterator;
24
- import java.util.Set;
25
-
26
- /**
27
- * @author Guichaguri
28
- */
29
- public class Utils {
30
-
31
- public static final String EVENT_INTENT = "com.guichaguri.trackplayer.event";
32
- public static final String CONNECT_INTENT = "com.guichaguri.trackplayer.connect";
33
- public static final String NOTIFICATION_CHANNEL = "com.guichaguri.trackplayer";
34
- public static final String LOG = "RNTrackPlayer";
35
-
36
- public static Runnable toRunnable(Promise promise) {
37
- return () -> promise.resolve(null);
38
- }
39
-
40
- public static long toMillis(double seconds) {
41
- return (long)(seconds * 1000);
42
- }
43
-
44
- public static double toSeconds(long millis) {
45
- return millis / 1000D;
46
- }
47
-
48
- public static boolean isLocal(Uri uri) {
49
- if(uri == null) return false;
50
-
51
- String scheme = uri.getScheme();
52
- String host = uri.getHost();
53
-
54
- return scheme == null ||
55
- scheme.equals(ContentResolver.SCHEME_FILE) ||
56
- scheme.equals(ContentResolver.SCHEME_ANDROID_RESOURCE) ||
57
- scheme.equals(ContentResolver.SCHEME_CONTENT) ||
58
- scheme.equals("res") ||
59
- host == null ||
60
- host.equals("localhost") ||
61
- host.equals("127.0.0.1") ||
62
- host.equals("[::1]");
63
- }
64
-
65
- public static Uri getUri(Context context, Bundle data, String key) {
66
- if(!data.containsKey(key)) return null;
67
- Object obj = data.get(key);
68
-
69
- if(obj instanceof String) {
70
- // Remote or Local Uri
71
-
72
- if(((String)obj).trim().isEmpty())
73
- throw new RuntimeException("The URL cannot be empty");
74
-
75
- return Uri.parse((String)obj);
76
-
77
- } else if(obj instanceof Bundle) {
78
- // require/import
79
-
80
- String uri = ((Bundle)obj).getString("uri");
81
-
82
- ResourceDrawableIdHelper helper = ResourceDrawableIdHelper.getInstance();
83
- int id = helper.getResourceDrawableId(context, uri);
84
-
85
- if(id > 0) {
86
- // In production, we can obtain the resource uri
87
- Resources res = context.getResources();
88
-
89
- return new Uri.Builder()
90
- .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
91
- .authority(res.getResourcePackageName(id))
92
- .appendPath(res.getResourceTypeName(id))
93
- .appendPath(res.getResourceEntryName(id))
94
- .build();
95
- } else {
96
- // During development, the resources might come directly from the metro server
97
- return Uri.parse(uri);
98
- }
99
-
100
- }
101
-
102
- return null;
103
- }
104
-
105
- public static int getRawResourceId(Context context, Bundle data, String key) {
106
- if(!data.containsKey(key)) return 0;
107
- Object obj = data.get(key);
108
-
109
- if(!(obj instanceof Bundle)) return 0;
110
- String name = ((Bundle)obj).getString("uri");
111
-
112
- if(name == null || name.isEmpty()) return 0;
113
- name = name.toLowerCase().replace("-", "_");
114
-
115
- try {
116
- return Integer.parseInt(name);
117
- } catch (NumberFormatException ex) {
118
- return context.getResources().getIdentifier(name, "raw", context.getPackageName());
119
- }
120
- }
121
-
122
- public static boolean isPlaying(int state) {
123
- return state == PlaybackStateCompat.STATE_PLAYING || state == PlaybackStateCompat.STATE_BUFFERING;
124
- }
125
-
126
- public static boolean isPaused(int state) {
127
- return state == PlaybackStateCompat.STATE_PAUSED || state == PlaybackStateCompat.STATE_CONNECTING;
128
- }
129
-
130
- public static boolean isStopped(int state) {
131
- return state == PlaybackStateCompat.STATE_NONE || state == PlaybackStateCompat.STATE_STOPPED;
132
- }
133
-
134
- public static RatingCompat getRating(Bundle data, String key, int ratingType) {
135
- if(!data.containsKey(key) || ratingType == RatingCompat.RATING_NONE) {
136
- return RatingCompat.newUnratedRating(ratingType);
137
- } else if(ratingType == RatingCompat.RATING_HEART) {
138
- return RatingCompat.newHeartRating(data.getBoolean(key, true));
139
- } else if(ratingType == RatingCompat.RATING_THUMB_UP_DOWN) {
140
- return RatingCompat.newThumbRating(data.getBoolean(key, true));
141
- } else if(ratingType == RatingCompat.RATING_PERCENTAGE) {
142
- return RatingCompat.newPercentageRating(data.getFloat(key, 0));
143
- } else {
144
- return RatingCompat.newStarRating(ratingType, data.getFloat(key, 0));
145
- }
146
- }
147
-
148
- public static void setRating(Bundle data, String key, RatingCompat rating) {
149
- if(!rating.isRated()) return;
150
- int ratingType = rating.getRatingStyle();
151
-
152
- if(ratingType == RatingCompat.RATING_HEART) {
153
- data.putBoolean(key, rating.hasHeart());
154
- } else if(ratingType == RatingCompat.RATING_THUMB_UP_DOWN) {
155
- data.putBoolean(key, rating.isThumbUp());
156
- } else if(ratingType == RatingCompat.RATING_PERCENTAGE) {
157
- data.putDouble(key, rating.getPercentRating());
158
- } else {
159
- data.putDouble(key, rating.getStarRating());
160
- }
161
- }
162
-
163
- public static int getInt(Bundle data, String key, int defaultValue) {
164
- Object value = data.get(key);
165
- if (value instanceof Number) {
166
- return ((Number) value).intValue();
167
- }
168
- return defaultValue;
169
- }
170
-
171
- public static String getNotificationChannel(Context context) {
172
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
173
- NotificationChannel channel = new NotificationChannel(
174
- Utils.NOTIFICATION_CHANNEL,
175
- "MusicService",
176
- NotificationManager.IMPORTANCE_DEFAULT
177
- );
178
- channel.setShowBadge(false);
179
- channel.setSound(null, null);
180
- ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
181
- }
182
- return Utils.NOTIFICATION_CHANNEL;
183
- }
184
-
185
- public static JSONObject bundleToJson(Bundle bundle) {
186
- JSONObject json = new JSONObject();
187
- Set<String> keys = bundle.keySet();
188
- for (String key : keys) {
189
- try {
190
- // json.put(key, bundle.get(key)); see edit below
191
- json.put(key, JSONObject.wrap(bundle.get(key)));
192
- } catch(JSONException e) {
193
- //Handle exception here
194
- Log.d(Utils.LOG, "bundleToJson: Something went wrong, creating json");
195
- }
196
- }
197
-
198
- return json;
199
- }
200
-
201
- public static Bundle jsonStringToBundle(String jsonString){
202
- try {
203
- JSONObject jsonObject = toJsonObject(jsonString);
204
- return jsonToBundle(jsonObject);
205
- } catch (JSONException ignored) {
206
-
207
- }
208
- return null;
209
- }
210
- private static JSONObject toJsonObject(String jsonString) throws JSONException {
211
- return new JSONObject(jsonString);
212
- }
213
- private static Bundle jsonToBundle(JSONObject jsonObject) throws JSONException {
214
- Bundle bundle = new Bundle();
215
- Iterator iter = jsonObject.keys();
216
- while(iter.hasNext()) {
217
- String key = (String)iter.next();
218
- if (key.equals("capabilities") || key.equals("compactCapabilities")) {
219
- // this check should be more generic but is functional for now.
220
- ArrayList<Integer> value = new ArrayList<Integer>();
221
- JSONArray jsonArray = jsonObject.getJSONArray(key);
222
- int len = jsonArray.length();
223
- for (int i=0;i<len;i++){
224
- value.add(jsonArray.getInt(i));
225
- }
226
- bundle.putIntegerArrayList(key,value);
227
- } else if (key.equals("duration")) {
228
- // this check should be in Track
229
- try {
230
- int value = jsonObject.getInt(key);
231
- bundle.putInt(key, value);
232
- }catch(Exception ex){
233
- Double value = jsonObject.getDouble(key);
234
- bundle.putDouble(key, value);
235
- }
236
- } else {
237
- String value = jsonObject.getString(key);
238
- bundle.putString(key,value);
239
- }
240
- }
241
- return bundle;
242
- }
243
- }
@@ -1,148 +0,0 @@
1
- package com.guichaguri.trackplayer.service.metadata;
2
-
3
- import android.annotation.SuppressLint;
4
- import android.os.Bundle;
5
- import android.provider.MediaStore;
6
- import android.support.v4.media.RatingCompat;
7
- import android.support.v4.media.session.MediaSessionCompat;
8
- import android.support.v4.media.session.PlaybackStateCompat;
9
-
10
- import com.guichaguri.trackplayer.module.MusicEvents;
11
- import com.guichaguri.trackplayer.service.MusicManager;
12
- import com.guichaguri.trackplayer.service.MusicService;
13
- import com.guichaguri.trackplayer.service.Utils;
14
- import com.guichaguri.trackplayer.service.models.Track;
15
- import java.util.List;
16
-
17
- /**
18
- * @author Guichaguri
19
- */
20
- public class ButtonEvents extends MediaSessionCompat.Callback {
21
-
22
- private final MusicService service;
23
- private final MusicManager manager;
24
-
25
- public ButtonEvents(MusicService service, MusicManager manager) {
26
- this.service = service;
27
- this.manager = manager;
28
- }
29
-
30
- @Override
31
- public void onPlay() {
32
- manager.onPlay();
33
- manager.setState(PlaybackStateCompat.STATE_PLAYING, -1);
34
- service.emit(MusicEvents.BUTTON_PLAY, null);
35
- }
36
-
37
- @Override
38
- public void onPause() {
39
- manager.onPause();
40
- manager.setState(PlaybackStateCompat.STATE_PAUSED, -1);
41
- service.emit(MusicEvents.BUTTON_PAUSE, null);
42
- }
43
-
44
- @Override
45
- public void onStop() {
46
- manager.onStop();
47
- manager.setState(PlaybackStateCompat.STATE_STOPPED, -1);
48
- service.emit(MusicEvents.BUTTON_STOP, null);
49
- }
50
-
51
-
52
- @Override
53
- public void onPlayFromMediaId(String mediaId, Bundle extras) {
54
- Bundle bundle = new Bundle();
55
- bundle.putString("id", mediaId);
56
- service.emit(MusicEvents.BUTTON_PLAY_FROM_ID, bundle);
57
- }
58
-
59
- @SuppressLint("InlinedApi")
60
- @Override
61
- public void onPlayFromSearch(String query, Bundle extras) {
62
- Bundle bundle = new Bundle();
63
- bundle.putString("query", query);
64
-
65
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_FOCUS)) {
66
- String focus = extras.getString(MediaStore.EXTRA_MEDIA_FOCUS);
67
-
68
- if(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE.equals(focus)) {
69
- focus = "artist";
70
- } else if(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE.equals(focus)) {
71
- focus = "album";
72
- } else if(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE.equals(focus)) {
73
- focus = "playlist";
74
- } else if(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE.equals(focus)) {
75
- focus = "genre";
76
- } else if(MediaStore.Audio.Media.ENTRY_CONTENT_TYPE.equals(focus)) {
77
- focus = "title";
78
- }
79
-
80
- bundle.putString("focus", focus);
81
- }
82
-
83
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_TITLE))
84
- bundle.putString("title", extras.getString(MediaStore.EXTRA_MEDIA_TITLE));
85
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_ARTIST))
86
- bundle.putString("artist", extras.getString(MediaStore.EXTRA_MEDIA_ARTIST));
87
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_ALBUM))
88
- bundle.putString("album", extras.getString(MediaStore.EXTRA_MEDIA_ALBUM));
89
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_GENRE))
90
- bundle.putString("genre", extras.getString(MediaStore.EXTRA_MEDIA_GENRE));
91
- if(extras.containsKey(MediaStore.EXTRA_MEDIA_PLAYLIST))
92
- bundle.putString("playlist", extras.getString(MediaStore.EXTRA_MEDIA_PLAYLIST));
93
-
94
- service.emit(MusicEvents.BUTTON_PLAY_FROM_SEARCH, bundle);
95
- }
96
-
97
- @Override
98
- public void onSkipToQueueItem(long id) {
99
- /*List<Track> tracks = manager.getPlayback().getQueue();
100
-
101
- for(Track track : tracks) {
102
- if(track.queueId != id) continue;
103
-
104
- Bundle bundle = new Bundle();
105
- bundle.putString("id", track.id);
106
- service.emit(MusicEvents.BUTTON_SKIP, bundle);
107
- break;
108
- }*/
109
- }
110
-
111
- @Override
112
- public void onSkipToPrevious() {
113
- service.emit(MusicEvents.BUTTON_SKIP_PREVIOUS, null);
114
- }
115
-
116
- @Override
117
- public void onSkipToNext() {
118
- service.emit(MusicEvents.BUTTON_SKIP_NEXT, null);
119
- }
120
-
121
- @Override
122
- public void onRewind() {
123
- Bundle bundle = new Bundle();
124
- bundle.putInt("interval", manager.getMetadata().getJumpInterval());
125
- service.emit(MusicEvents.BUTTON_JUMP_BACKWARD, bundle);
126
- }
127
-
128
- @Override
129
- public void onFastForward() {
130
- Bundle bundle = new Bundle();
131
- bundle.putInt("interval", manager.getMetadata().getJumpInterval());
132
- service.emit(MusicEvents.BUTTON_JUMP_FORWARD, bundle);
133
- }
134
-
135
- @Override
136
- public void onSeekTo(long pos) {
137
- Bundle bundle = new Bundle();
138
- bundle.putDouble("position", Utils.toSeconds(pos));
139
- service.emit(MusicEvents.BUTTON_SEEK_TO, bundle);
140
- }
141
-
142
- @Override
143
- public void onSetRating(RatingCompat rating) {
144
- Bundle bundle = new Bundle();
145
- Utils.setRating(bundle, "rating", rating);
146
- service.emit(MusicEvents.BUTTON_SET_RATING, bundle);
147
- }
148
- }