@bluebillywig/react-native-bb-player 8.45.22 → 8.46.0

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 (144) hide show
  1. package/README.md +2 -2
  2. package/android/build.gradle +1 -1
  3. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/bbnativeplayersdk-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  4. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/bbnativeplayersdk-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  5. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/bbnativeplayersdk-0.0.11.8-SNAPSHOT.aar +0 -0
  6. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/bbnativeplayersdk-0.0.11.8-SNAPSHOT.module +137 -0
  7. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/bbnativeplayersdk-0.0.11.8-SNAPSHOT.pom +35 -0
  8. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +41 -0
  9. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk/maven-metadata-local.xml +12 -0
  10. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/bbnativeplayersdk-compose-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  11. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/bbnativeplayersdk-compose-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  12. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/bbnativeplayersdk-compose-0.0.11.8-SNAPSHOT.aar +0 -0
  13. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/bbnativeplayersdk-compose-0.0.11.8-SNAPSHOT.module +167 -0
  14. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/bbnativeplayersdk-compose-0.0.11.8-SNAPSHOT.pom +61 -0
  15. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +41 -0
  16. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-compose/maven-metadata-local.xml +12 -0
  17. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/bbnativeplayersdk-core-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  18. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/bbnativeplayersdk-core-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  19. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/bbnativeplayersdk-core-0.0.11.8-SNAPSHOT.aar +0 -0
  20. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/bbnativeplayersdk-core-0.0.11.8-SNAPSHOT.module +264 -0
  21. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/bbnativeplayersdk-core-0.0.11.8-SNAPSHOT.pom +149 -0
  22. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +41 -0
  23. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeplayersdk-core/maven-metadata-local.xml +12 -0
  24. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  25. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT-kotlin-tooling-metadata.json +28 -0
  26. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  27. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT.jar +0 -0
  28. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT.module +159 -0
  29. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/bbnativeshared-0.0.11.8-SNAPSHOT.pom +14 -0
  30. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +47 -0
  31. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared/maven-metadata-local.xml +12 -0
  32. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/bbnativeshared-android-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  33. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/bbnativeshared-android-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  34. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/bbnativeshared-android-0.0.11.8-SNAPSHOT.aar +0 -0
  35. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/bbnativeshared-android-0.0.11.8-SNAPSHOT.module +329 -0
  36. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/bbnativeshared-android-0.0.11.8-SNAPSHOT.pom +245 -0
  37. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +41 -0
  38. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android/maven-metadata-local.xml +12 -0
  39. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/bbnativeshared-android-debug-0.0.11.8-SNAPSHOT-javadoc.jar +0 -0
  40. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/bbnativeshared-android-debug-0.0.11.8-SNAPSHOT-sources.jar +0 -0
  41. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/bbnativeshared-android-debug-0.0.11.8-SNAPSHOT.aar +0 -0
  42. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/bbnativeshared-android-debug-0.0.11.8-SNAPSHOT.module +332 -0
  43. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/bbnativeshared-android-debug-0.0.11.8-SNAPSHOT.pom +245 -0
  44. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/0.0.11.8-SNAPSHOT/maven-metadata-local.xml +41 -0
  45. package/android/repo/com/bluebillywig/bbnativeplayersdk/bbnativeshared-android-debug/maven-metadata-local.xml +12 -0
  46. package/android/src/main/java/com/bluebillywig/bbplayer/BBCastButtonViewManager.kt +40 -0
  47. package/android/src/main/java/com/bluebillywig/bbplayer/BBCastMiniControlsViewManager.kt +79 -0
  48. package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerModule.kt +41 -0
  49. package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerPackage.kt +3 -1
  50. package/android/src/main/java/com/bluebillywig/bbplayer/BBPlayerView.kt +9 -2
  51. package/android/src/paper/java/com/bluebillywig/bbplayer/NativeBBPlayerModuleSpec.java +6 -0
  52. package/ios/BBCastButtonView.swift +30 -0
  53. package/ios/BBCastButtonViewManager.m +7 -0
  54. package/ios/BBCastButtonViewManager.swift +12 -0
  55. package/ios/BBCastMiniControlsView.swift +27 -0
  56. package/ios/BBCastMiniControlsViewManager.m +5 -0
  57. package/ios/BBCastMiniControlsViewManager.swift +12 -0
  58. package/ios/BBPlayerModule.mm +4 -0
  59. package/ios/BBPlayerModule.swift +27 -0
  60. package/ios/BBPlayerView.swift +5 -2
  61. package/ios/Frameworks/BBNativePlayerKit.xcframework/Info.plist +5 -5
  62. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Assets.car +0 -0
  63. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/BBNativePlayerKit +0 -0
  64. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Headers/BBNativePlayerKit-Swift.h +5 -4
  65. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Headers/BBNativePlayerKit.h +1 -1
  66. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Info.plist +0 -0
  67. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios.abi.json +1218 -903
  68. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios.private.swiftinterface +229 -222
  69. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  70. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios.swiftinterface +229 -222
  71. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Assets.car +0 -0
  72. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/BBNativePlayerKit +0 -0
  73. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Headers/BBNativePlayerKit-Swift.h +10 -8
  74. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Headers/BBNativePlayerKit.h +1 -1
  75. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Info.plist +0 -0
  76. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios-simulator.abi.json +1218 -903
  77. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +229 -222
  78. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  79. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +229 -222
  80. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +1218 -903
  81. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +229 -222
  82. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  83. package/ios/Frameworks/BBNativePlayerKit.xcframework/ios-arm64_x86_64-simulator/BBNativePlayerKit.framework/Modules/BBNativePlayerKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +229 -222
  84. package/ios/Frameworks/bbnativeshared.xcframework/Info.plist +5 -5
  85. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64/bbnativeshared.framework/Headers/bbnativeshared.h +19 -2
  86. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64/bbnativeshared.framework/bbnativeshared +0 -0
  87. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64/dSYMs/bbnativeshared.framework.dSYM/Contents/Resources/DWARF/bbnativeshared +0 -0
  88. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64/dSYMs/bbnativeshared.framework.dSYM/Contents/Resources/Relocations/aarch64/bbnativeshared.yml +15059 -13518
  89. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64_x86_64-simulator/bbnativeshared.framework/Headers/bbnativeshared.h +19 -2
  90. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64_x86_64-simulator/bbnativeshared.framework/bbnativeshared +0 -0
  91. package/ios/Frameworks/bbnativeshared.xcframework/ios-arm64_x86_64-simulator/dSYMs/bbnativeshared.framework.dSYM/Contents/Resources/DWARF/bbnativeshared +0 -0
  92. package/lib/commonjs/BBCastButton.js +32 -0
  93. package/lib/commonjs/BBCastButton.js.map +1 -0
  94. package/lib/commonjs/BBCastMiniControls.js +32 -0
  95. package/lib/commonjs/BBCastMiniControls.js.map +1 -0
  96. package/lib/commonjs/BBModalPlayer.js +6 -0
  97. package/lib/commonjs/BBModalPlayer.js.map +1 -1
  98. package/lib/commonjs/BBOutstreamView.js +5 -1
  99. package/lib/commonjs/BBOutstreamView.js.map +1 -1
  100. package/lib/commonjs/NativeCommands.js +26 -0
  101. package/lib/commonjs/NativeCommands.js.map +1 -1
  102. package/lib/commonjs/index.js +45 -0
  103. package/lib/commonjs/index.js.map +1 -1
  104. package/lib/commonjs/specs/NativeBBPlayerModule.js.map +1 -1
  105. package/lib/module/BBCastButton.js +27 -0
  106. package/lib/module/BBCastButton.js.map +1 -0
  107. package/lib/module/BBCastMiniControls.js +27 -0
  108. package/lib/module/BBCastMiniControls.js.map +1 -0
  109. package/lib/module/BBModalPlayer.js +6 -0
  110. package/lib/module/BBModalPlayer.js.map +1 -1
  111. package/lib/module/BBOutstreamView.js +5 -1
  112. package/lib/module/BBOutstreamView.js.map +1 -1
  113. package/lib/module/NativeCommands.js +26 -0
  114. package/lib/module/NativeCommands.js.map +1 -1
  115. package/lib/module/index.js +9 -2
  116. package/lib/module/index.js.map +1 -1
  117. package/lib/module/specs/NativeBBPlayerModule.js.map +1 -1
  118. package/lib/typescript/src/BBCastButton.d.ts +24 -0
  119. package/lib/typescript/src/BBCastButton.d.ts.map +1 -0
  120. package/lib/typescript/src/BBCastMiniControls.d.ts +19 -0
  121. package/lib/typescript/src/BBCastMiniControls.d.ts.map +1 -0
  122. package/lib/typescript/src/BBModalPlayer.d.ts +15 -1
  123. package/lib/typescript/src/BBModalPlayer.d.ts.map +1 -1
  124. package/lib/typescript/src/BBOutstreamView.d.ts.map +1 -1
  125. package/lib/typescript/src/BBPlayer.types.d.ts +9 -1
  126. package/lib/typescript/src/BBPlayer.types.d.ts.map +1 -1
  127. package/lib/typescript/src/NativeCommands.d.ts +4 -0
  128. package/lib/typescript/src/NativeCommands.d.ts.map +1 -1
  129. package/lib/typescript/src/index.d.ts +9 -2
  130. package/lib/typescript/src/index.d.ts.map +1 -1
  131. package/lib/typescript/src/specs/NativeBBPlayerModule.d.ts +4 -0
  132. package/lib/typescript/src/specs/NativeBBPlayerModule.d.ts.map +1 -1
  133. package/lib/typescript/src/types.d.ts +1 -1
  134. package/lib/typescript/src/types.d.ts.map +1 -1
  135. package/package.json +1 -1
  136. package/src/BBCastButton.tsx +32 -0
  137. package/src/BBCastMiniControls.tsx +27 -0
  138. package/src/BBModalPlayer.ts +16 -1
  139. package/src/BBOutstreamView.tsx +5 -1
  140. package/src/BBPlayer.types.ts +9 -1
  141. package/src/NativeCommands.ts +27 -0
  142. package/src/index.ts +10 -3
  143. package/src/specs/NativeBBPlayerModule.ts +6 -0
  144. package/src/types.ts +1 -1
