Skip to content

Fix android build for 4.x #2568

@TomMahle

Description

@TomMahle

Hi! 👋

Firstly, thanks for your work on this project! 🙂

Today I used patch-package to patch react-native-track-player@4.1.2 for the project I'm working on.

Android builds are currently broken in 4.1.2. The fix is based on this post

Here is the diff that solved my problem:

diff --git a/node_modules/react-native-track-player/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt b/node_modules/react-native-track-player/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt
index b2409a0..2e07f1f 100644
--- a/node_modules/react-native-track-player/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt
+++ b/node_modules/react-native-track-player/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt
@@ -543,9 +543,19 @@ class MusicModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaM
     @ReactMethod
     fun getTrack(index: Int, callback: Promise) = scope.launch {
         if (verifyServiceBoundOrReject(callback)) return@launch
-
-        if (index >= 0 && index < musicService.tracks.size) {
-            callback.resolve(Arguments.fromBundle(musicService.tracks[index].originalItem))
+        if (verifyServiceBoundOrReject(callback) == true) return@launch
+        val service = musicService
+        if (service == null) {
+            callback.resolve(null)
+            return@launch
+        }
+        if (index >= 0 && index < service.tracks.size) {
+            val item = service.tracks[index].originalItem
+            if (item != null) {
+                callback.resolve(Arguments.fromBundle(item))
+            } else {
+                callback.resolve(null)
+            }
         } else {
             callback.resolve(null)
         }
@@ -582,12 +592,27 @@ class MusicModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaM
     @ReactMethod
     fun getActiveTrack(callback: Promise) = scope.launch {
         if (verifyServiceBoundOrReject(callback)) return@launch
-        callback.resolve(
-            if (musicService.tracks.isEmpty()) null
-            else Arguments.fromBundle(
-                musicService.tracks[musicService.getCurrentTrackIndex()].originalItem
-            )
-        )
+        val service = musicService
+        if (service == null) {
+            callback.resolve(null)
+            return@launch
+        }
+        if (service.tracks.isEmpty()) {
+            callback.resolve(null)
+            return@launch
+        }
+        val index = service.getCurrentTrackIndex()
+        if (index < 0 || index >= service.tracks.size) {
+            callback.resolve(null)
+            return@launch
+        }
+
+        val item = service.tracks[index].originalItem
+        if (item != null) {
+            callback.resolve(Arguments.fromBundle(item))
+        } else {
+            callback.resolve(null)
+        }
     }
 
     @ReactMethod

This issue body was partially generated by patch-package.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions