@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.
- package/android/build.gradle +61 -4
- package/android/src/main/AndroidManifest.xml +2 -4
- package/android/src/main/ic_home-playstore.png +0 -0
- package/android/src/main/ic_repeat-playstore.png +0 -0
- package/android/src/main/ic_repeat_50-playstore.png +0 -0
- package/android/src/main/ic_shuffle-playstore.png +0 -0
- package/android/src/main/ic_shuffle_50-playstore.png +0 -0
- package/android/src/main/ic_shuffle_sm-playstore.png +0 -0
- package/android/src/main/ic_stop-playstore.png +0 -0
- package/android/src/main/ic_test-playstore.png +0 -0
- package/android/src/main/java/com/guichaguri/trackplayer/{service/HeadlessJsMediaService.java → HeadlessJsMediaService.java} +83 -32
- package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.kt +25 -0
- package/android/src/main/java/com/guichaguri/trackplayer/extensions/AudioPlayerStateExt.kt +19 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/EventHolder.kt +30 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/NotificationEventHolder.kt +20 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/event/PlayerEventHolder.kt +111 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AAMediaSessionCallback.kt +10 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioContentType.kt +10 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioItem.kt +66 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioItemTransitionReason.kt +33 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/AudioPlayerState.kt +30 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/BufferConfig.kt +8 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/CacheConfig.kt +17 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/Capability.kt +19 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/FocusChangeData.kt +3 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/MediaSessionCallback.kt +17 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationConfig.kt +43 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationMetadata.kt +8 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/NotificationState.kt +8 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayWhenReadyChangeData.kt +5 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackEndedReason.kt +5 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackError.kt +6 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlaybackMetadata.kt +200 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayerConfig.kt +33 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PlayerOptions.kt +9 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/PositionChangedReason.kt +39 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/models/QueuedPlayerOptions.kt +49 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/notification/NotificationManager.kt +678 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/AudioPlayer.kt +10 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/BaseAudioPlayer.kt +864 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/QueuedAudioPlayer.kt +269 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/components/MediaSourceExt.kt +35 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/players/components/PlayerCache.kt +26 -0
- package/android/src/main/java/com/guichaguri/trackplayer/kotlinaudio/utils/Utils.kt +12 -0
- package/android/src/main/java/com/guichaguri/trackplayer/model/MetadataAdapter.kt +224 -0
- package/android/src/main/java/com/guichaguri/trackplayer/model/State.kt +13 -0
- package/android/src/main/java/com/guichaguri/trackplayer/model/Track.kt +120 -0
- package/android/src/main/java/com/guichaguri/trackplayer/model/TrackAudioItem.kt +19 -0
- package/android/src/main/java/com/guichaguri/trackplayer/model/TrackType.kt +11 -0
- package/android/src/main/java/com/guichaguri/trackplayer/module/AutoConnectionDetector.kt +151 -0
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.kt +66 -0
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.kt +1192 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/BundleUtils.kt +117 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.kt +31 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.kt +347 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.kt +1268 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.kt +228 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.kt +141 -0
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.kt +396 -0
- package/android/src/main/res/drawable-hdpi/ic_home.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_home.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_home.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_home.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_home.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_arrow_down_circle_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_clock_now_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_close_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_heart_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_heart_outlined_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_repeat_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_repeat_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_shuffle_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_shuffle_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_arrow_down_circle_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_clock_now_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_close_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_heart_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_heart_outlined_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_repeat_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_repeat_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_shuffle_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_shuffle_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_arrow_down_circle_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_clock_now_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_close_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_heart_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_heart_outlined_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_repeat_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_repeat_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_shuffle_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_shuffle_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_arrow_down_circle_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_clock_now_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_close_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_heart_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_heart_outlined_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_repeat_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_repeat_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_shuffle_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_shuffle_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_arrow_down_circle_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_clock_now_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_close_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_heart_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_heart_outlined_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_repeat_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_repeat_on_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_shuffle_off_foreground.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_shuffle_on_foreground.png +0 -0
- package/android/src/main/res/raw/silent_5_seconds.mp3 +0 -0
- package/android/src/main/res/strings.xml +6 -0
- package/android/src/main/res/values/strings.xml +6 -0
- package/index.d.ts +62 -1
- package/lib/index.js +10 -9
- package/package.json +1 -1
- package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.java +0 -28
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.java +0 -55
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.java +0 -298
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.java +0 -47
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.java +0 -383
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.java +0 -271
- package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.java +0 -243
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.java +0 -148
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.java +0 -379
- package/android/src/main/java/com/guichaguri/trackplayer/service/models/Track.java +0 -141
- package/android/src/main/java/com/guichaguri/trackplayer/service/models/TrackType.java +0 -35
- package/android/src/main/res/drawable-hdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_logo.png +0 -0
- 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
|
-
}
|