react-native-nitro-player 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +2 -0
  2. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +5 -3
  3. package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +4 -0
  4. package/android/src/main/java/com/margelo/nitro/nitroplayer/connection/AndroidAutoConnectionDetector.kt +14 -13
  5. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/NitroPlayerLogger.kt +31 -0
  6. package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +142 -95
  7. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +7 -6
  8. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +2 -1
  9. package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +1 -2
  10. package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +3 -2
  11. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaBrowserService.kt +25 -24
  12. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaLibraryManager.kt +3 -2
  13. package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +20 -19
  14. package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +16 -9
  15. package/ios/HybridAudioRoutePicker.swift +1 -1
  16. package/ios/HybridDownloadManager.swift +3 -3
  17. package/ios/HybridEqualizer.swift +3 -3
  18. package/ios/HybridTrackPlayer.swift +8 -4
  19. package/ios/core/NitroPlayerLogger.swift +22 -0
  20. package/ios/core/TrackPlayerCore.swift +195 -256
  21. package/ios/download/DownloadDatabase.swift +72 -49
  22. package/ios/download/DownloadFileManager.swift +24 -17
  23. package/ios/download/DownloadManagerCore.swift +29 -33
  24. package/ios/equalizer/EqualizerCore.swift +25 -20
  25. package/ios/playlist/PlaylistManager.swift +19 -9
  26. package/ios/queue/QueueManager.swift +1 -1
  27. package/lib/specs/TrackPlayer.nitro.d.ts +1 -0
  28. package/lib/types/PlayerQueue.d.ts +1 -1
  29. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +5 -0
  30. package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +1 -0
  31. package/nitrogen/generated/android/c++/JReason.hpp +3 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +4 -0
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Reason.kt +2 -1
  34. package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +12 -0
  35. package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +8 -0
  36. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +1 -0
  37. package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +12 -0
  38. package/nitrogen/generated/ios/swift/Reason.swift +4 -0
  39. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +1 -0
  40. package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +1 -0
  41. package/nitrogen/generated/shared/c++/Reason.hpp +4 -0
  42. package/package.json +1 -1
  43. package/src/specs/TrackPlayer.nitro.ts +1 -0
  44. package/src/types/PlayerQueue.ts +1 -1
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A powerful audio player library for React Native with playlist management, playback controls, and support for Android Auto and CarPlay.
4
4
 