@@ -0,0 +1,40 @@
1
+ package com.bluebillywig.bbplayer
2
+
3
+ import android.widget.FrameLayout
4
+ import androidx.mediarouter.app.MediaRouteButton
5
+ import com.facebook.react.uimanager.SimpleViewManager
6
+ import com.facebook.react.uimanager.ThemedReactContext
7
+ import com.facebook.react.uimanager.annotations.ReactProp
8
+
9
+ class BBCastButtonViewManager : SimpleViewManager<FrameLayout>() {
10
+
11
+ override fun getName(): String = "BBCastButtonView"
12
+
13
+ override fun createViewInstance(reactContext: ThemedReactContext): FrameLayout {
14
+ val container = FrameLayout(reactContext)
15
+ val castButton = MediaRouteButton(reactContext)
16
+
17
+ try {
18
+ val castButtonFactoryClass = Class.forName("com.google.android.gms.cast.framework.CastButtonFactory")
19
+ castButtonFactoryClass.getMethod("setUpMediaRouteButton", android.content.Context::class.java, MediaRouteButton::class.java)
20
+ .invoke(null, reactContext, castButton)
21
+ } catch (e: Exception) {
22
+ android.util.Log.w("BBCastButton", "Cast button unavailable: ${e.message}")
23
+ }
24
+
25
+ container.addView(
26
+ castButton,
27
+ FrameLayout.LayoutParams(
28
+ FrameLayout.LayoutParams.MATCH_PARENT,
29
+ FrameLayout.LayoutParams.MATCH_PARENT
30
+ )
31
+ )
32
+ return container
33
+ }
34
+
35
+ @ReactProp(name = "tintColor", customType = "Color")
36
+ fun setTintColor(view: FrameLayout, color: Int?) {
37
+ // MediaRouteButton tint is controlled via the Cast SDK theme.
38
+ // The tintColor prop is primarily effective on iOS (GCKUICastButton).
39
+ }
40
+ }
@@ -0,0 +1,79 @@
1
+ package com.bluebillywig.bbplayer
2
+
3
+ import android.util.Log
4
+ import android.view.View
5
+ import android.widget.FrameLayout
6
+ import androidx.fragment.app.FragmentActivity
7
+ import com.facebook.react.uimanager.SimpleViewManager
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+
10
+ class BBCastMiniControlsViewManager : SimpleViewManager<FrameLayout>() {
11
+
12
+ override fun getName(): String = "BBCastMiniControlsView"
13
+
14
+ override fun createViewInstance(reactContext: ThemedReactContext): FrameLayout {
15
+ val container = FrameLayout(reactContext)
16
+ container.id = View.generateViewId()
17
+
18
+ container.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
19
+ private var attempted = false
20
+
21
+ override fun onViewAttachedToWindow(v: View) {
22
+ if (attempted) return
23
+ attempted = true
24
+ attachMiniController(reactContext, container)
25
+ }
26
+
27
+ override fun onViewDetachedFromWindow(v: View) {}
28
+ })
29
+
30
+ return container
31
+ }
32
+
33
+ private fun attachMiniController(reactContext: ThemedReactContext, container: FrameLayout) {
34
+ try {
35
+ val activity = reactContext.currentActivity as? FragmentActivity ?: return
36
+
37
+ // MiniControllerFragment.onCreateView reads button actions from
38
+ // CastContext → CastMediaOptions → NotificationOptions → actions array.
39
+ // When CastContext is not properly initialized, this array is null,
40
+ // causing an NPE inside onCreateView that we cannot catch.
41
+ // Verify this chain is non-null before creating the fragment.
42
+ val castContextClass = Class.forName("com.google.android.gms.cast.framework.CastContext")
43
+ val castContext = castContextClass.getMethod("getSharedInstance", android.content.Context::class.java)
44
+ .invoke(null, reactContext)
45
+
46
+ val mediaOptions = castContextClass.getMethod("getCastMediaOptions").invoke(castContext)
47
+ if (mediaOptions == null) {
48
+ Log.w("BBCastMiniControls", "No CastMediaOptions, skipping mini controls")
49
+ return
50
+ }
51
+
52
+ val mediaOptionsClass = Class.forName("com.google.android.gms.cast.framework.media.CastMediaOptions")
53
+ val notificationOptions = mediaOptionsClass.getMethod("getNotificationOptions").invoke(mediaOptions)
54
+ if (notificationOptions == null) {
55
+ Log.w("BBCastMiniControls", "No NotificationOptions, skipping mini controls")
56
+ return
57
+ }
58
+
59
+ val notifOptionsClass = Class.forName("com.google.android.gms.cast.framework.media.NotificationOptions")
60
+ val actions = notifOptionsClass.getMethod("getActions").invoke(notificationOptions)
61
+ if (actions == null) {
62
+ Log.w("BBCastMiniControls", "No notification actions, skipping mini controls")
63
+ return
64
+ }
65
+
66
+ val fragmentClass = Class.forName(
67
+ "com.google.android.gms.cast.framework.media.widget.MiniControllerFragment"
68
+ )
69
+ val fragment = fragmentClass.getDeclaredConstructor().newInstance() as androidx.fragment.app.Fragment
70
+
71
+ activity.supportFragmentManager
72
+ .beginTransaction()
73
+ .replace(container.id, fragment, "bb_cast_mini_controls_${container.id}")
74
+ .commitAllowingStateLoss()
75
+ } catch (e: Exception) {
76
+ Log.w("BBCastMiniControls", "Cast mini controls unavailable: ${e.message}")
77
+ }
78
+ }
79
+ }
@@ -555,6 +555,47 @@ class BBPlayerModule(private val reactContext: ReactApplicationContext) :
555
555
  }
