react-native-nitro-player 0.5.3 → 0.5.5
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/src/main/java/com/margelo/nitro/nitroplayer/HybridAudioDevices.kt +5 -3
- package/android/src/main/java/com/margelo/nitro/nitroplayer/HybridTrackPlayer.kt +4 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/connection/AndroidAutoConnectionDetector.kt +14 -13
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/NitroPlayerLogger.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/nitroplayer/core/TrackPlayerCore.kt +142 -95
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadDatabase.kt +75 -29
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadManagerCore.kt +2 -1
- package/android/src/main/java/com/margelo/nitro/nitroplayer/download/DownloadWorker.kt +1 -2
- package/android/src/main/java/com/margelo/nitro/nitroplayer/equalizer/EqualizerCore.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaBrowserService.kt +25 -24
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaLibraryManager.kt +3 -2
- package/android/src/main/java/com/margelo/nitro/nitroplayer/media/MediaSessionManager.kt +20 -19
- package/android/src/main/java/com/margelo/nitro/nitroplayer/playlist/PlaylistManager.kt +119 -85
- package/android/src/main/java/com/margelo/nitro/nitroplayer/storage/NitroPlayerStorage.kt +50 -0
- package/ios/HybridAudioRoutePicker.swift +1 -1
- package/ios/HybridDownloadManager.swift +3 -3
- package/ios/HybridEqualizer.swift +3 -3
- package/ios/HybridTrackPlayer.swift +8 -4
- package/ios/core/NitroPlayerLogger.swift +22 -0
- package/ios/core/TrackPlayerCore.swift +195 -256
- package/ios/download/DownloadDatabase.swift +92 -62
- package/ios/download/DownloadFileManager.swift +17 -17
- package/ios/download/DownloadManagerCore.swift +80 -44
- package/ios/equalizer/EqualizerCore.swift +25 -20
- package/ios/playlist/PlaylistManager.swift +113 -82
- package/ios/queue/QueueManager.swift +1 -1
- package/ios/storage/NitroPlayerStorage.swift +44 -0
- package/lib/specs/TrackPlayer.nitro.d.ts +1 -0
- package/lib/types/PlayerQueue.d.ts +1 -1
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.cpp +5 -0
- package/nitrogen/generated/android/c++/JHybridTrackPlayerSpec.hpp +1 -0
- package/nitrogen/generated/android/c++/JReason.hpp +3 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/HybridTrackPlayerSpec.kt +4 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroplayer/Reason.kt +2 -1
- package/nitrogen/generated/ios/NitroPlayer-Swift-Cxx-Bridge.hpp +12 -0
- package/nitrogen/generated/ios/c++/HybridTrackPlayerSpecSwift.hpp +8 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridTrackPlayerSpec_cxx.swift +12 -0
- package/nitrogen/generated/ios/swift/Reason.swift +4 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridTrackPlayerSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/Reason.hpp +4 -0
- package/package.json +1 -1
- package/src/specs/TrackPlayer.nitro.ts +1 -0
- package/src/types/PlayerQueue.ts +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
NitroPlayerLogger.log("AndroidAutoConnection", "✅ Car connection receiver registered")
|
|
70
71
|
|
|
71
72
|
// Query initial state
|
|
72
73
|
queryForState()
|
|
73
74
|
} catch (e: Exception) {
|
|
74
|
-
|
|
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
|
-
|
|
88
|
+
NitroPlayerLogger.log("AndroidAutoConnection", "🛑 Car connection receiver unregistered")
|
|
88
89
|
} catch (e: Exception) {
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|