5
+ Documentation: [https://nitroplayer.riteshshukla.in/](https://nitroplayer.riteshshukla.in/)
6
+
5
7
  ## Installation
6
8
 
7
9
  ```bash
@@ -7,6 +7,7 @@ import android.os.Build
7
7
  import androidx.annotation.Keep
8
8
  import com.facebook.proguard.annotations.DoNotStrip
9
9
  import com.margelo.nitro.NitroModules
10
+ import com.margelo.nitro.nitroplayer.core.NitroPlayerLogger
10
11
 
11
12
  @DoNotStrip
12
13
  @Keep
@@ -83,7 +84,7 @@ class HybridAudioDevices : HybridAudioDevicesSpec() {
83
84
 
84
85
  // Check if device type is valid for communication
85
86
  if (!validCommunicationDeviceTypes.contains(device.type)) {
86
- android.util.Log.w(TAG, "Device type ${device.type} is not a valid communication device")
87
+ NitroPlayerLogger.log("HybridAudioDevices", "Device type ${device.type} is not a valid communication device")
87
88
  return false
88
89
  }
89
90
 
@@ -115,13 +116,14 @@ class HybridAudioDevices : HybridAudioDevicesSpec() {
115
116
  }
116
117
 
117
118
  else -> {
118
- android.util.Log.w(TAG, "Unsupported device type for pre-Android 12: ${device.type}")
119
+ NitroPlayerLogger.log("HybridAudioDevices", "Unsupported device type for pre-Android 12: ${device.type}")
119
120
  false
120
121
  }
121
122
  }
122
123
  }
123
124
  } catch (e: Exception) {
124
- android.util.Log.e(TAG, "Error setting audio device: ${e.message}", e)
125
+ NitroPlayerLogger.log("HybridAudioDevices", "Error setting audio device: ${e.message}")
126
+ e.printStackTrace()
125
127
  false
126
128
  }
127
129
  }
@@ -79,6 +79,10 @@ class HybridTrackPlayer : HybridTrackPlayerSpec() {
79
79
  @Keep
80
80
  override fun setRepeatMode(mode: RepeatMode): Boolean = core.setRepeatMode(mode)
81
81
 
82
+ @DoNotStrip
83
+ @Keep
84
+ override fun getRepeatMode(): RepeatMode = core.getRepeatMode()
85
+
82
86
  override fun onChangeTrack(callback: (track: TrackItem, reason: Reason?) -> Unit) {
83
87
  core.addOnChangeTrackListener(callback)
84
88
  }
@@ -10,6 +10,7 @@ import android.database.Cursor
10
10
  import android.net.Uri
11
11
  import android.os.Build
12
12
  import android.util.Log
13
+ import com.margelo.nitro.nitroplayer.core.NitroPlayerLogger
13
14
 
14
15
  /**
15
16
  * Detects Android Auto connection status using the official Android for Cars API
@@ -51,7 +52,7 @@ class AndroidAutoConnectionDetector(
51
52
 
52
53
  fun registerCarConnectionReceiver() {
53
54
  if (isRegistered) {
54
- Log.w(TAG, "Receiver already registered")
55
+ NitroPlayerLogger.log("AndroidAutoConnection", "Receiver already registered")
55
56
  return
56
57
  }
57
58
 
@@ -66,12 +67,12 @@ class AndroidAutoConnectionDetector(
66
67
  }
67
68
 
68
69
  isRegistered = true
69
- Log.i(TAG, "✅ Car connection receiver registered")
70
+ NitroPlayerLogger.log("AndroidAutoConnection", "✅ Car connection receiver registered")
70
71
 
71
72
  // Query initial state
72
73
  queryForState()
73
74
  } catch (e: Exception) {
74
- Log.e(TAG, "❌ Error registering car connection receiver: ${e.message}")
75
+ NitroPlayerLogger.log("AndroidAutoConnection", "❌ Error registering car connection receiver: ${e.message}")
75
76
  e.printStackTrace()
76
77
  }
77
78
  }
@@ -84,9 +85,9 @@ class AndroidAutoConnectionDetector(
84
85
  try {
85
86
  context.unregisterReceiver(carConnectionReceiver)
86
87
  isRegistered = false
87
- Log.i(TAG, "🛑 Car connection receiver unregistered")
88
+ NitroPlayerLogger.log("AndroidAutoConnection", "🛑 Car connection receiver unregistered")
88
89
  } catch (e: Exception) {
89
- Log.e(TAG, "❌ Error unregistering car connection receiver: ${e.message}")
90
+ NitroPlayerLogger.log("AndroidAutoConnection", "❌ Error unregistering car connection receiver: ${e.message}")
90
91
  e.printStackTrace()
91
92
  }
92
93
  }
@@ -103,19 +104,19 @@ class AndroidAutoConnectionDetector(
103
104
  null,
104
105
  )
105
106
  } catch (e: Exception) {
106
- Log.e(TAG, "❌ Error querying car connection state: ${e.message}")
107
+ NitroPlayerLogger.log("AndroidAutoConnection", "❌ Error querying car connection state: ${e.message}")
107
108
  e.printStackTrace()
108
109
  notifyCarDisconnected()
109
110
  }
110
111
  }
111
112
 
112
113
  private fun notifyCarConnected(connectionType: Int) {
113
- Log.i(TAG, "🚗 Android Auto CONNECTED (type: $connectionType)")
114
+ NitroPlayerLogger.log("AndroidAutoConnection", "🚗 Android Auto CONNECTED (type: $connectionType)")
114
115
  onConnectionChanged?.invoke(true, connectionType)
115
116
  }
116
117
 
117
118
  private fun notifyCarDisconnected() {
118
- Log.i(TAG, "📱 Android Auto DISCONNECTED")
119
+ NitroPlayerLogger.log("AndroidAutoConnection", "📱 Android Auto DISCONNECTED")
119
120
  onConnectionChanged?.invoke(false, CONNECTION_TYPE_NOT_CONNECTED)
120
121
  }
121
122
 
@@ -124,7 +125,7 @@ class AndroidAutoConnectionDetector(
124
125
  context: Context?,
125
126
  intent: Intent?,
126
127
  ) {
127
- Log.i(TAG, "🔔 Car connection broadcast received")
128
+ NitroPlayerLogger.log("AndroidAutoConnection", "🔔 Car connection broadcast received")
128
129
  queryForState()
129
130
  }
130
131
  }
@@ -138,26 +139,26 @@ class AndroidAutoConnectionDetector(
138
139
  response: Cursor?,
139
140
  ) {
140
141
  if (response == null) {
141
- Log.w(TAG, "⚠️ Null response from content provider, treating as disconnected")
142
+ NitroPlayerLogger.log("AndroidAutoConnection", "⚠️ Null response from content provider, treating as disconnected")
142
143
  notifyCarDisconnected()
143
144
  return
144
145
  }
145
146
 
146
147
  val carConnectionTypeColumn = response.getColumnIndex(CAR_CONNECTION_STATE)
147
148
  if (carConnectionTypeColumn < 0) {
148
- Log.w(TAG, "⚠️ Connection type column missing, treating as disconnected")
149
+ NitroPlayerLogger.log("AndroidAutoConnection", "⚠️ Connection type column missing, treating as disconnected")
149
150
  notifyCarDisconnected()
150
151
  return
151
152
  }
152
153
 
153
154
  if (!response.moveToNext()) {
154
- Log.w(TAG, "⚠️ Empty response, treating as disconnected")
155
+ NitroPlayerLogger.log("AndroidAutoConnection", "⚠️ Empty response, treating as disconnected")
155
156
  notifyCarDisconnected()
156
157
  return
157
158
  }
158
159
 
159
160
  val connectionState = response.getInt(carConnectionTypeColumn)
160
- Log.i(TAG, "📊 Connection state queried: $connectionState")
161
+ NitroPlayerLogger.log("AndroidAutoConnection", "📊 Connection state queried: $connectionState")
161
162
 
162
163
  if (connectionState == CONNECTION_TYPE_NOT_CONNECTED) {
163
164
  notifyCarDisconnected()
@@ -0,0 +1,31 @@
1
+ package com.margelo.nitro.nitroplayer.core
2
+
3
+ import android.util.Log
4
+ import com.margelo.nitro.nitroplayer.BuildConfig
5
+
6
+ object NitroPlayerLogger {
7
+ // Determine if logging is enabled based on build config
8
+ val isEnabled: Boolean = BuildConfig.DEBUG
9
+
10
+ /**
11
+ * Preferred overload: message lambda is only evaluated when logging is enabled.
12
+ * Use trailing lambda syntax: NitroPlayerLogger.log("Tag") { "msg $value" }
13
+ * The lambda is inlined (no heap allocation) and skipped entirely when disabled.
14
+ */
15
+ inline fun log(header: String = "NitroPlayer", message: () -> String) {
16
+ if (isEnabled) {
17
+ Log.d(header, message())
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Compatibility overload for existing call sites.
23
+ * Note: the String is evaluated at the call site before this function runs.
24
+ * Migrate to the lambda overload for hot paths.
25
+ */
26
+ fun log(header: String = "NitroPlayer", message: String) {
27
+ if (isEnabled) {
28
+ Log.d(header, message)
29
+ }
30
+ }
31
+ }