556
556
  }
557
557
 
558
+ @ReactMethod
559
+ override fun setInView(viewTag: Double, inView: Boolean) {
560
+ runOnUiThread(viewTag.toInt()) { it.setInView(inView) }
561
+ }
562
+
563
+ @ReactMethod
564
+ override fun getInView(viewTag: Double, promise: Promise) {
565
+ UiThreadUtil.runOnUiThread {
566
+ val view = findPlayerView(viewTag.toInt())
567
+ if (view != null) {
568
+ promise.resolve(view.getInView())
569
+ } else {
570
+ promise.resolve(null)
571
+ }
572
+ }
573
+ }
574
+
575
+ @ReactMethod
576
+ override fun getAdMediaWidth(viewTag: Double, promise: Promise) {
577
+ UiThreadUtil.runOnUiThread {
578
+ val view = findPlayerView(viewTag.toInt())
579
+ if (view != null) {
580
+ promise.resolve(view.getAdMediaWidth())
581
+ } else {
582
+ promise.resolve(null)
583
+ }
584
+ }
585
+ }
586
+
587
+ @ReactMethod
588
+ override fun getAdMediaHeight(viewTag: Double, promise: Promise) {
589
+ UiThreadUtil.runOnUiThread {
590
+ val view = findPlayerView(viewTag.toInt())
591
+ if (view != null) {
592
+ promise.resolve(view.getAdMediaHeight())
593
+ } else {
594
+ promise.resolve(null)
595
+ }
596
+ }
597
+ }
598
+
558
599
  companion object {
559
600
  const val NAME = "BBPlayerModule"
560
601
  }
