react-native-spalla-player 0.19.0 → 0.19.1

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.
@@ -109,7 +109,7 @@ dependencies {
109
109
  implementation "com.facebook.react:react-native:+"
110
110
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
111
111
  implementation "androidx.mediarouter:mediarouter:1.2.0"
112
- implementation "stream.spalla:spalla-android-sdk:1.13.0"
112
+ implementation "stream.spalla:spalla-android-sdk:1.13.1"
113
113
  implementation "com.google.android.gms:play-services-cast-framework:21.3.0"
114
114
  implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.36.0'
115
115
  }
@@ -2,10 +2,8 @@ package com.spallaplayer
2
2
 
3
3
  import android.content.Context
4
4
  import android.util.Log
5
- import android.widget.FrameLayout
6
5
  import com.spalla.sdk.android.core.player.view.SpallaPlayerView
7
6
  import android.view.ViewGroup;
8
- import androidx.core.view.isNotEmpty
9
7
 
10
8
  class SpallaPlayerContainerView(context: Context) : ViewGroup(context) {
11
9
  val spallaPlayerView: SpallaPlayerView = SpallaPlayerView(context)
@@ -7,17 +7,36 @@ import androidx.core.app.PictureInPictureModeChangedInfo
7
7
  import androidx.core.util.Consumer
8
8
  import com.facebook.react.bridge.Arguments
9
9
  import com.facebook.react.bridge.ReactContext
10
+ import com.facebook.react.bridge.ReadableArray
10
11
  import com.facebook.react.bridge.ReadableMap
11
12
  import com.facebook.react.bridge.WritableMap
12
- import com.facebook.react.uimanager.ViewGroupManager
13
13
  import com.facebook.react.uimanager.ThemedReactContext
14
+ import com.facebook.react.uimanager.ViewGroupManager
14
15
  import com.facebook.react.uimanager.annotations.ReactProp
15
16
  import com.facebook.react.uimanager.events.RCTEventEmitter
16
17
  import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent
17
- import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.*
18
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.AdBegin
19
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.AdBreakBegin
20
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.AdBreakEnd
21
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.AdEnd
22
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.AdError
23
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.DurationUpdate
24
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Ended
25
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Error
26
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.MetadataLoaded
27
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Pause
28
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.PictureInPictureModeChanged
29
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Play
30
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.PlaybackRateSelected
31
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Playing
32
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.SubtitleSelected
33
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.SubtitlesAvailable
34
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.TimeUpdate
35
+ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.Waiting
18
36
  import com.spalla.sdk.android.core.player.listeners.SpallaPlayerFullScreenListener
19
37
  import com.spalla.sdk.android.core.player.listeners.SpallaPlayerListener
20
38
  import com.spalla.sdk.android.core.player.view.SpallaPlayerView
39
+ import com.spalla.sdk.android.domain.entities.AdsModel
21
40
  import java.util.Timer
22
41
  import java.util.TimerTask
23
42
 
@@ -36,6 +55,7 @@ class RNSpallaPlayerManager() : ViewGroupManager<SpallaPlayerContainerView>(),
36
55
  private var isPlaying: Boolean = false
37
56
  private var pipTriggered: Boolean = false
38
57
  private var customImaParams: Map<String, String>? = null
58
+ private var customAds: List<AdsModel>? = null
39
59
 
40
60
  override fun getName() = "RNSpallaPlayer"
41
61
 
@@ -64,8 +84,6 @@ class RNSpallaPlayerManager() : ViewGroupManager<SpallaPlayerContainerView>(),
64
84
 
65
85
  override fun createViewInstance(context: ThemedReactContext): SpallaPlayerContainerView {
66
86
  _reactContext = context
67
- //context.addLifecycleEventListener(this)
68
-
69
87
  // Register this manager for direct PiP access
70
88
  SpallaPlayerPipModule.registerPlayerManager(this)
71
89
 
@@ -181,10 +199,33 @@ class RNSpallaPlayerManager() : ViewGroupManager<SpallaPlayerContainerView>(),
181
199
  this.customImaParams = customImaParams?.toHashMap()?.mapValues { it.value.toString() }
182
200
  }
183
201
 
202
+ @ReactProp(name = "customAds")
203
+ fun setCustomAds(view: SpallaPlayerContainerView, customAds: ReadableArray?) {
204
+ val ads = mutableListOf<AdsModel>()
205
+ customAds?.let {
206
+ for (i in 0 until it.size()) {
207
+ val adMap = it.getMap(i)
208
+ val url = adMap?.getString("url")
209
+ val offset = if (adMap?.hasKey("offset") == true) adMap.getString("offset") else null
210
+ if (url != null) {
211
+ ads.add(AdsModel(url = url, offset = offset))
212
+ }
213
+ }
214
+ }
215
+ this.customAds = ads.ifEmpty { null }
216
+ }
217
+
184
218
  private fun checkAndLoadPlayer(view: SpallaPlayerContainerView) {
185
219
  if (contentId != null && startTime != null && hideUI != null) {
186
220
  view.post {
187
- view.spallaPlayerView.load(contentId!!, true, startTime!!, subtitle, hideUI!!, customImaParams)
221
+ view.spallaPlayerView.load(
222
+ contentId!!,
223
+ true,
224
+ startTime!!,
225
+ subtitle,
226
+ hideUI!!,
227
+ customImaParams,
228
+ customAds)
188
229
  }
189
230
  }
190
231
  }
@@ -192,7 +233,6 @@ class RNSpallaPlayerManager() : ViewGroupManager<SpallaPlayerContainerView>(),
192
233
  override fun onEvent(event: SpallaPlayerEvent) {
193
234
  val map: WritableMap = Arguments.createMap()
194
235
 
195
- //Log.v("RNSpallaPlayerManager", "onEvent: $event")
196
236
  when (event) {
197
237
  is DurationUpdate -> {
198
238
  map.putString("event", "durationUpdate")
@@ -19,6 +19,8 @@ RCT_EXPORT_VIEW_PROPERTY(playbackRate, NSNumber)
19
19
 
20
20
  RCT_EXPORT_VIEW_PROPERTY(customImaParams, NSDictionary)
21
21
 
22
+ RCT_EXPORT_VIEW_PROPERTY(customAds, NSArray)
23
+
22
24
  RCT_EXPORT_METHOD(play: (nonnull NSNumber *) reactTag {
23
25
 
24
26
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
@@ -63,6 +63,22 @@ import SpallaSDK
63
63
  }
64
64
  }
65
65
 
66
+ @objc var customAds: NSArray? = nil {
67
+ didSet {
68
+ var ads: [SpallaSDK.AdsModel] = []
69
+ customAds?.forEach { element in
70
+ if let parsed = element as? [String: String] {
71
+ if let url = parsed["url"] {
72
+ ads.append(AdsModel(url: parsed["url"], offset: parsed["offset"]))
73
+ }
74
+ }
75
+ }
76
+ parsedAds = ads
77
+ }
78
+ }
79
+
80
+ private var parsedAds: [AdsModel]? = nil
81
+
66
82
  @objc var onPlayerEvent: RCTBubblingEventBlock?
67
83
 
68
84
  convenience public init() {
@@ -93,11 +109,11 @@ import SpallaSDK
93
109
 
94
110
  required init?(coder: NSCoder) {
95
111
  fatalError("init(coder:) has not been implemented")
96
- }
112
+ }
97
113
 
98
114
  func setupPlayer() {
99
115
  if let contentId {
100
- viewController.setup(with: contentId, hideUI: hideUI, startTime: startTime.doubleValue, subtitle: subtitle, customImaParams: customImaParams ?? [:])
116
+ viewController.setup(with: contentId, hideUI: hideUI, startTime: startTime.doubleValue, subtitle: subtitle, customImaParams: customImaParams ?? [:], customAds: parsedAds ?? [])
101
117
  }
102
118
  }
103
119
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-spalla-player",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "Spalla SDK for RN",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
- s.dependency "SpallaSDK", "~> 2.6.0"
19
+ s.dependency "SpallaSDK", "~> 2.6.2"
20
20
 
21
21
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
22
22
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.