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

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} +84 -33
  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 +1177 -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 +1254 -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
package/lib/index.js CHANGED
@@ -47,14 +47,6 @@ function setNowPlaying(track) {
47
47
  return TrackPlayer.setNowPlaying(track);
48
48
  }
49
49
 
50
- function remove(tracks) {
51
- if(!Array.isArray(tracks)) {
52
- tracks = [tracks];
53
- }
54
-
55
- return TrackPlayer.remove(tracks);
56
- }
57
-
58
50
  function registerPlaybackService(serviceFactory) {
59
51
  if (Platform.OS === 'android' && !registeredHeadlessTask) {
60
52
  // Registers the headless task
@@ -161,9 +153,18 @@ module.exports.addEventListener = addEventListener;
161
153
 
162
154
  // Player Queue Commands
163
155
  module.exports.setNowPlaying = setNowPlaying;
164
- module.exports.updateMetadataForTrack = TrackPlayer.updateMetadataForTrack;
165
156
  module.exports.updatePlayback = TrackPlayer.updatePlayback;
166
157
  module.exports.reset = TrackPlayer.reset;
158
+ module.exports.clear = TrackPlayer.clear;
159
+ module.exports.removeNotifications = TrackPlayer.removeNotifications;
160
+
161
+ // Android Auto
162
+ module.exports.setBrowseTree = TrackPlayer.setBrowseTree;
163
+ module.exports.updateBrowseTree = TrackPlayer.updateBrowseTree;
164
+ module.exports.setAndroidAutoPlayerTracks = TrackPlayer.setAndroidAutoPlayerTracks;
165
+ module.exports.updateAndroidAutoPlayerOptions = TrackPlayer.updateAndroidAutoPlayerOptions;
166
+ module.exports.setSearchResult = TrackPlayer.setSearchResult;
167
+ module.exports.setIsAndroidTv = TrackPlayer.setIsAndroidTv;
167
168
 
168
169
  // Player Event Types
169
170
  module.exports.TrackPlayerEvents = require('./eventTypes');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@javascriptcommon/react-native-track-player",
3
- "version": "1.2.9",
3
+ "version": "1.2.23",
4
4
  "description": "A fully fledged audio module created for music apps",
5
5
  "contributors": [
6
6
  {
@@ -1,28 +0,0 @@
1
- package com.guichaguri.trackplayer;
2
-
3
- import com.facebook.react.ReactPackage;
4
- import com.facebook.react.bridge.NativeModule;
5
- import com.facebook.react.bridge.ReactApplicationContext;
6
- import com.facebook.react.uimanager.ViewManager;
7
- import com.guichaguri.trackplayer.module.MusicModule;
8
- import java.util.Collections;
9
- import java.util.List;
10
-
11
- /**
12
- * TrackPlayer
13
- * https://github.com/react-native-kit/react-native-track-player
14
- * @author Guichaguri
15
- */
16
- public class TrackPlayer implements ReactPackage {
17
-
18
- @Override
19
- public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
20
- return Collections.singletonList(new MusicModule(reactContext));
21
- }
22
-
23
- @Override
24
- public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
25
- return Collections.emptyList();
26
- }
27
-
28
- }
@@ -1,55 +0,0 @@
1
- package com.guichaguri.trackplayer.module;
2
-
3
- import android.content.BroadcastReceiver;
4
- import android.content.Context;
5
- import android.content.Intent;
6
- import android.os.Bundle;
7
- import com.facebook.react.bridge.Arguments;
8
- import com.facebook.react.bridge.ReactContext;
9
- import com.facebook.react.bridge.WritableMap;
10
- import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
11
-
12
- /**
13
- * @author Guichaguri
14
- */
15
- public class MusicEvents extends BroadcastReceiver {
16
-
17
- // Media Control Events
18
- public static final String BUTTON_PLAY = "remote-play";
19
- public static final String BUTTON_PLAY_FROM_ID = "remote-play-id";
20
- public static final String BUTTON_PLAY_FROM_SEARCH = "remote-play-search";
21
- public static final String BUTTON_PAUSE = "remote-pause";
22
- public static final String BUTTON_STOP = "remote-stop";
23
- public static final String BUTTON_SKIP = "remote-skip";
24
- public static final String BUTTON_SKIP_NEXT = "remote-next";
25
- public static final String BUTTON_SKIP_PREVIOUS = "remote-previous";
26
- public static final String BUTTON_SEEK_TO = "remote-seek";
27
- public static final String BUTTON_SET_RATING = "remote-set-rating";
28
- public static final String BUTTON_JUMP_FORWARD = "remote-jump-forward";
29
- public static final String BUTTON_JUMP_BACKWARD = "remote-jump-backward";
30
- public static final String BUTTON_DUCK = "remote-duck";
31
-
32
- // Playback Events
33
- public static final String PLAYBACK_STATE = "playback-state";
34
- public static final String PLAYBACK_TRACK_CHANGED = "playback-track-changed";
35
- public static final String PLAYBACK_QUEUE_ENDED = "playback-queue-ended";
36
- public static final String PLAYBACK_METADATA = "playback-metadata-received";
37
- public static final String PLAYBACK_ERROR = "playback-error";
38
-
39
- private final ReactContext reactContext;
40
-
41
- public MusicEvents(ReactContext reactContext) {
42
- this.reactContext = reactContext;
43
- }
44
-
45
- @Override
46
- public void onReceive(Context context, Intent intent) {
47
- String event = intent.getStringExtra("event");
48
- Bundle data = intent.getBundleExtra("data");
49
-
50
- WritableMap map = data != null ? Arguments.fromBundle(data) : null;
51
-
52
- reactContext.getJSModule(RCTDeviceEventEmitter.class).emit(event, map);
53
- }
54
-
55
- }
@@ -1,298 +0,0 @@
1
- package com.guichaguri.trackplayer.module;
2
-
3
- import android.app.AlarmManager;
4
- import android.app.PendingIntent;
5
- import android.app.Service;
6
- import android.content.ComponentName;
7
- import android.content.Context;
8
- import android.content.Intent;
9
- import android.content.IntentFilter;
10
- import android.content.ServiceConnection;
11
- import android.os.Build;
12
- import android.os.Bundle;
13
- import android.os.IBinder;
14
- import android.support.v4.media.RatingCompat;
15
- import android.support.v4.media.session.PlaybackStateCompat;
16
- import android.util.Log;
17
- import androidx.localbroadcastmanager.content.LocalBroadcastManager;
18
- import com.facebook.react.bridge.*;
19
- import com.guichaguri.trackplayer.service.MusicBinder;
20
- import com.guichaguri.trackplayer.service.MusicService;
21
- import com.guichaguri.trackplayer.service.Utils;
22
- import com.guichaguri.trackplayer.service.models.Track;
23
-
24
- import javax.annotation.Nonnull;
25
- import javax.annotation.Nullable;
26
- import java.util.*;
27
-
28
- /**
29
- * @author Guichaguri
30
- */
31
- public class MusicModule extends ReactContextBaseJavaModule implements ServiceConnection {
32
-
33
- private MusicBinder binder;
34
- private MusicEvents eventHandler;
35
- private ArrayDeque<Runnable> initCallbacks = new ArrayDeque<>();
36
- private boolean connecting = false;
37
- private Bundle options;
38
-
39
- public MusicModule(ReactApplicationContext reactContext) {
40
- super(reactContext);
41
- }
42
-
43
- @Override
44
- @Nonnull
45
- public String getName() {
46
- return "TrackPlayerModule";
47
- }
48
-
49
- @Override
50
- public void initialize() {
51
- ReactContext context = getReactApplicationContext();
52
- LocalBroadcastManager manager = LocalBroadcastManager.getInstance(context);
53
-
54
- eventHandler = new MusicEvents(context);
55
- manager.registerReceiver(eventHandler, new IntentFilter(Utils.EVENT_INTENT));
56
- }
57
-
58
- @Override
59
- public void onCatalystInstanceDestroy() {
60
- ReactContext context = getReactApplicationContext();
61
-
62
- if(eventHandler != null) {
63
- LocalBroadcastManager manager = LocalBroadcastManager.getInstance(context);
64
-
65
- manager.unregisterReceiver(eventHandler);
66
- eventHandler = null;
67
- }
68
- }
69
-
70
- @Override
71
- public void onServiceConnected(ComponentName name, IBinder service) {
72
- binder = (MusicBinder)service;
73
- connecting = false;
74
-
75
- // Reapply options that user set before with updateOptions
76
- if (options != null) {
77
- binder.updateOptions(options);
78
- }
79
-
80
- // Triggers all callbacks
81
- while(!initCallbacks.isEmpty()) {
82
- binder.post(initCallbacks.remove());
83
- }
84
- }
85
-
86
- @Override
87
- public void onServiceDisconnected(ComponentName name) {
88
- binder = null;
89
- connecting = false;
90
- }
91
-
92
- /**
93
- * Waits for a connection to the service and/or runs the {@link Runnable} in the player thread
94
- */
95
- private void waitForConnection(Runnable r) {
96
- if(binder != null) {
97
- binder.post(r);
98
- return;
99
- } else {
100
- initCallbacks.add(r);
101
- }
102
-
103
- if(connecting) return;
104
-
105
- ReactApplicationContext context = getReactApplicationContext();
106
-
107
- // Binds the service to get a MediaWrapper instance
108
- Intent intent = new Intent(context, MusicService.class);
109
- //context.startService(intent);
110
- try {
111
- if (Build.VERSION.SDK_INT >= 26) {
112
- context.startForegroundService(intent);
113
- } else {
114
- context.startService(intent);
115
- }
116
- }catch(Exception ex){
117
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
118
- AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
119
- Intent i = new Intent(context, MusicService.class);
120
- PendingIntent pi = PendingIntent.getForegroundService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
121
- Calendar calendar = Calendar.getInstance();
122
- calendar.setTimeInMillis(System.currentTimeMillis());
123
- calendar.add(Calendar.MILLISECOND, 200);
124
- mgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
125
- }
126
- }
127
- intent.setAction(Utils.CONNECT_INTENT);
128
- context.bindService(intent, this, 0);
129
-
130
-
131
-
132
- connecting = true;
133
- }
134
-
135
- /* ****************************** API ****************************** */
136
-
137
- @Nullable
138
- @Override
139
- public Map<String, Object> getConstants() {
140
- Map<String, Object> constants = new HashMap<>();
141
-
142
- // Capabilities
143
- constants.put("CAPABILITY_PLAY", PlaybackStateCompat.ACTION_PLAY);
144
- constants.put("CAPABILITY_PLAY_FROM_ID", PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID);
145
- constants.put("CAPABILITY_PLAY_FROM_SEARCH", PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH);
146
- constants.put("CAPABILITY_PAUSE", PlaybackStateCompat.ACTION_PAUSE);
147
- constants.put("CAPABILITY_STOP", PlaybackStateCompat.ACTION_STOP);
148
- constants.put("CAPABILITY_SEEK_TO", PlaybackStateCompat.ACTION_SEEK_TO);
149
- constants.put("CAPABILITY_SKIP", PlaybackStateCompat.ACTION_SKIP_TO_QUEUE_ITEM);
150
- constants.put("CAPABILITY_SKIP_TO_NEXT", PlaybackStateCompat.ACTION_SKIP_TO_NEXT);
151
- constants.put("CAPABILITY_SKIP_TO_PREVIOUS", PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS);
152
- constants.put("CAPABILITY_SET_RATING", PlaybackStateCompat.ACTION_SET_RATING);
153
- constants.put("CAPABILITY_JUMP_FORWARD", PlaybackStateCompat.ACTION_FAST_FORWARD);
154
- constants.put("CAPABILITY_JUMP_BACKWARD", PlaybackStateCompat.ACTION_REWIND);
155
-
156
- // States
157
- constants.put("STATE_NONE", PlaybackStateCompat.STATE_NONE);
158
- constants.put("STATE_READY", PlaybackStateCompat.STATE_PAUSED);
159
- constants.put("STATE_PLAYING", PlaybackStateCompat.STATE_PLAYING);
160
- constants.put("STATE_PAUSED", PlaybackStateCompat.STATE_PAUSED);
161
- constants.put("STATE_STOPPED", PlaybackStateCompat.STATE_STOPPED);
162
- constants.put("STATE_BUFFERING", PlaybackStateCompat.STATE_BUFFERING);
163
- constants.put("STATE_CONNECTING", PlaybackStateCompat.STATE_CONNECTING);
164
-
165
- // Rating Types
166
- constants.put("RATING_HEART", RatingCompat.RATING_HEART);
167
- constants.put("RATING_THUMBS_UP_DOWN", RatingCompat.RATING_THUMB_UP_DOWN);
168
- constants.put("RATING_3_STARS", RatingCompat.RATING_3_STARS);
169
- constants.put("RATING_4_STARS", RatingCompat.RATING_4_STARS);
170
- constants.put("RATING_5_STARS", RatingCompat.RATING_5_STARS);
171
- constants.put("RATING_PERCENTAGE", RatingCompat.RATING_PERCENTAGE);
172
-
173
- return constants;
174
- }
175
-
176
- @ReactMethod
177
- public void destroy() {
178
- // Ignore if it was already destroyed
179
- if (binder == null && !connecting) return;
180
-
181
- try {
182
- if(binder != null) {
183
- binder.destroy();
184
- binder = null;
185
- }
186
-
187
- ReactContext context = getReactApplicationContext();
188
- if(context != null) context.unbindService(this);
189
- } catch(Exception ex) {
190
- // This method shouldn't be throwing unhandled errors even if something goes wrong.
191
- Log.e(Utils.LOG, "An error occurred while destroying the service", ex);
192
- }
193
- }
194
-
195
- @ReactMethod
196
- public void updateOptions(ReadableMap data, final Promise callback) {
197
- // keep options as we may need them for correct MetadataManager reinitialization later
198
- options = Arguments.toBundle(data);
199
-
200
- waitForConnection(() -> {
201
- if(binder != null)
202
- binder.updateOptions(options);
203
- callback.resolve(null);
204
- });
205
- }
206
-
207
- @ReactMethod
208
- public void setNowPlaying(ReadableMap trackMap, final Promise callback) {
209
- final Bundle bundle = Arguments.toBundle(trackMap);
210
-
211
- waitForConnection(() -> {
212
- try {
213
- int state = trackMap.hasKey("state") ? trackMap.getInt("state") : 0;
214
-
215
- long elapsedTime = -1;
216
-
217
- if(trackMap.hasKey("elapsedTime")) {
218
- try {
219
- elapsedTime = Utils.toMillis(trackMap.getDouble("elapsedTime"));
220
-
221
- }
222
- catch(Exception ex){
223
- elapsedTime = Utils.toMillis((long)trackMap.getInt("elapsedTime"));
224
- }
225
- }
226
-
227
- Track track = new Track(getReactApplicationContext(), bundle, binder.getRatingType());
228
- binder.getManager().setCurrentTrack(track);
229
- binder.getManager().getMetadata().updateMetadata(track);
230
- binder.getManager().setState(state, elapsedTime);
231
- } catch(Exception ex) {
232
- callback.reject("invalid_track_object", ex);
233
- return;
234
- }
235
-
236
- if(binder != null && binder.getManager() != null && binder.getManager().getCurrentTrack() == null)
237
- callback.reject("invalid_track_object", "Track is missing a required key");
238
-
239
- callback.resolve(null);
240
- });
241
- }
242
-
243
- @ReactMethod
244
- public void updatePlayback(ReadableMap trackMap, final Promise callback) {
245
- final Bundle bundle = Arguments.toBundle(trackMap);
246
-
247
- waitForConnection(() -> {
248
- try {
249
- int state = trackMap.hasKey("state") ? trackMap.getInt("state") : 0;
250
- long elapsedTime = -1;
251
-
252
- if(trackMap.hasKey("elapsedTime")) {
253
- try {
254
- elapsedTime = Utils.toMillis((long)trackMap.getInt("elapsedTime"));
255
- }
256
- catch(Exception ex){
257
- elapsedTime = Utils.toMillis(trackMap.getDouble("elapsedTime"));
258
- }
259
- }
260
-
261
- long duration = -1;
262
-
263
- if(trackMap.hasKey("duration")) {
264
- try {
265
- duration = Utils.toMillis((long)trackMap.getInt("duration"));
266
- }
267
- catch(Exception ex){
268
- duration = Utils.toMillis(trackMap.getDouble("duration"));
269
- }
270
- }
271
- //update current track duration
272
- Track currentTrack = binder.getManager().getCurrentTrack();
273
- if(currentTrack != null && duration > -1)
274
- {
275
- currentTrack.duration = duration;
276
- binder.getManager().getMetadata().updateMetadata(currentTrack);
277
- }
278
-
279
- binder.getManager().setState(state, elapsedTime);
280
- } catch (Exception ex) {
281
- callback.reject("invalid_track_object", ex);
282
- return;
283
- }
284
-
285
- if (binder != null && binder.getManager() != null && binder.getManager().getCurrentTrack() == null)
286
- callback.reject("invalid_track_object", "Track is missing a required key");
287
- });
288
- }
289
- @ReactMethod
290
- public void reset(final Promise callback) {
291
- waitForConnection(() -> {
292
- if(binder != null && binder.getManager() != null) {
293
- binder.getManager().onReset();
294
- callback.resolve(null);
295
- }
296
- });
297
- }
298
- }
@@ -1,47 +0,0 @@
1
- package com.guichaguri.trackplayer.service;
2
-
3
- import android.os.Binder;
4
- import android.os.Bundle;
5
- import android.os.Handler;
6
-
7
- /**
8
- * @author Guichaguri
9
- */
10
- public class MusicBinder extends Binder {
11
-
12
- private final MusicService service;
13
- private final MusicManager manager;
14
-
15
- public MusicBinder(MusicService service, MusicManager manager) {
16
- this.service = service;
17
- this.manager = manager;
18
- }
19
-
20
- public void post(Runnable r) {
21
- if(service == null)
22
- return;
23
-
24
- if(service.handler == null)
25
- service.handler = new Handler();
26
-
27
- service.handler.post(r);
28
- }
29
-
30
- public MusicManager getManager(){ return this.manager; }
31
-
32
- public void updateOptions(Bundle bundle) {
33
- manager.setStopWithApp(bundle.getBoolean("stopWithApp", false));
34
- manager.setAlwaysPauseOnInterruption(bundle.getBoolean("alwaysPauseOnInterruption", false));
35
- manager.getMetadata().updateOptions(bundle);
36
- }
37
-
38
- public int getRatingType() {
39
- return manager.getMetadata().getRatingType();
40
- }
41
-
42
- public void destroy() {
43
- service.destroy(true);
44
- service.stopSelf();
45
- }
46
-
47
- }