@@ -34,7 +34,9 @@ class BBPlayerPackage : BaseReactPackage() {
34
34
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
35
35
  return listOf(
36
36
  BBPlayerViewManager(),
37
- BBShortsViewManager()
37
+ BBShortsViewManager(),
38
+ BBCastButtonViewManager(),
39
+ BBCastMiniControlsViewManager()
38
40
  )
39
41
  }
40
42
  }
@@ -398,8 +398,9 @@ class BBPlayerView(private val reactContext: ThemedReactContext) : FrameLayout(r
398
398
  }
399
399
 
400
400
  fun seekRelative(offsetInSeconds: Double) {
401
- // seekRelative not yet available in native SDK
402
- android.util.Log.w("BBPlayerView", "seekRelative not supported by native SDK")
401
+ if (::playerView.isInitialized) {
402
+ playerView.player?.seek(offsetInSeconds, true)
403
+ }
403
404
  }
404
405
 
405
406
  fun setVolume(volume: Double) {
@@ -570,6 +571,12 @@ class BBPlayerView(private val reactContext: ThemedReactContext) : FrameLayout(r
570
571
  } else null
571
572
  }
572
573
 
574
+ fun setInView(inView: Boolean) {
575
+ if (::playerView.isInitialized) {
576
+ playerView.setApiProperty(com.bluebillywig.bbnativeshared.enums.ApiProperty.inView, inView)
577
+ }
578
+ }
579
+
573
580
  fun getControls(): Boolean? {
574
581
  return if (::playerView.isInitialized) {
575
582
  playerView.getApiProperty(com.bluebillywig.bbnativeshared.enums.ApiProperty.controls) as? Boolean
@@ -57,6 +57,9 @@ public abstract class NativeBBPlayerModuleSpec extends ReactContextBaseJavaModul
57
57
  public abstract void loadWithProjectJson(int viewTag, String projectJson, String initiator, boolean autoPlay, double seekTo, String contextJson);
58
58
  public abstract void loadWithJsonUrl(int viewTag, String jsonUrl, boolean autoPlay, String contextJson);
59
59
 
60
+ // Viewability control
61
+ public abstract void setInView(int viewTag, boolean inView);
62
+
60
63
  // Promise getters
61
64
  public abstract void getDuration(int viewTag, Promise promise);
62
65
  public abstract void getMuted(int viewTag, Promise promise);
@@ -67,4 +70,7 @@ public abstract class NativeBBPlayerModuleSpec extends ReactContextBaseJavaModul
67
70
  public abstract void getClipData(int viewTag, Promise promise);
68
71
  public abstract void getProjectData(int viewTag, Promise promise);
69
72
  public abstract void getPlayoutData(int viewTag, Promise promise);
73
+ public abstract void getInView(int viewTag, Promise promise);
74
+ public abstract void getAdMediaWidth(int viewTag, Promise promise);
75
+ public abstract void getAdMediaHeight(int viewTag, Promise promise);
70
76
  }
@@ -0,0 +1,30 @@
1
+ import UIKit
2
+ import GoogleCast
3
+
4
+ class BBCastButtonView: UIView {
5
+ private var castButton: GCKUICastButton?
6
+
7
+ override func didMoveToWindow() {
8
+ super.didMoveToWindow()
9
+ guard window != nil, castButton == nil else { return }
10
+ setupCastButton()
11
+ }
12
+
13
+ private func setupCastButton() {
14
+ guard GCKCastContext.isSharedInstanceInitialized() else {
15
+ NSLog("BBCastButtonView: Google Cast SDK not initialized")
16
+ return
17
+ }
18
+
19
+ let button = GCKUICastButton(frame: bounds)
20
+ button.autoresizingMask = [.flexibleWidth, .flexibleHeight]
21
+ button.tintColor = tintColor
22
+ addSubview(button)
23
+ castButton = button
24
+ }
25
+
26
+ override func tintColorDidChange() {
27
+ super.tintColorDidChange()
28
+ castButton?.tintColor = tintColor
29
+ }
30
+ }
@@ -0,0 +1,7 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(BBCastButtonViewManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor)
6
+
7
+ @end
@@ -0,0 +1,12 @@
1
+ import React
2
+
3
+ @objc(BBCastButtonViewManager)
4
+ class BBCastButtonViewManager: RCTViewManager {
5
+ override func view() -> UIView! {
6
+ return BBCastButtonView()
7
+ }
8
+
9
+ override static func requiresMainQueueSetup() -> Bool {
10
+ return true
11
+ }
12
+ }
@@ -0,0 +1,27 @@
1
+ import UIKit
2
+ import GoogleCast
3
+
4
+ class BBCastMiniControlsView: UIView {
5
+ private var miniControlsViewController: GCKUIMiniMediaControlsViewController?
6
+
7
+ override func didMoveToWindow() {
8
+ super.didMoveToWindow()
9
+ guard window != nil, miniControlsViewController == nil else { return }
10
+ setupMiniControls()
11
+ }
12
+
13
+ private func setupMiniControls() {
14
+ guard GCKCastContext.isSharedInstanceInitialized() else {
15
+ NSLog("BBCastMiniControlsView: Google Cast SDK not initialized")
16
+ return
17
+ }
18
+
19
+ let miniController = GCKCastContext.sharedInstance().createMiniMediaControlsViewController()
20
+ miniControlsViewController = miniController
21
+
22
+ let miniView = miniController.view!
23
+ miniView.frame = bounds
24
+ miniView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
25
+ addSubview(miniView)
26
+ }
27
+ }
@@ -0,0 +1,5 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(BBCastMiniControlsViewManager, RCTViewManager)
4
+
5
+ @end
@@ -0,0 +1,12 @@
1
+ import React
2
+
3
+ @objc(BBCastMiniControlsViewManager)
4
+ class BBCastMiniControlsViewManager: RCTViewManager {
5
+ override func view() -> UIView! {
6
+ return BBCastMiniControlsView()
7
+ }
8
+
9
+ override static func requiresMainQueueSetup() -> Bool {
10
+ return true
11
+ }
12
+ }
@@ -49,6 +49,10 @@ RCT_EXTERN_METHOD(getMode:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolv
49
49
  RCT_EXTERN_METHOD(getClipData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
50
50
  RCT_EXTERN_METHOD(getProjectData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
51
51
  RCT_EXTERN_METHOD(getPlayoutData:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
52
+ RCT_EXTERN_METHOD(setInView:(nonnull NSNumber *)viewTag inView:(BOOL)inView)
53
+ RCT_EXTERN_METHOD(getInView:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
54
+ RCT_EXTERN_METHOD(getAdMediaWidth:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
55
+ RCT_EXTERN_METHOD(getAdMediaHeight:(nonnull NSNumber *)viewTag resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
52
56
 
53
57
  // Modal player (module-level)
54
58
  RCT_EXTERN_METHOD(presentModalPlayer:(NSString *)jsonUrl optionsJson:(NSString *)optionsJson contextJson:(NSString *)contextJson)
@@ -299,6 +299,33 @@ class BBPlayerModule: RCTEventEmitter {
299
299
  }
300
300
  }
301
301
 
302
+ @objc func setInView(_ viewTag: NSNumber, inView: Bool) {
303
+ DispatchQueue.main.async {
304
+ self.getView(viewTag)?.setInView(inView)
305
+ }
306
+ }
307
+
308
+ @objc func getInView(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
309
+ DispatchQueue.main.async {
310
+ let inView = self.getView(viewTag)?.inView()
311
+ resolver(inView)
312
+ }
313
+ }
314
+
315
+ @objc func getAdMediaWidth(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
316
+ DispatchQueue.main.async {
317
+ let width = self.getView(viewTag)?.adMediaWidth()
318
+ resolver(width)
319
+ }
320
+ }
321
+
322
+ @objc func getAdMediaHeight(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
323
+ DispatchQueue.main.async {
324
+ let height = self.getView(viewTag)?.adMediaHeight()
325
+ resolver(height)
326
+ }
327
+ }
328
+
302
329
  // MARK: - Modal Player API
303
330
 
304
331
  @objc func presentModalPlayer(_ jsonUrl: String, optionsJson: String?, contextJson: String?) {
@@ -480,6 +480,10 @@ class BBPlayerView: UIView, BBNativePlayerViewDelegate {
480
480
  return playerView?.player.inView
481
481
  }
482
482
 
483
+ func setInView(_ inView: Bool) {
484
+ playerView?.player.inView = inView
485
+ }
486
+
483
487
  func mode() -> String? {
484
488
  return playerView?.player.mode
485
489
  }
@@ -586,8 +590,7 @@ class BBPlayerView: UIView, BBNativePlayerViewDelegate {
586
590
  }
587
591
 
588
592
  func seekRelative(_ offsetInSeconds: Double) {
589
- // seekRelative removed in newer BBNativePlayerKit; no-op
590
- log("seekRelative not available in this SDK version", level: .warning)
593
+ playerView?.player.seekRelative(offsetInSeconds: offsetInSeconds as NSNumber)
591
594
  }
592
595
 
593
596
  func setMuted(_ muted: Bool) {
@@ -8,32 +8,32 @@
8
8
  <key>BinaryPath</key>
9
9
  <string>BBNativePlayerKit.framework/BBNativePlayerKit</string>
10
10
  <key>LibraryIdentifier</key>
11
- <string>ios-arm64_x86_64-simulator</string>
11
+ <string>ios-arm64</string>
12
12
  <key>LibraryPath</key>
13
13
  <string>BBNativePlayerKit.framework</string>
14
14
  <key>SupportedArchitectures</key>
15
15
  <array>
16
16
  <string>arm64</string>
17
- <string>x86_64</string>
18
17
  </array>
19
18
  <key>SupportedPlatform</key>
20
19
  <string>ios</string>
21
- <key>SupportedPlatformVariant</key>
22
- <string>simulator</string>
23
20
  </dict>
24
21
  <dict>
25
22
  <key>BinaryPath</key>
26
23
  <string>BBNativePlayerKit.framework/BBNativePlayerKit</string>
27
24
  <key>LibraryIdentifier</key>
28
- <string>ios-arm64</string>
25
+ <string>ios-arm64_x86_64-simulator</string>
29
26
  <key>LibraryPath</key>
30
27
  <string>BBNativePlayerKit.framework</string>
31
28
  <key>SupportedArchitectures</key>
32
29
  <array>
33
30
  <string>arm64</string>
31
+ <string>x86_64</string>
34
32
  </array>
35
33
  <key>SupportedPlatform</key>
36
34
  <string>ios</string>
35
+ <key>SupportedPlatformVariant</key>
36
+ <string>simulator</string>
37
37
  </dict>
38
38
  </array>
39
39
  <key>CFBundlePackageType</key>
@@ -1,6 +1,6 @@
1
1
  #if 0
2
2
  #elif defined(__arm64__) && __arm64__
3
- // Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
3
+ // Generated by Apple Swift version 6.1.2 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
4
4
  #ifndef BBNATIVEPLAYERKIT_SWIFT_H
5
5
  #define BBNATIVEPLAYERKIT_SWIFT_H
6
6
  #pragma clang diagnostic push
@@ -311,13 +311,16 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
311
311
 
312
312
  @class CALayer;
313
313
  @class NSCoder;
314
+ @class UIGestureRecognizer;
315
+ @class UITouch;
314
316
  @class NSString;
315
317
  /// PlayerView used to play media from the Blue Billywig OVP
316
318
  SWIFT_CLASS("_TtC17BBNativePlayerKit18BBNativePlayerView")
317
- @interface BBNativePlayerView : UIView
319
+ @interface BBNativePlayerView : UIView <UIGestureRecognizerDelegate>
318
320
  - (void)layoutSublayersOfLayer:(CALayer * _Nonnull)layer;
319
321
  - (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
320
322
  - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
323
+ - (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer shouldReceiveTouch:(UITouch * _Nonnull)touch SWIFT_WARN_UNUSED_RESULT;
321
324
  /// :nodoc:
322
325
  - (void)observeValueForKeyPath:(NSString * _Nullable)keyPath ofObject:(id _Nullable)object change:(NSDictionary<NSKeyValueChangeKey, id> * _Nullable)change context:(void * _Nullable)context;
323
326
  /// :nodoc:
@@ -363,8 +366,6 @@ SWIFT_CLASS("_TtC17BBNativePlayerKit28BBNativePlayerViewController")
363
366
  - (void)onEventEventType:(BbnativesharedEventName * _Nonnull)eventType data:(NSDictionary<NSString *, id> * _Nullable)data;
364
367
  @end
365
368
 
366
- @class UIGestureRecognizer;
367
- @class UITouch;
368
369
  @interface BBNativePlayerViewController (SWIFT_EXTENSION(BBNativePlayerKit)) <UIGestureRecognizerDelegate>
369
370
  - (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer * _Nonnull)otherGestureRecognizer SWIFT_WARN_UNUSED_RESULT;
370
371
  - (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer shouldReceiveTouch:(UITouch * _Nonnull)touch SWIFT_WARN_UNUSED_RESULT;
@@ -16,4 +16,4 @@ FOUNDATION_EXPORT const unsigned char BBNativePlayerKitVersionString[];
16
16
 
17
17
  // In this header, you should import all the public headers of your framework using statements like #import <BBNativePlayerKit/PublicHeader.h>
18
18
 
19
- #import "UMPBridge.h"
19
+ #import <BBNativePlayerKit/UMPBridge.h>