@bluebillywig/react-native-bb-player 8.42.8 → 8.42.10
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 +14 -0
- package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerModule.kt +37 -36
- package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerPackage.kt +25 -4
- package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerView.kt +142 -72
- package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerViewManager.kt +20 -2
- package/android/src/newarch/java/com/bluebillywig/bbplayer/NativeBBPlayerModuleSpec.java +12 -0
- package/android/src/paper/java/com/bluebillywig/bbplayer/NativeBBPlayerModuleSpec.java +59 -0
- package/ios/{BBPlayerModule.m → BBPlayerModule.mm} +12 -0
- package/lib/commonjs/NativeCommands.js +14 -3
- package/lib/commonjs/NativeCommands.js.map +1 -1
- package/lib/commonjs/specs/NativeBBPlayerModule.js +9 -0
- package/lib/commonjs/specs/NativeBBPlayerModule.js.map +1 -0
- package/lib/module/NativeCommands.js +14 -3
- package/lib/module/NativeCommands.js.map +1 -1
- package/lib/module/specs/NativeBBPlayerModule.js +5 -0
- package/lib/module/specs/NativeBBPlayerModule.js.map +1 -0
- package/lib/typescript/src/NativeCommands.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeBBPlayerModule.d.ts +37 -0
- package/lib/typescript/src/specs/NativeBBPlayerModule.d.ts.map +1 -0
- package/package.json +9 -1
- package/react-native-bb-player.podspec +23 -3
- package/src/NativeCommands.ts +16 -1
- package/src/specs/NativeBBPlayerModule.ts +85 -0
package/android/build.gradle
CHANGED
|
@@ -7,6 +7,10 @@ def safeExtGet(prop, fallback) {
|
|
|
7
7
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
def isNewArchitectureEnabled() {
|
|
11
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
group = 'com.bluebillywig.bbplayer'
|
|
11
15
|
version = '2.0.0'
|
|
12
16
|
|
|
@@ -19,6 +23,11 @@ android {
|
|
|
19
23
|
targetSdk safeExtGet('targetSdkVersion', 36)
|
|
20
24
|
versionCode 1
|
|
21
25
|
versionName "2.0.0"
|
|
26
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
buildFeatures {
|
|
30
|
+
buildConfig true
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
buildTypes {
|
|
@@ -39,6 +48,11 @@ android {
|
|
|
39
48
|
sourceSets {
|
|
40
49
|
main {
|
|
41
50
|
java.srcDirs = ['src/main/java']
|
|
51
|
+
if (isNewArchitectureEnabled()) {
|
|
52
|
+
java.srcDirs += ['src/newarch/java']
|
|
53
|
+
} else {
|
|
54
|
+
java.srcDirs += ['src/paper/java']
|
|
55
|
+
}
|
|
42
56
|
}
|
|
43
57
|
}
|
|
44
58
|
}
|
|
@@ -4,21 +4,22 @@ import android.util.Log
|
|
|
4
4
|
import com.facebook.react.bridge.Arguments
|
|
5
5
|
import com.facebook.react.bridge.Promise
|
|
6
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
-
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
8
7
|
import com.facebook.react.bridge.ReactMethod
|
|
9
8
|
import com.facebook.react.bridge.UiThreadUtil
|
|
9
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
10
10
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
11
11
|
import com.facebook.react.uimanager.common.UIManagerType
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Native Module for BBPlayer commands.
|
|
15
|
-
* Works with both Old Architecture and New Architecture (Fabric).
|
|
15
|
+
* Works with both Old Architecture (Paper) and New Architecture (Fabric/TurboModules).
|
|
16
16
|
*
|
|
17
|
-
* This module
|
|
18
|
-
* commands to them
|
|
17
|
+
* This module looks up BBPlayerView instances by their React view tag and dispatches
|
|
18
|
+
* commands to them.
|
|
19
19
|
*/
|
|
20
|
+
@ReactModule(name = BBPlayerModule.NAME)
|
|
20
21
|
class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
21
|
-
|
|
22
|
+
NativeBBPlayerModuleSpec(reactContext) {
|
|
22
23
|
|
|
23
24
|
override fun getName(): String = NAME
|
|
24
25
|
|
|
@@ -60,77 +61,77 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
@ReactMethod
|
|
63
|
-
fun play(viewTag: Int) {
|
|
64
|
+
override fun play(viewTag: Int) {
|
|
64
65
|
runOnUiThread(viewTag) { it.play() }
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
@ReactMethod
|
|
68
|
-
fun pause(viewTag: Int) {
|
|
69
|
+
override fun pause(viewTag: Int) {
|
|
69
70
|
runOnUiThread(viewTag) { it.pause() }
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
@ReactMethod
|
|
73
|
-
fun seek(viewTag: Int, position: Double) {
|
|
74
|
+
override fun seek(viewTag: Int, position: Double) {
|
|
74
75
|
runOnUiThread(viewTag) { it.seek(position) }
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
@ReactMethod
|
|
78
|
-
fun seekRelative(viewTag: Int, offsetSeconds: Double) {
|
|
79
|
+
override fun seekRelative(viewTag: Int, offsetSeconds: Double) {
|
|
79
80
|
runOnUiThread(viewTag) { it.seekRelative(offsetSeconds) }
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
@ReactMethod
|
|
83
|
-
fun setVolume(viewTag: Int, volume: Double) {
|
|
84
|
+
override fun setVolume(viewTag: Int, volume: Double) {
|
|
84
85
|
runOnUiThread(viewTag) { it.setVolume(volume) }
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
@ReactMethod
|
|
88
|
-
fun setMuted(viewTag: Int, muted: Boolean) {
|
|
89
|
+
override fun setMuted(viewTag: Int, muted: Boolean) {
|
|
89
90
|
runOnUiThread(viewTag) { it.setMuted(muted) }
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
@ReactMethod
|
|
93
|
-
fun enterFullscreen(viewTag: Int) {
|
|
94
|
+
override fun enterFullscreen(viewTag: Int) {
|
|
94
95
|
runOnUiThread(viewTag) { it.enterFullscreen() }
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
@ReactMethod
|
|
98
|
-
fun enterFullscreenLandscape(viewTag: Int) {
|
|
99
|
+
override fun enterFullscreenLandscape(viewTag: Int) {
|
|
99
100
|
runOnUiThread(viewTag) { it.enterFullscreenLandscape() }
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
@ReactMethod
|
|
103
|
-
fun exitFullscreen(viewTag: Int) {
|
|
104
|
+
override fun exitFullscreen(viewTag: Int) {
|
|
104
105
|
runOnUiThread(viewTag) { it.exitFullscreen() }
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
@ReactMethod
|
|
108
|
-
fun collapse(viewTag: Int) {
|
|
109
|
+
override fun collapse(viewTag: Int) {
|
|
109
110
|
runOnUiThread(viewTag) { it.collapse() }
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
@ReactMethod
|
|
113
|
-
fun expand(viewTag: Int) {
|
|
114
|
+
override fun expand(viewTag: Int) {
|
|
114
115
|
runOnUiThread(viewTag) { it.expand() }
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
@ReactMethod
|
|
118
|
-
fun autoPlayNextCancel(viewTag: Int) {
|
|
119
|
+
override fun autoPlayNextCancel(viewTag: Int) {
|
|
119
120
|
runOnUiThread(viewTag) { it.autoPlayNextCancel() }
|
|
120
121
|
}
|
|
121
122
|
|
|
122
123
|
@ReactMethod
|
|
123
|
-
fun destroy(viewTag: Int) {
|
|
124
|
+
override fun destroy(viewTag: Int) {
|
|
124
125
|
runOnUiThread(viewTag) { it.destroy() }
|
|
125
126
|
}
|
|
126
127
|
|
|
127
128
|
@ReactMethod
|
|
128
|
-
fun showCastPicker(viewTag: Int) {
|
|
129
|
+
override fun showCastPicker(viewTag: Int) {
|
|
129
130
|
runOnUiThread(viewTag) { it.showCastPicker() }
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
@ReactMethod
|
|
133
|
-
fun loadWithClipId(
|
|
134
|
+
override fun loadWithClipId(
|
|
134
135
|
viewTag: Int,
|
|
135
136
|
clipId: String,
|
|
136
137
|
initiator: String?,
|
|
@@ -149,7 +150,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
149
150
|
}
|
|
150
151
|
|
|
151
152
|
@ReactMethod
|
|
152
|
-
fun loadWithClipListId(
|
|
153
|
+
override fun loadWithClipListId(
|
|
153
154
|
viewTag: Int,
|
|
154
155
|
clipListId: String,
|
|
155
156
|
initiator: String?,
|
|
@@ -167,7 +168,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
167
168
|
}
|
|
168
169
|
|
|
169
170
|
@ReactMethod
|
|
170
|
-
fun loadWithProjectId(
|
|
171
|
+
override fun loadWithProjectId(
|
|
171
172
|
viewTag: Int,
|
|
172
173
|
projectId: String,
|
|
173
174
|
initiator: String?,
|
|
@@ -185,7 +186,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
@ReactMethod
|
|
188
|
-
fun loadWithClipJson(
|
|
189
|
+
override fun loadWithClipJson(
|
|
189
190
|
viewTag: Int,
|
|
190
191
|
clipJson: String,
|
|
191
192
|
initiator: String?,
|
|
@@ -203,7 +204,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
203
204
|
}
|
|
204
205
|
|
|
205
206
|
@ReactMethod
|
|
206
|
-
fun loadWithClipListJson(
|
|
207
|
+
override fun loadWithClipListJson(
|
|
207
208
|
viewTag: Int,
|
|
208
209
|
clipListJson: String,
|
|
209
210
|
initiator: String?,
|
|
@@ -221,7 +222,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
221
222
|
}
|
|
222
223
|
|
|
223
224
|
@ReactMethod
|
|
224
|
-
fun loadWithProjectJson(
|
|
225
|
+
override fun loadWithProjectJson(
|
|
225
226
|
viewTag: Int,
|
|
226
227
|
projectJson: String,
|
|
227
228
|
initiator: String?,
|
|
@@ -239,7 +240,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
239
240
|
}
|
|
240
241
|
|
|
241
242
|
@ReactMethod
|
|
242
|
-
fun loadWithJsonUrl(
|
|
243
|
+
override fun loadWithJsonUrl(
|
|
243
244
|
viewTag: Int,
|
|
244
245
|
jsonUrl: String,
|
|
245
246
|
autoPlay: Boolean
|
|
@@ -254,7 +255,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
254
255
|
|
|
255
256
|
// Getter methods with Promise support
|
|
256
257
|
@ReactMethod
|
|
257
|
-
fun getDuration(viewTag: Int, promise: Promise) {
|
|
258
|
+
override fun getDuration(viewTag: Int, promise: Promise) {
|
|
258
259
|
UiThreadUtil.runOnUiThread {
|
|
259
260
|
val view = findPlayerView(viewTag)
|
|
260
261
|
if (view != null) {
|
|
@@ -267,7 +268,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
267
268
|
}
|
|
268
269
|
|
|
269
270
|
@ReactMethod
|
|
270
|
-
fun getCurrentTime(viewTag: Int, promise: Promise) {
|
|
271
|
+
override fun getCurrentTime(viewTag: Int, promise: Promise) {
|
|
271
272
|
UiThreadUtil.runOnUiThread {
|
|
272
273
|
val view = findPlayerView(viewTag)
|
|
273
274
|
if (view != null) {
|
|
@@ -280,7 +281,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
280
281
|
}
|
|
281
282
|
|
|
282
283
|
@ReactMethod
|
|
283
|
-
fun getMuted(viewTag: Int, promise: Promise) {
|
|
284
|
+
override fun getMuted(viewTag: Int, promise: Promise) {
|
|
284
285
|
UiThreadUtil.runOnUiThread {
|
|
285
286
|
val view = findPlayerView(viewTag)
|
|
286
287
|
if (view != null) {
|
|
@@ -293,7 +294,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
293
294
|
}
|
|
294
295
|
|
|
295
296
|
@ReactMethod
|
|
296
|
-
fun getVolume(viewTag: Int, promise: Promise) {
|
|
297
|
+
override fun getVolume(viewTag: Int, promise: Promise) {
|
|
297
298
|
UiThreadUtil.runOnUiThread {
|
|
298
299
|
val view = findPlayerView(viewTag)
|
|
299
300
|
if (view != null) {
|
|
@@ -306,7 +307,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
306
307
|
}
|
|
307
308
|
|
|
308
309
|
@ReactMethod
|
|
309
|
-
fun getPhase(viewTag: Int, promise: Promise) {
|
|
310
|
+
override fun getPhase(viewTag: Int, promise: Promise) {
|
|
310
311
|
UiThreadUtil.runOnUiThread {
|
|
311
312
|
val view = findPlayerView(viewTag)
|
|
312
313
|
if (view != null) {
|
|
@@ -319,7 +320,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
319
320
|
}
|
|
320
321
|
|
|
321
322
|
@ReactMethod
|
|
322
|
-
fun getState(viewTag: Int, promise: Promise) {
|
|
323
|
+
override fun getState(viewTag: Int, promise: Promise) {
|
|
323
324
|
UiThreadUtil.runOnUiThread {
|
|
324
325
|
val view = findPlayerView(viewTag)
|
|
325
326
|
if (view != null) {
|
|
@@ -332,7 +333,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
332
333
|
}
|
|
333
334
|
|
|
334
335
|
@ReactMethod
|
|
335
|
-
fun getMode(viewTag: Int, promise: Promise) {
|
|
336
|
+
override fun getMode(viewTag: Int, promise: Promise) {
|
|
336
337
|
UiThreadUtil.runOnUiThread {
|
|
337
338
|
val view = findPlayerView(viewTag)
|
|
338
339
|
if (view != null) {
|
|
@@ -345,7 +346,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
345
346
|
}
|
|
346
347
|
|
|
347
348
|
@ReactMethod
|
|
348
|
-
fun getClipData(viewTag: Int, promise: Promise) {
|
|
349
|
+
override fun getClipData(viewTag: Int, promise: Promise) {
|
|
349
350
|
UiThreadUtil.runOnUiThread {
|
|
350
351
|
val view = findPlayerView(viewTag)
|
|
351
352
|
if (view != null) {
|
|
@@ -368,7 +369,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
368
369
|
}
|
|
369
370
|
|
|
370
371
|
@ReactMethod
|
|
371
|
-
fun getProjectData(viewTag: Int, promise: Promise) {
|
|
372
|
+
override fun getProjectData(viewTag: Int, promise: Promise) {
|
|
372
373
|
UiThreadUtil.runOnUiThread {
|
|
373
374
|
val view = findPlayerView(viewTag)
|
|
374
375
|
if (view != null) {
|
|
@@ -389,7 +390,7 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
|
|
|
389
390
|
}
|
|
390
391
|
|
|
391
392
|
@ReactMethod
|
|
392
|
-
fun getPlayoutData(viewTag: Int, promise: Promise) {
|
|
393
|
+
override fun getPlayoutData(viewTag: Int, promise: Promise) {
|
|
393
394
|
UiThreadUtil.runOnUiThread {
|
|
394
395
|
val view = findPlayerView(viewTag)
|
|
395
396
|
if (view != null) {
|
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
package com.bluebillywig.bbplayer
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
6
8
|
import com.facebook.react.uimanager.ViewManager
|
|
7
9
|
|
|
8
|
-
class BBPlayerPackage :
|
|
9
|
-
override fun
|
|
10
|
-
return
|
|
10
|
+
class BBPlayerPackage : BaseReactPackage() {
|
|
11
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
12
|
+
return when (name) {
|
|
13
|
+
BBPlayerModule.NAME -> BBPlayerModule(reactContext)
|
|
14
|
+
else -> null
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
19
|
+
return ReactModuleInfoProvider {
|
|
20
|
+
mapOf(
|
|
21
|
+
BBPlayerModule.NAME to ReactModuleInfo(
|
|
22
|
+
BBPlayerModule.NAME,
|
|
23
|
+
BBPlayerModule::class.java.name,
|
|
24
|
+
false, // canOverrideExistingModule
|
|
25
|
+
false, // needsEagerInit
|
|
26
|
+
true, // hasConstants - deprecated but still needed
|
|
27
|
+
false, // isCxxModule
|
|
28
|
+
BuildConfig.IS_NEW_ARCHITECTURE_ENABLED // isTurboModule
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
}
|
|
11
32
|
}
|
|
12
33
|
|
|
13
34
|
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
@@ -4,9 +4,12 @@ import android.app.Activity
|
|
|
4
4
|
import android.os.Handler
|
|
5
5
|
import android.os.Looper
|
|
6
6
|
import android.util.Log
|
|
7
|
+
import android.view.Choreographer
|
|
7
8
|
import android.view.MotionEvent
|
|
8
9
|
import android.view.View
|
|
10
|
+
import android.view.ViewGroup
|
|
9
11
|
import android.widget.FrameLayout
|
|
12
|
+
import com.facebook.react.modules.core.ReactChoreographer
|
|
10
13
|
import androidx.collection.ArrayMap
|
|
11
14
|
import androidx.mediarouter.app.MediaRouteButton
|
|
12
15
|
import com.bluebillywig.bbnativeplayersdk.BBNativePlayer
|
|
@@ -42,18 +45,11 @@ private inline fun debugLog(tag: String, message: () -> String) {
|
|
|
42
45
|
*
|
|
43
46
|
* To ensure the native player controls work correctly, this view:
|
|
44
47
|
*
|
|
45
|
-
* 1. **Overrides
|
|
46
|
-
* React Native's view hierarchy by posting to the choreographer.
|
|
47
|
-
*
|
|
48
|
-
* 2. **Overrides onMeasure()** - Uses native Android measurement (MeasureSpec.EXACTLY)
|
|
49
|
-
* instead of letting Yoga determine the size, ensuring the player and its controls
|
|
50
|
-
* receive proper dimensions.
|
|
51
|
-
*
|
|
52
|
-
* 3. **Overrides onLayout()** - Explicitly layouts child views to fill the container,
|
|
48
|
+
* 1. **Overrides onLayout()** - Explicitly layouts child views to fill the container,
|
|
53
49
|
* which is necessary because React Native's Yoga layout doesn't automatically
|
|
54
50
|
* propagate layout to native child views.
|
|
55
51
|
*
|
|
56
|
-
*
|
|
52
|
+
* 2. **Overrides onInterceptTouchEvent()** - Returns false to ensure touch events
|
|
57
53
|
* always reach the child BBNativePlayerView, allowing the player's controlbar
|
|
58
54
|
* to respond to taps.
|
|
59
55
|
*
|
|
@@ -64,9 +60,6 @@ private inline fun debugLog(tag: String, message: () -> String) {
|
|
|
64
60
|
* ExoPlayer StyledPlayerView which has its own gesture detectors and controlbar that
|
|
65
61
|
* need to receive touch events directly. Without these overrides, React Native's
|
|
66
62
|
* touch handling system intercepts events before they reach the native player controls.
|
|
67
|
-
*
|
|
68
|
-
* This approach is similar to how Expo's ExpoView handles native views with
|
|
69
|
-
* `shouldUseAndroidLayout = true`.
|
|
70
63
|
*/
|
|
71
64
|
class BBPlayerView(private val reactContext: ThemedReactContext) : FrameLayout(reactContext),
|
|
72
65
|
BBNativePlayerViewDelegate {
|
|
@@ -85,88 +78,79 @@ class BBPlayerView(private val reactContext: ThemedReactContext) : FrameLayout(r
|
|
|
85
78
|
private var wasLandscapeFullscreen = false
|
|
86
79
|
private var savedOrientation: Int? = null
|
|
87
80
|
|
|
88
|
-
init {
|
|
89
|
-
// Default to black background (playout data may override with bgColor)
|
|
90
|
-
setBackgroundColor(android.graphics.Color.BLACK)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
81
|
// ==================================================================================
|
|
94
82
|
// NATIVE LAYOUT INTEGRATION
|
|
95
|
-
//
|
|
96
|
-
//
|
|
83
|
+
// ViewGroupManager.needsCustomLayoutForChildren() = true tells React Native
|
|
84
|
+
// that this view handles its own child layout, allowing ExoPlayer's controlbar
|
|
85
|
+
// to work correctly.
|
|
86
|
+
//
|
|
87
|
+
// This uses the ReactChoreographer pattern from react-native-screens:
|
|
88
|
+
// https://github.com/software-mansion/react-native-screens
|
|
89
|
+
// See also: https://github.com/facebook/react-native/issues/17968
|
|
97
90
|
// ==================================================================================
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
* React Native's layout system uses Yoga which processes layout asynchronously.
|
|
103
|
-
* Native Android views expect requestLayout() to trigger a synchronous layout pass.
|
|
104
|
-
* This override posts a layout request to ensure proper propagation through the
|
|
105
|
-
* view hierarchy while being frame-aligned via Choreographer for performance.
|
|
106
|
-
*
|
|
107
|
-
* Without this, the native player view may not update its layout when needed,
|
|
108
|
-
* causing issues with control positioning and visibility.
|
|
109
|
-
*/
|
|
110
|
-
override fun requestLayout() {
|
|
111
|
-
super.requestLayout()
|
|
92
|
+
private var isLayoutEnqueued = false
|
|
93
|
+
// Flag to prevent requestLayout during super constructor
|
|
94
|
+
private var constructorComplete = false
|
|
112
95
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
96
|
+
private val layoutCallback = Choreographer.FrameCallback {
|
|
97
|
+
isLayoutEnqueued = false
|
|
98
|
+
measure(
|
|
99
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
100
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
101
|
+
)
|
|
102
|
+
layout(left, top, right, bottom)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
init {
|
|
106
|
+
// Default to black background (playout data may override with bgColor)
|
|
107
|
+
setBackgroundColor(android.graphics.Color.BLACK)
|
|
108
|
+
// Remove any padding
|
|
109
|
+
setPadding(0, 0, 0, 0)
|
|
110
|
+
// Allow children to render slightly outside bounds (helps with margin artifacts)
|
|
111
|
+
clipToPadding = false
|
|
112
|
+
clipChildren = false
|
|
113
|
+
// Mark constructor complete - enables requestLayout Choreographer callback
|
|
114
|
+
constructorComplete = true
|
|
122
115
|
}
|
|
123
116
|
|
|
124
117
|
/**
|
|
125
|
-
* Override
|
|
118
|
+
* Override requestLayout to ensure layout propagates to children using ReactChoreographer.
|
|
126
119
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
120
|
+
* This is the proper React Native pattern for native views that need layout updates.
|
|
121
|
+
* Using NATIVE_ANIMATED_MODULE queue catches the current looper loop instead of
|
|
122
|
+
* enqueueing the update in the next loop, preventing one-frame delays.
|
|
130
123
|
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
124
|
+
* Combined with ViewGroupManager.needsCustomLayoutForChildren() = true, this ensures
|
|
125
|
+
* the native player view and controlbar layout correctly without margin artifacts.
|
|
133
126
|
*/
|
|
134
|
-
override fun
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
val childWidthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
|
|
146
|
-
val childHeightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
147
|
-
|
|
148
|
-
for (i in 0 until childCount) {
|
|
149
|
-
getChildAt(i)?.measure(childWidthSpec, childHeightSpec)
|
|
150
|
-
}
|
|
127
|
+
override fun requestLayout() {
|
|
128
|
+
super.requestLayout()
|
|
129
|
+
// Guard against calls during super constructor (before properties are initialized)
|
|
130
|
+
if (!constructorComplete) return
|
|
131
|
+
if (!isLayoutEnqueued) {
|
|
132
|
+
isLayoutEnqueued = true
|
|
133
|
+
ReactChoreographer.getInstance()
|
|
134
|
+
.postFrameCallback(
|
|
135
|
+
ReactChoreographer.CallbackType.NATIVE_ANIMATED_MODULE,
|
|
136
|
+
layoutCallback
|
|
137
|
+
)
|
|
151
138
|
}
|
|
152
139
|
}
|
|
153
140
|
|
|
154
141
|
/**
|
|
155
|
-
* Override onLayout to explicitly position child views.
|
|
142
|
+
* Override onLayout to explicitly position child views to fill the container.
|
|
156
143
|
*
|
|
157
144
|
* React Native's Yoga layout calculates positions but doesn't automatically apply
|
|
158
|
-
* them to native child views.
|
|
159
|
-
* container, which is necessary for the BBNativePlayerView to render correctly.
|
|
145
|
+
* them to native child views.
|
|
160
146
|
*/
|
|
161
147
|
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
|
162
148
|
super.onLayout(changed, left, top, right, bottom)
|
|
163
|
-
|
|
164
|
-
val width = right - left
|
|
165
|
-
val height = bottom - top
|
|
166
|
-
|
|
167
149
|
// Layout all children to fill the entire container
|
|
150
|
+
val w = right - left
|
|
151
|
+
val h = bottom - top
|
|
168
152
|
for (i in 0 until childCount) {
|
|
169
|
-
getChildAt(i)?.layout(0, 0,
|
|
153
|
+
getChildAt(i)?.layout(0, 0, w, h)
|
|
170
154
|
}
|
|
171
155
|
}
|
|
172
156
|
|
|
@@ -286,13 +270,99 @@ class BBPlayerView(private val reactContext: ThemedReactContext) : FrameLayout(r
|
|
|
286
270
|
debugLog("BBPlayerView") { "Creating BBNativePlayerView with factory method" }
|
|
287
271
|
playerView = BBNativePlayer.createPlayerView(currentActivity, jsonUrl, options)
|
|
288
272
|
playerView.delegate = this@BBPlayerView
|
|
273
|
+
// Remove any padding from playerView
|
|
274
|
+
playerView.setPadding(0, 0, 0, 0)
|
|
289
275
|
|
|
290
276
|
addView(playerView, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT))
|
|
291
277
|
|
|
278
|
+
// Set ExoPlayer's resize mode to FILL to prevent letterboxing margins
|
|
279
|
+
// This addresses top/bottom margin issues caused by AspectRatioFrameLayout
|
|
280
|
+
postDelayed({
|
|
281
|
+
setExoPlayerResizeMode(playerView, RESIZE_MODE_FILL)
|
|
282
|
+
}, 1000)
|
|
283
|
+
|
|
292
284
|
playerSetup = true
|
|
293
285
|
debugLog("BBPlayerView") { "Player setup complete with URL: $jsonUrl" }
|
|
294
286
|
}
|
|
295
287
|
|
|
288
|
+
companion object {
|
|
289
|
+
// AspectRatioFrameLayout resize mode constants
|
|
290
|
+
private const val RESIZE_MODE_FILL = 3
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Recursively find ExoPlayer's PlayerView or AspectRatioFrameLayout and set resize mode.
|
|
295
|
+
* Uses reflection since media3 classes aren't directly available in RN module classpath.
|
|
296
|
+
* This fixes top/bottom margin issues caused by AspectRatioFrameLayout letterboxing.
|
|
297
|
+
*/
|
|
298
|
+
private fun setExoPlayerResizeMode(view: View, resizeMode: Int): Boolean {
|
|
299
|
+
// Try Media3 AspectRatioFrameLayout via reflection
|
|
300
|
+
try {
|
|
301
|
+
val aspectRatioClass = Class.forName("androidx.media3.ui.AspectRatioFrameLayout")
|
|
302
|
+
if (aspectRatioClass.isInstance(view)) {
|
|
303
|
+
val method = aspectRatioClass.getMethod("setResizeMode", Int::class.javaPrimitiveType)
|
|
304
|
+
method.invoke(view, resizeMode)
|
|
305
|
+
return true
|
|
306
|
+
}
|
|
307
|
+
} catch (_: ClassNotFoundException) {
|
|
308
|
+
// Media3 not available
|
|
309
|
+
} catch (_: Exception) {
|
|
310
|
+
// Failed to set resize mode
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Try Media3 PlayerView via reflection
|
|
314
|
+
try {
|
|
315
|
+
val playerViewClass = Class.forName("androidx.media3.ui.PlayerView")
|
|
316
|
+
if (playerViewClass.isInstance(view)) {
|
|
317
|
+
val method = playerViewClass.getMethod("setResizeMode", Int::class.javaPrimitiveType)
|
|
318
|
+
method.invoke(view, resizeMode)
|
|
319
|
+
// Continue searching - there might be an AspectRatioFrameLayout inside
|
|
320
|
+
}
|
|
321
|
+
} catch (_: ClassNotFoundException) {
|
|
322
|
+
// Media3 PlayerView not available
|
|
323
|
+
} catch (_: Exception) {
|
|
324
|
+
// Failed to set resize mode
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Try legacy ExoPlayer2 AspectRatioFrameLayout via reflection
|
|
328
|
+
try {
|
|
329
|
+
val legacyAspectRatioClass = Class.forName("com.google.android.exoplayer2.ui.AspectRatioFrameLayout")
|
|
330
|
+
if (legacyAspectRatioClass.isInstance(view)) {
|
|
331
|
+
val method = legacyAspectRatioClass.getMethod("setResizeMode", Int::class.javaPrimitiveType)
|
|
332
|
+
method.invoke(view, resizeMode)
|
|
333
|
+
return true
|
|
334
|
+
}
|
|
335
|
+
} catch (_: ClassNotFoundException) {
|
|
336
|
+
// ExoPlayer2 not available
|
|
337
|
+
} catch (_: Exception) {
|
|
338
|
+
// Failed to set resize mode
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Try legacy ExoPlayer2 StyledPlayerView via reflection
|
|
342
|
+
try {
|
|
343
|
+
val styledPlayerViewClass = Class.forName("com.google.android.exoplayer2.ui.StyledPlayerView")
|
|
344
|
+
if (styledPlayerViewClass.isInstance(view)) {
|
|
345
|
+
val method = styledPlayerViewClass.getMethod("setResizeMode", Int::class.javaPrimitiveType)
|
|
346
|
+
method.invoke(view, resizeMode)
|
|
347
|
+
}
|
|
348
|
+
} catch (_: ClassNotFoundException) {
|
|
349
|
+
// StyledPlayerView not available
|
|
350
|
+
} catch (_: Exception) {
|
|
351
|
+
// Failed to set resize mode
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Recursively search children
|
|
355
|
+
if (view is ViewGroup) {
|
|
356
|
+
for (i in 0 until view.childCount) {
|
|
357
|
+
if (setExoPlayerResizeMode(view.getChildAt(i), resizeMode)) {
|
|
358
|
+
return true
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return false
|
|
364
|
+
}
|
|
365
|
+
|
|
296
366
|
/**
|
|
297
367
|
* Load content from a JSON URL into the existing player.
|
|
298
368
|
* Extracts IDs from the URL and uses the native SDK's loadWithXxxId methods.
|
|
@@ -2,11 +2,29 @@ package com.bluebillywig.bbplayer
|
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.ReadableArray
|
|
4
4
|
import com.facebook.react.bridge.ReadableMap
|
|
5
|
-
import com.facebook.react.uimanager.SimpleViewManager
|
|
6
5
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
7
|
import com.facebook.react.uimanager.annotations.ReactProp
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* ViewGroupManager for BBPlayerView.
|
|
11
|
+
*
|
|
12
|
+
* Uses ViewGroupManager instead of SimpleViewManager because BBPlayerView contains
|
|
13
|
+
* child views (BBNativePlayerView with ExoPlayer). The needsCustomLayoutForChildren()
|
|
14
|
+
* override tells React Native that this view handles its own child layout, which is
|
|
15
|
+
* necessary for ExoPlayer's controlbar to work correctly.
|
|
16
|
+
*
|
|
17
|
+
* See: https://github.com/facebook/react-native/issues/17968
|
|
18
|
+
* See: https://github.com/reactwg/react-native-new-architecture/discussions/52
|
|
19
|
+
*/
|
|
20
|
+
class BBPlayerViewManager : ViewGroupManager<BBPlayerView>() {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Tell React Native that this view handles its own child layout.
|
|
24
|
+
* This prevents Yoga from interfering with native child view layout,
|
|
25
|
+
* which is necessary for ExoPlayer's controlbar to work.
|
|
26
|
+
*/
|
|
27
|
+
override fun needsCustomLayoutForChildren(): Boolean = true
|
|
10
28
|
|
|
11
29
|
override fun getName(): String = REACT_CLASS
|
|
12
30
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.bluebillywig.bbplayer;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Placeholder for New Architecture (Fabric/TurboModules).
|
|
5
|
+
* The actual spec is generated by React Native codegen during build.
|
|
6
|
+
* This file allows the project to compile before codegen runs.
|
|
7
|
+
*
|
|
8
|
+
* During New Architecture builds, this file is replaced by the codegen-generated spec.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// The codegen-generated spec will be in:
|
|
12
|
+
// android/build/generated/source/codegen/java/com/bluebillywig/bbplayer/NativeBBPlayerModuleSpec.java
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
package com.bluebillywig.bbplayer;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise;
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Abstract base class for BBPlayerModule on Old Architecture (Paper).
|
|
9
|
+
* This is used when codegen is not available (Old Architecture builds).
|
|
10
|
+
* The actual implementation extends this class.
|
|
11
|
+
*/
|
|
12
|
+
public abstract class NativeBBPlayerModuleSpec extends ReactContextBaseJavaModule {
|
|
13
|
+
public NativeBBPlayerModuleSpec(ReactApplicationContext reactContext) {
|
|
14
|
+
super(reactContext);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Void methods - playback control
|
|
18
|
+
public abstract void play(int viewTag);
|
|
19
|
+
public abstract void pause(int viewTag);
|
|
20
|
+
public abstract void seek(int viewTag, double position);
|
|
21
|
+
public abstract void seekRelative(int viewTag, double offsetSeconds);
|
|
22
|
+
public abstract void setMuted(int viewTag, boolean muted);
|
|
23
|
+
public abstract void setVolume(int viewTag, double volume);
|
|
24
|
+
|
|
25
|
+
// Void methods - fullscreen control
|
|
26
|
+
public abstract void enterFullscreen(int viewTag);
|
|
27
|
+
public abstract void enterFullscreenLandscape(int viewTag);
|
|
28
|
+
public abstract void exitFullscreen(int viewTag);
|
|
29
|
+
|
|
30
|
+
// Void methods - layout control
|
|
31
|
+
public abstract void collapse(int viewTag);
|
|
32
|
+
public abstract void expand(int viewTag);
|
|
33
|
+
|
|
34
|
+
// Void methods - other commands
|
|
35
|
+
public abstract void autoPlayNextCancel(int viewTag);
|
|
36
|
+
public abstract void destroy(int viewTag);
|
|
37
|
+
public abstract void showCastPicker(int viewTag);
|
|
38
|
+
|
|
39
|
+
// Load methods
|
|
40
|
+
public abstract void loadWithClipId(int viewTag, String clipId, String initiator, boolean autoPlay, double seekTo);
|
|
41
|
+
public abstract void loadWithClipListId(int viewTag, String clipListId, String initiator, boolean autoPlay, double seekTo);
|
|
42
|
+
public abstract void loadWithProjectId(int viewTag, String projectId, String initiator, boolean autoPlay, double seekTo);
|
|
43
|
+
public abstract void loadWithClipJson(int viewTag, String clipJson, String initiator, boolean autoPlay, double seekTo);
|
|
44
|
+
public abstract void loadWithClipListJson(int viewTag, String clipListJson, String initiator, boolean autoPlay, double seekTo);
|
|
45
|
+
public abstract void loadWithProjectJson(int viewTag, String projectJson, String initiator, boolean autoPlay, double seekTo);
|
|
46
|
+
public abstract void loadWithJsonUrl(int viewTag, String jsonUrl, boolean autoPlay);
|
|
47
|
+
|
|
48
|
+
// Promise getters
|
|
49
|
+
public abstract void getDuration(int viewTag, Promise promise);
|
|
50
|
+
public abstract void getCurrentTime(int viewTag, Promise promise);
|
|
51
|
+
public abstract void getMuted(int viewTag, Promise promise);
|
|
52
|
+
public abstract void getVolume(int viewTag, Promise promise);
|
|
53
|
+
public abstract void getPhase(int viewTag, Promise promise);
|
|
54
|
+
public abstract void getState(int viewTag, Promise promise);
|
|
55
|
+
public abstract void getMode(int viewTag, Promise promise);
|
|
56
|
+
public abstract void getClipData(int viewTag, Promise promise);
|
|
57
|
+
public abstract void getProjectData(int viewTag, Promise promise);
|
|
58
|
+
public abstract void getPlayoutData(int viewTag, Promise promise);
|
|
59
|
+
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
#import <React/RCTBridgeModule.h>
|
|
2
2
|
|
|
3
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
|
+
#import <BBPlayerModuleSpec/BBPlayerModuleSpec.h>
|
|
5
|
+
#endif
|
|
6
|
+
|
|
3
7
|
@interface RCT_EXTERN_MODULE(BBPlayerModule, NSObject)
|
|
4
8
|
|
|
5
9
|
// Playback control
|
|
@@ -45,4 +49,12 @@ RCT_EXTERN_METHOD(getClipData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseRe
|
|
|
45
49
|
RCT_EXTERN_METHOD(getProjectData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
46
50
|
RCT_EXTERN_METHOD(getPlayoutData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
47
51
|
|
|
52
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
53
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
54
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
55
|
+
{
|
|
56
|
+
return std::make_shared<facebook::react::NativeBBPlayerModuleSpecJSI>(params);
|
|
57
|
+
}
|
|
58
|
+
#endif
|
|
59
|
+
|
|
48
60
|
@end
|
|
@@ -5,9 +5,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createCommands = createCommands;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// Try TurboModule first, fallback to legacy NativeModules
|
|
9
|
+
let BBPlayerModule = null;
|
|
10
|
+
try {
|
|
11
|
+
// Try to use TurboModule (New Architecture)
|
|
12
|
+
BBPlayerModule = require("./specs/NativeBBPlayerModule").default;
|
|
13
|
+
} catch {
|
|
14
|
+
// Fallback to legacy NativeModules (Old Architecture)
|
|
15
|
+
BBPlayerModule = _reactNative.NativeModules.BBPlayerModule;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Final fallback if both fail
|
|
19
|
+
if (!BBPlayerModule) {
|
|
20
|
+
BBPlayerModule = _reactNative.NativeModules.BBPlayerModule;
|
|
21
|
+
}
|
|
11
22
|
|
|
12
23
|
/**
|
|
13
24
|
* Get the view tag (node handle) for a ref
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","BBPlayerModule","NativeModules","getViewTag","viewRef","node","current","console","warn","nodeHandle","findNodeHandle","createCommands","play","tag","pause","seek","position","seekRelative","offsetSeconds","setMuted","muted","setVolume","volume","enterFullscreen","enterFullscreenLandscape","exitFullscreen","collapse","expand","autoPlayNextCancel","destroy","showCastPicker","loadClip","clipId","options","loadWithClipId","initiator","playout","autoPlay","seekTo","loadWithClipListId","clipListId","loadWithProjectId","projectId","loadWithClipJson","clipJson","loadWithClipListJson","clipListJson","loadWithProjectJson","projectJson","loadWithJsonUrl","jsonUrl","getDuration","getCurrentTime","getMuted","getVolume","getPhase","getState","getMode","getClipData","getProjectData","getPlayoutData","getPlayerState","state","phase","mode","currentTime","duration","clipData","projectData","playoutData","Promise","all","clip","project","error"],"sourceRoot":"../../src","sources":["NativeCommands.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAKA,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","BBPlayerModule","default","NativeModules","getViewTag","viewRef","node","current","console","warn","nodeHandle","findNodeHandle","createCommands","play","tag","pause","seek","position","seekRelative","offsetSeconds","setMuted","muted","setVolume","volume","enterFullscreen","enterFullscreenLandscape","exitFullscreen","collapse","expand","autoPlayNextCancel","destroy","showCastPicker","loadClip","clipId","options","loadWithClipId","initiator","playout","autoPlay","seekTo","loadWithClipListId","clipListId","loadWithProjectId","projectId","loadWithClipJson","clipJson","loadWithClipListJson","clipListJson","loadWithProjectJson","projectJson","loadWithJsonUrl","jsonUrl","getDuration","getCurrentTime","getMuted","getVolume","getPhase","getState","getMode","getClipData","getProjectData","getPlayoutData","getPlayerState","state","phase","mode","currentTime","duration","clipData","projectData","playoutData","Promise","all","clip","project","error"],"sourceRoot":"../../src","sources":["NativeCommands.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing("BBPlayerModule");
|
|
9
|
+
//# sourceMappingURL=NativeBBPlayerModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeBBPlayerModule.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAmFpCC,gCAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { NativeModules, findNodeHandle } from "react-native";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
// Try TurboModule first, fallback to legacy NativeModules
|
|
5
|
+
let BBPlayerModule = null;
|
|
6
|
+
try {
|
|
7
|
+
// Try to use TurboModule (New Architecture)
|
|
8
|
+
BBPlayerModule = require("./specs/NativeBBPlayerModule").default;
|
|
9
|
+
} catch {
|
|
10
|
+
// Fallback to legacy NativeModules (Old Architecture)
|
|
11
|
+
BBPlayerModule = NativeModules.BBPlayerModule;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Final fallback if both fail
|
|
15
|
+
if (!BBPlayerModule) {
|
|
16
|
+
BBPlayerModule = NativeModules.BBPlayerModule;
|
|
17
|
+
}
|
|
7
18
|
|
|
8
19
|
/**
|
|
9
20
|
* Get the view tag (node handle) for a ref
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","findNodeHandle","BBPlayerModule","getViewTag","viewRef","node","current","console","warn","nodeHandle","createCommands","play","tag","pause","seek","position","seekRelative","offsetSeconds","setMuted","muted","setVolume","volume","enterFullscreen","enterFullscreenLandscape","exitFullscreen","collapse","expand","autoPlayNextCancel","destroy","showCastPicker","loadClip","clipId","options","loadWithClipId","initiator","playout","autoPlay","seekTo","loadWithClipListId","clipListId","loadWithProjectId","projectId","loadWithClipJson","clipJson","loadWithClipListJson","clipListJson","loadWithProjectJson","projectJson","loadWithJsonUrl","jsonUrl","getDuration","getCurrentTime","getMuted","getVolume","getPhase","getState","getMode","getClipData","getProjectData","getPlayoutData","getPlayerState","state","phase","mode","currentTime","duration","clipData","projectData","playoutData","Promise","all","clip","project","error"],"sourceRoot":"../../src","sources":["NativeCommands.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,cAAc,QAAQ,cAAc;AAK5D,
|
|
1
|
+
{"version":3,"names":["NativeModules","findNodeHandle","BBPlayerModule","require","default","getViewTag","viewRef","node","current","console","warn","nodeHandle","createCommands","play","tag","pause","seek","position","seekRelative","offsetSeconds","setMuted","muted","setVolume","volume","enterFullscreen","enterFullscreenLandscape","exitFullscreen","collapse","expand","autoPlayNextCancel","destroy","showCastPicker","loadClip","clipId","options","loadWithClipId","initiator","playout","autoPlay","seekTo","loadWithClipListId","clipListId","loadWithProjectId","projectId","loadWithClipJson","clipJson","loadWithClipListJson","clipListJson","loadWithProjectJson","projectJson","loadWithJsonUrl","jsonUrl","getDuration","getCurrentTime","getMuted","getVolume","getPhase","getState","getMode","getClipData","getProjectData","getPlayoutData","getPlayerState","state","phase","mode","currentTime","duration","clipData","projectData","playoutData","Promise","all","clip","project","error"],"sourceRoot":"../../src","sources":["NativeCommands.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeBBPlayerModule.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAmFlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeCommands.d.ts","sourceRoot":"","sources":["../../../src/NativeCommands.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeCommands.d.ts","sourceRoot":"","sources":["../../../src/NativeCommands.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuCvE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;;qBAUvC,MAAM;kCAIO,MAAM;sBAIlB,OAAO;wBAIL,MAAM;;;;;;;;;IAqC1B;;;OAGG;uBACgB,MAAM,YAAY,eAAe;6BAgB1C,MAAM,cACF,MAAM,aACP,OAAO,WACT,MAAM;qCAcH,MAAM,cACN,MAAM,aACP,OAAO,WACT,MAAM;mCAcJ,MAAM,cACL,MAAM,aACP,OAAO,WACT,MAAM;iCAcL,MAAM,cACJ,MAAM,aACP,OAAO,WACT,MAAM;yCAcD,MAAM,cACR,MAAM,aACP,OAAO,WACT,MAAM;uCAcF,MAAM,cACP,MAAM,aACP,OAAO,WACT,MAAM;+BAaU,MAAM,aAAa,OAAO;uBAU9B,QAAQ,MAAM,GAAG,IAAI,CAAC;0BAOnB,QAAQ,MAAM,GAAG,IAAI,CAAC;oBAO5B,QAAQ,OAAO,GAAG,IAAI,CAAC;qBAOtB,QAAQ,MAAM,GAAG,IAAI,CAAC;oBAOvB,QAAQ,MAAM,GAAG,IAAI,CAAC;oBAOtB,QAAQ,MAAM,GAAG,IAAI,CAAC;mBAOvB,QAAQ,MAAM,GAAG,IAAI,CAAC;uBAOlB,QAAQ;QAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;0BAOiB,QAAQ;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC;0BAOiB,QAAQ;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC;IAQT;;;OAGG;0BACuB,QAAQ,aAAa,GAAG,IAAI,CAAC;EAkD1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { TurboModule } from "react-native";
|
|
2
|
+
export interface Spec extends TurboModule {
|
|
3
|
+
play(viewTag: number): void;
|
|
4
|
+
pause(viewTag: number): void;
|
|
5
|
+
seek(viewTag: number, position: number): void;
|
|
6
|
+
seekRelative(viewTag: number, offsetSeconds: number): void;
|
|
7
|
+
setMuted(viewTag: number, muted: boolean): void;
|
|
8
|
+
setVolume(viewTag: number, volume: number): void;
|
|
9
|
+
enterFullscreen(viewTag: number): void;
|
|
10
|
+
enterFullscreenLandscape(viewTag: number): void;
|
|
11
|
+
exitFullscreen(viewTag: number): void;
|
|
12
|
+
collapse(viewTag: number): void;
|
|
13
|
+
expand(viewTag: number): void;
|
|
14
|
+
autoPlayNextCancel(viewTag: number): void;
|
|
15
|
+
destroy(viewTag: number): void;
|
|
16
|
+
showCastPicker(viewTag: number): void;
|
|
17
|
+
loadWithClipId(viewTag: number, clipId: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
18
|
+
loadWithClipListId(viewTag: number, clipListId: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
19
|
+
loadWithProjectId(viewTag: number, projectId: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
20
|
+
loadWithClipJson(viewTag: number, clipJson: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
21
|
+
loadWithClipListJson(viewTag: number, clipListJson: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
22
|
+
loadWithProjectJson(viewTag: number, projectJson: string, initiator: string | null, autoPlay: boolean, seekTo: number): void;
|
|
23
|
+
loadWithJsonUrl(viewTag: number, jsonUrl: string, autoPlay: boolean): void;
|
|
24
|
+
getDuration(viewTag: number): Promise<number | null>;
|
|
25
|
+
getCurrentTime(viewTag: number): Promise<number | null>;
|
|
26
|
+
getMuted(viewTag: number): Promise<boolean | null>;
|
|
27
|
+
getVolume(viewTag: number): Promise<number | null>;
|
|
28
|
+
getPhase(viewTag: number): Promise<string | null>;
|
|
29
|
+
getState(viewTag: number): Promise<string | null>;
|
|
30
|
+
getMode(viewTag: number): Promise<string | null>;
|
|
31
|
+
getClipData(viewTag: number): Promise<Object | null>;
|
|
32
|
+
getProjectData(viewTag: number): Promise<Object | null>;
|
|
33
|
+
getPlayoutData(viewTag: number): Promise<Object | null>;
|
|
34
|
+
}
|
|
35
|
+
declare const _default: Spec;
|
|
36
|
+
export default _default;
|
|
37
|
+
//# sourceMappingURL=NativeBBPlayerModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeBBPlayerModule.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeBBPlayerModule.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bluebillywig/react-native-bb-player",
|
|
3
|
-
"version": "8.42.
|
|
3
|
+
"version": "8.42.10",
|
|
4
4
|
"description": "Blue Billywig Native Video Player for React Native - iOS AVPlayer and Android ExoPlayer integration",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -101,5 +101,13 @@
|
|
|
101
101
|
}
|
|
102
102
|
]
|
|
103
103
|
]
|
|
104
|
+
},
|
|
105
|
+
"codegenConfig": {
|
|
106
|
+
"name": "BBPlayerModuleSpec",
|
|
107
|
+
"type": "modules",
|
|
108
|
+
"jsSrcsDir": "./src/specs",
|
|
109
|
+
"android": {
|
|
110
|
+
"javaPackageName": "com.bluebillywig.bbplayer"
|
|
111
|
+
}
|
|
104
112
|
}
|
|
105
113
|
}
|
|
@@ -2,6 +2,9 @@ require 'json'
|
|
|
2
2
|
|
|
3
3
|
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
4
|
|
|
5
|
+
# Check if New Architecture is enabled
|
|
6
|
+
new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
|
|
7
|
+
|
|
5
8
|
Pod::Spec.new do |s|
|
|
6
9
|
s.name = 'react-native-bb-player'
|
|
7
10
|
s.version = package['version']
|
|
@@ -16,14 +19,31 @@ Pod::Spec.new do |s|
|
|
|
16
19
|
s.static_framework = true
|
|
17
20
|
|
|
18
21
|
s.dependency 'React-Core'
|
|
19
|
-
s.dependency 'BlueBillywigNativePlayerKit-iOS', '~> 8.
|
|
20
|
-
s.dependency 'BlueBillywigNativePlayerKit-iOS/GoogleCastSDK', '~> 8.
|
|
22
|
+
s.dependency 'BlueBillywigNativePlayerKit-iOS', '~> 8.42.0'
|
|
23
|
+
s.dependency 'BlueBillywigNativePlayerKit-iOS/GoogleCastSDK', '~> 8.42.0'
|
|
24
|
+
|
|
25
|
+
# TurboModule dependencies for New Architecture
|
|
26
|
+
if new_arch_enabled
|
|
27
|
+
s.dependency 'React-Codegen'
|
|
28
|
+
s.dependency 'RCT-Folly'
|
|
29
|
+
s.dependency 'RCTRequired'
|
|
30
|
+
s.dependency 'RCTTypeSafety'
|
|
31
|
+
s.dependency 'ReactCommon/turbomodule/core'
|
|
32
|
+
end
|
|
21
33
|
|
|
22
34
|
# Swift/Objective-C compatibility
|
|
23
|
-
|
|
35
|
+
xcconfig = {
|
|
24
36
|
'DEFINES_MODULE' => 'YES',
|
|
25
37
|
'SWIFT_COMPILATION_MODE' => 'wholemodule'
|
|
26
38
|
}
|
|
27
39
|
|
|
40
|
+
# Add compiler flag for New Architecture
|
|
41
|
+
if new_arch_enabled
|
|
42
|
+
xcconfig['OTHER_CPLUSPLUSFLAGS'] = '$(inherited) -DRCT_NEW_ARCH_ENABLED'
|
|
43
|
+
xcconfig['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++17'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
s.pod_target_xcconfig = xcconfig
|
|
47
|
+
|
|
28
48
|
s.source_files = "ios/**/*.{h,m,mm,swift,hpp,cpp}"
|
|
29
49
|
end
|
package/src/NativeCommands.ts
CHANGED
|
@@ -3,7 +3,22 @@ import { NativeModules, findNodeHandle } from "react-native";
|
|
|
3
3
|
import type { LoadClipOptions, BBPlayerState } from "./BBPlayer.types";
|
|
4
4
|
import type { State, Phase } from "./types";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// Try TurboModule first, fallback to legacy NativeModules
|
|
7
|
+
let BBPlayerModule: typeof import("./specs/NativeBBPlayerModule").default | null =
|
|
8
|
+
null;
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
// Try to use TurboModule (New Architecture)
|
|
12
|
+
BBPlayerModule = require("./specs/NativeBBPlayerModule").default;
|
|
13
|
+
} catch {
|
|
14
|
+
// Fallback to legacy NativeModules (Old Architecture)
|
|
15
|
+
BBPlayerModule = NativeModules.BBPlayerModule;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Final fallback if both fail
|
|
19
|
+
if (!BBPlayerModule) {
|
|
20
|
+
BBPlayerModule = NativeModules.BBPlayerModule;
|
|
21
|
+
}
|
|
7
22
|
|
|
8
23
|
/**
|
|
9
24
|
* Get the view tag (node handle) for a ref
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { TurboModule } from "react-native";
|
|
2
|
+
import { TurboModuleRegistry } from "react-native";
|
|
3
|
+
|
|
4
|
+
export interface Spec extends TurboModule {
|
|
5
|
+
// Void methods - playback control
|
|
6
|
+
play(viewTag: number): void;
|
|
7
|
+
pause(viewTag: number): void;
|
|
8
|
+
seek(viewTag: number, position: number): void;
|
|
9
|
+
seekRelative(viewTag: number, offsetSeconds: number): void;
|
|
10
|
+
setMuted(viewTag: number, muted: boolean): void;
|
|
11
|
+
setVolume(viewTag: number, volume: number): void;
|
|
12
|
+
|
|
13
|
+
// Void methods - fullscreen control
|
|
14
|
+
enterFullscreen(viewTag: number): void;
|
|
15
|
+
enterFullscreenLandscape(viewTag: number): void;
|
|
16
|
+
exitFullscreen(viewTag: number): void;
|
|
17
|
+
|
|
18
|
+
// Void methods - layout control
|
|
19
|
+
collapse(viewTag: number): void;
|
|
20
|
+
expand(viewTag: number): void;
|
|
21
|
+
|
|
22
|
+
// Void methods - other commands
|
|
23
|
+
autoPlayNextCancel(viewTag: number): void;
|
|
24
|
+
destroy(viewTag: number): void;
|
|
25
|
+
showCastPicker(viewTag: number): void;
|
|
26
|
+
|
|
27
|
+
// Load methods
|
|
28
|
+
loadWithClipId(
|
|
29
|
+
viewTag: number,
|
|
30
|
+
clipId: string,
|
|
31
|
+
initiator: string | null,
|
|
32
|
+
autoPlay: boolean,
|
|
33
|
+
seekTo: number
|
|
34
|
+
): void;
|
|
35
|
+
loadWithClipListId(
|
|
36
|
+
viewTag: number,
|
|
37
|
+
clipListId: string,
|
|
38
|
+
initiator: string | null,
|
|
39
|
+
autoPlay: boolean,
|
|
40
|
+
seekTo: number
|
|
41
|
+
): void;
|
|
42
|
+
loadWithProjectId(
|
|
43
|
+
viewTag: number,
|
|
44
|
+
projectId: string,
|
|
45
|
+
initiator: string | null,
|
|
46
|
+
autoPlay: boolean,
|
|
47
|
+
seekTo: number
|
|
48
|
+
): void;
|
|
49
|
+
loadWithClipJson(
|
|
50
|
+
viewTag: number,
|
|
51
|
+
clipJson: string,
|
|
52
|
+
initiator: string | null,
|
|
53
|
+
autoPlay: boolean,
|
|
54
|
+
seekTo: number
|
|
55
|
+
): void;
|
|
56
|
+
loadWithClipListJson(
|
|
57
|
+
viewTag: number,
|
|
58
|
+
clipListJson: string,
|
|
59
|
+
initiator: string | null,
|
|
60
|
+
autoPlay: boolean,
|
|
61
|
+
seekTo: number
|
|
62
|
+
): void;
|
|
63
|
+
loadWithProjectJson(
|
|
64
|
+
viewTag: number,
|
|
65
|
+
projectJson: string,
|
|
66
|
+
initiator: string | null,
|
|
67
|
+
autoPlay: boolean,
|
|
68
|
+
seekTo: number
|
|
69
|
+
): void;
|
|
70
|
+
loadWithJsonUrl(viewTag: number, jsonUrl: string, autoPlay: boolean): void;
|
|
71
|
+
|
|
72
|
+
// Promise getters
|
|
73
|
+
getDuration(viewTag: number): Promise<number | null>;
|
|
74
|
+
getCurrentTime(viewTag: number): Promise<number | null>;
|
|
75
|
+
getMuted(viewTag: number): Promise<boolean | null>;
|
|
76
|
+
getVolume(viewTag: number): Promise<number | null>;
|
|
77
|
+
getPhase(viewTag: number): Promise<string | null>;
|
|
78
|
+
getState(viewTag: number): Promise<string | null>;
|
|
79
|
+
getMode(viewTag: number): Promise<string | null>;
|
|
80
|
+
getClipData(viewTag: number): Promise<Object | null>;
|
|
81
|
+
getProjectData(viewTag: number): Promise<Object | null>;
|
|
82
|
+
getPlayoutData(viewTag: number): Promise<Object | null>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export default TurboModuleRegistry.getEnforcing<Spec>("BBPlayerModule");
|