react-native-firework-sdk 2.14.2 → 2.15.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.
Files changed (77) hide show
  1. package/android/gradle.properties +1 -1
  2. package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt +14 -4
  3. package/android/src/main/java/com/fireworksdk/bridge/models/FWActionButtonDeserializer.kt +27 -0
  4. package/android/src/main/java/com/fireworksdk/bridge/models/FWActionButtonModel.kt +8 -0
  5. package/android/src/main/java/com/fireworksdk/bridge/models/FWActionButtonSerializer.kt +21 -0
  6. package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamEventDetailsModel.kt +2 -0
  7. package/android/src/main/java/com/fireworksdk/bridge/models/FWPlayerButtonConfigurationDeserializer.kt +3 -0
  8. package/android/src/main/java/com/fireworksdk/bridge/models/FWPlayerButtonConfigurationModel.kt +1 -0
  9. package/android/src/main/java/com/fireworksdk/bridge/models/FWPlayerButtonConfigurationSerializer.kt +2 -0
  10. package/android/src/main/java/com/fireworksdk/bridge/models/FWShape.kt +18 -0
  11. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedItemDetailsModel.kt +2 -0
  12. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlaybackDetails.kt +2 -0
  13. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModel.kt +6 -0
  14. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelDeserializer.kt +23 -1
  15. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelSerializer.kt +14 -0
  16. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWEventName.kt +3 -1
  17. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWLivestreamPlayerVersion.kt +6 -0
  18. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWVideoFeedManager.kt +4 -0
  19. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +1 -0
  20. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +3 -3
  21. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +14 -0
  22. package/android/src/main/java/com/fireworksdk/bridge/utils/FWConfigUtil.kt +156 -3
  23. package/android/src/main/java/com/fireworksdk/bridge/utils/FWGlobalDataUtil.kt +6 -0
  24. package/android/src/main/java/com/fireworksdk/bridge/utils/FWModelUtils.kt +32 -0
  25. package/ios/Components/StoryBlock.swift +12 -2
  26. package/ios/Components/VideoFeed.swift +14 -29
  27. package/ios/Components/VideoFeedManager.swift +0 -5
  28. package/ios/FireworkSdk.xcodeproj/project.pbxproj +0 -4
  29. package/ios/Models/NativeToRN/FireworkEventName.swift +3 -1
  30. package/ios/Models/RNToNative/RCTConvert+FireworkSDKModule.swift +13 -0
  31. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +42 -5
  32. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +2 -1
  33. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +16 -12
  34. package/ios/Modules/Shopping/ShoppingModule.swift +1 -1
  35. package/lib/commonjs/FireworkSDK.js +41 -14
  36. package/lib/commonjs/FireworkSDK.js.map +1 -1
  37. package/lib/commonjs/components/StoryBlock.js +21 -0
  38. package/lib/commonjs/components/StoryBlock.js.map +1 -1
  39. package/lib/commonjs/components/VideoFeed.js +23 -0
  40. package/lib/commonjs/components/VideoFeed.js.map +1 -1
  41. package/lib/commonjs/index.js +8 -0
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/models/FWEventName.js +2 -0
  44. package/lib/commonjs/models/FWEventName.js.map +1 -1
  45. package/lib/commonjs/models/LivestreamPlayerDesignVersion.js +16 -0
  46. package/lib/commonjs/models/LivestreamPlayerDesignVersion.js.map +1 -0
  47. package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -1
  48. package/lib/module/FireworkSDK.js +38 -14
  49. package/lib/module/FireworkSDK.js.map +1 -1
  50. package/lib/module/components/StoryBlock.js +14 -0
  51. package/lib/module/components/StoryBlock.js.map +1 -1
  52. package/lib/module/components/VideoFeed.js +18 -0
  53. package/lib/module/components/VideoFeed.js.map +1 -1
  54. package/lib/module/index.js +2 -1
  55. package/lib/module/index.js.map +1 -1
  56. package/lib/module/models/FWEventName.js +2 -0
  57. package/lib/module/models/FWEventName.js.map +1 -1
  58. package/lib/module/models/LivestreamPlayerDesignVersion.js +9 -0
  59. package/lib/module/models/LivestreamPlayerDesignVersion.js.map +1 -0
  60. package/lib/module/modules/FireworkSDKModule.js.map +1 -1
  61. package/lib/typescript/FireworkSDK.d.ts +9 -2
  62. package/lib/typescript/index.d.ts +2 -1
  63. package/lib/typescript/models/FWEventName.d.ts +3 -1
  64. package/lib/typescript/models/LivestreamPlayerDesignVersion.d.ts +5 -0
  65. package/lib/typescript/models/StoryBlockConfiguration.d.ts +2 -7
  66. package/lib/typescript/modules/FireworkSDKModule.d.ts +3 -1
  67. package/package.json +1 -1
  68. package/react-native-firework-sdk.podspec +2 -2
  69. package/src/FireworkSDK.ts +44 -13
  70. package/src/components/StoryBlock.tsx +27 -1
  71. package/src/components/VideoFeed.tsx +29 -1
  72. package/src/index.ts +2 -0
  73. package/src/models/FWEventName.ts +2 -0
  74. package/src/models/LivestreamPlayerDesignVersion.ts +6 -0
  75. package/src/models/StoryBlockConfiguration.ts +2 -7
  76. package/src/modules/FireworkSDKModule.ts +5 -1
  77. package/ios/Utils/Extensions/NumberFormatter+AppLanguage.swift +0 -27
@@ -6,4 +6,4 @@ FireworkSDK_minSdkVersion=21
6
6
  FireworkSDK_compileSdkVersion=33
7
7
  FireworkSDK_targetSdkVersion=33
8
8
  FireworkSDK_fwPlayerLaunchMode=singleTask
9
- FireworkSDK_fwNativeVersion=6.13.1
9
+ FireworkSDK_fwNativeVersion=6.16.5
@@ -17,6 +17,7 @@ import com.firework.error.FwErrorListener
17
17
  import com.firework.storyblock.FeedLoadListener
18
18
  import com.firework.storyblock.FeedLoadState
19
19
  import com.firework.storyblock.FwStoryBlockView
20
+ import com.firework.storyblock.StoryBlockShoppingOverlayListener
20
21
  import com.fireworksdk.bridge.components.base.FWBaseFragment
21
22
  import com.fireworksdk.bridge.components.base.FWLoading
22
23
  import com.fireworksdk.bridge.databinding.FwBridgeStoryBlockBinding
@@ -37,6 +38,7 @@ class StoryBlockFragment : FWBaseFragment() {
37
38
 
38
39
  private var feedLoadListener: FeedLoadListener? = null
39
40
  private var errorListener: FwErrorListener? = null
41
+ private var shoppingOverlayStateListener: StoryBlockShoppingOverlayListener? = null
40
42
  private var videoFeedPropsModel: FWVideoFeedPropsModel? = null
41
43
 
42
44
  private var isStoryBlockInitializer = false
@@ -116,10 +118,10 @@ class StoryBlockFragment : FWBaseFragment() {
116
118
  val viewOptionsBuilder = FWConfigUtil.generateViewOptionsBuilder(context, videoFeedPropsModel)
117
119
 
118
120
  fwStoryBlockView?.init(
119
- childFragmentManager,
120
- viewLifecycleOwner,
121
- viewOptionsBuilder.build(),
122
- FWGlobalDataUtil.pauseWhenNotVisible
121
+ fragmentManager = childFragmentManager,
122
+ lifecycleOwner = viewLifecycleOwner,
123
+ viewOptions = viewOptionsBuilder.build(),
124
+ pauseWhenNotVisible = FWGlobalDataUtil.pauseWhenNotVisible,
123
125
  )
124
126
  isStoryBlockInitializer = true
125
127
 
@@ -130,6 +132,7 @@ class StoryBlockFragment : FWBaseFragment() {
130
132
  // must call it after init()
131
133
  setFeedLoadListener(feedLoadListener)
132
134
  setOnErrorListener(errorListener)
135
+ setShoppingOverlayListener(shoppingOverlayStateListener)
133
136
  }
134
137
 
135
138
  // may be called before onCreateView
@@ -166,6 +169,13 @@ class StoryBlockFragment : FWBaseFragment() {
166
169
  }
167
170
  }
168
171
 
172
+ fun setShoppingOverlayListener(shoppingOverlayStateListener: StoryBlockShoppingOverlayListener?) {
173
+ this.shoppingOverlayStateListener = shoppingOverlayStateListener
174
+ if (isStoryBlockInitializer) {
175
+ fwStoryBlockView?.setShoppingOverlayListener(shoppingOverlayStateListener)
176
+ }
177
+ }
178
+
169
179
  fun play() {
170
180
  fwStoryBlockView?.play()
171
181
  }
@@ -0,0 +1,27 @@
1
+ package com.fireworksdk.bridge.models
2
+
3
+ import org.json.JSONObject
4
+
5
+ object FWActionButtonDeserializer {
6
+
7
+ private const val BACKGROUND_COLOR = "backgroundColor"
8
+ private const val TEXT_COLOR = "textColor"
9
+ private const val SHAPE = "shape"
10
+ private const val DIVIDING_LINE_COLOR = "dividingLineColor"
11
+
12
+ fun deserialize(responseJson: JSONObject?): FWActionButtonModel? {
13
+ responseJson ?: return null
14
+
15
+ val backgroundColor = if (responseJson.has(BACKGROUND_COLOR)) responseJson.optString(BACKGROUND_COLOR) else null
16
+ val textColor = if (responseJson.has(TEXT_COLOR)) responseJson.optString(TEXT_COLOR) else null
17
+ val dividingLineColor = if (responseJson.has(DIVIDING_LINE_COLOR)) responseJson.optString(DIVIDING_LINE_COLOR) else null
18
+ val shape = if (responseJson.has(SHAPE)) responseJson.optString(SHAPE) else null
19
+
20
+ return FWActionButtonModel(
21
+ backgroundColor = backgroundColor,
22
+ textColor = textColor,
23
+ dividingLineColor = dividingLineColor,
24
+ shape = if (!shape.isNullOrBlank()) FWShape.deserialize(shape) else null,
25
+ )
26
+ }
27
+ }
@@ -0,0 +1,8 @@
1
+ package com.fireworksdk.bridge.models
2
+
3
+ data class FWActionButtonModel(
4
+ val backgroundColor: String? = null,
5
+ val textColor: String? = null,
6
+ val dividingLineColor: String? = null,
7
+ val shape: FWShape? = null,
8
+ )
@@ -0,0 +1,21 @@
1
+ package com.fireworksdk.bridge.models
2
+
3
+ import org.json.JSONObject
4
+
5
+ object FWActionButtonSerializer {
6
+
7
+ private const val BACKGROUND_COLOR = "backgroundColor"
8
+ private const val TEXT_COLOR = "textColor"
9
+ private const val SHAPE = "shape"
10
+ private const val DIVIDING_LINE_COLOR = "dividingLineColor"
11
+
12
+ fun serialize(model: FWActionButtonModel?): JSONObject? {
13
+ model ?: return null
14
+ val jsonObject = JSONObject()
15
+ jsonObject.put(BACKGROUND_COLOR, model.backgroundColor)
16
+ jsonObject.put(TEXT_COLOR, model.textColor)
17
+ jsonObject.put(SHAPE, FWShape.serialize(model.shape))
18
+ jsonObject.put(DIVIDING_LINE_COLOR, model.dividingLineColor)
19
+ return jsonObject
20
+ }
21
+ }
@@ -3,4 +3,6 @@ package com.fireworksdk.bridge.models
3
3
  data class FWLiveStreamEventDetailsModel(
4
4
  val id: String? = null,
5
5
  val feedId: String? = null,
6
+ val videoType: String? = null,
7
+ val liveStreamStatus: String? = null
6
8
  )
@@ -6,6 +6,7 @@ object FWPlayerButtonConfigurationDeserializer {
6
6
 
7
7
  private const val VIDEO_DETAIL_BUTTON_KEY = "videoDetailButton"
8
8
  private const val CLOSE_BUTTON_KEY = "closeButton"
9
+ private const val PIP_BUTTON_KEY = "pipButton"
9
10
  private const val MUTE_BUTTON_KEY = "muteButton"
10
11
  private const val UNMUTE_BUTTON_KEY = "unmuteButton"
11
12
  private const val PLAY_BUTTON_KEY = "playButton"
@@ -16,6 +17,7 @@ object FWPlayerButtonConfigurationDeserializer {
16
17
 
17
18
  val videoDetailButtonJsonObject = responseJson.optJSONObject(VIDEO_DETAIL_BUTTON_KEY)
18
19
  val closeButtonJsonObject = responseJson.optJSONObject(CLOSE_BUTTON_KEY)
20
+ val pipButtonJsonObject = responseJson.optJSONObject(PIP_BUTTON_KEY)
19
21
  val muteButtonJsonObject = responseJson.optJSONObject(MUTE_BUTTON_KEY)
20
22
  val unmuteButtonJsonObject = responseJson.optJSONObject(UNMUTE_BUTTON_KEY)
21
23
  val playButtonJsonObject = responseJson.optJSONObject(PLAY_BUTTON_KEY)
@@ -24,6 +26,7 @@ object FWPlayerButtonConfigurationDeserializer {
24
26
  return FWPlayerButtonConfigurationModel(
25
27
  videoDetailButton = FWButtonInfoDeserializer.deserialize(videoDetailButtonJsonObject),
26
28
  closeButton = FWButtonInfoDeserializer.deserialize(closeButtonJsonObject),
29
+ pipButton = FWButtonInfoDeserializer.deserialize(pipButtonJsonObject),
27
30
  muteButton = FWButtonInfoDeserializer.deserialize(muteButtonJsonObject),
28
31
  unmuteButton = FWButtonInfoDeserializer.deserialize(unmuteButtonJsonObject),
29
32
  playButton = FWButtonInfoDeserializer.deserialize(playButtonJsonObject),
@@ -3,6 +3,7 @@ package com.fireworksdk.bridge.models
3
3
  data class FWPlayerButtonConfigurationModel(
4
4
  val videoDetailButton: FWButtonInfoModel? = null,
5
5
  val closeButton: FWButtonInfoModel? = null,
6
+ val pipButton: FWButtonInfoModel? = null,
6
7
  val muteButton: FWButtonInfoModel? = null,
7
8
  val unmuteButton: FWButtonInfoModel? = null,
8
9
  val playButton: FWButtonInfoModel? = null,
@@ -6,6 +6,7 @@ object FWPlayerButtonConfigurationSerializer {
6
6
 
7
7
  private const val VIDEO_DETAIL_BUTTON_KEY = "videoDetailButton"
8
8
  private const val CLOSE_BUTTON_KEY = "closeButton"
9
+ private const val PIP_BUTTON_KEY = "pipButton"
9
10
  private const val MUTE_BUTTON_KEY = "muteButton"
10
11
  private const val UNMUTE_BUTTON_KEY = "unmuteButton"
11
12
  private const val PLAY_BUTTON_KEY = "playButton"
@@ -16,6 +17,7 @@ object FWPlayerButtonConfigurationSerializer {
16
17
  val jsonObject = JSONObject()
17
18
  jsonObject.put(VIDEO_DETAIL_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.videoDetailButton))
18
19
  jsonObject.put(CLOSE_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.closeButton))
20
+ jsonObject.put(PIP_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.pipButton))
19
21
  jsonObject.put(MUTE_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.muteButton))
20
22
  jsonObject.put(UNMUTE_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.unmuteButton))
21
23
  jsonObject.put(PLAY_BUTTON_KEY, FWButtonInfoSerializer.serialize(model.playButton))
@@ -0,0 +1,18 @@
1
+ package com.fireworksdk.bridge.models
2
+
3
+ enum class FWShape(val rawValue: String) {
4
+ ROUND_RECTANGLE("roundRectangle"),
5
+ OVAL("oval");
6
+
7
+ companion object {
8
+ fun deserialize(rawValue: String?): FWShape? {
9
+ rawValue ?: return null
10
+ return FWShape.values().first { it.rawValue == rawValue }
11
+ }
12
+
13
+ fun serialize(model: FWShape?): String? {
14
+ model ?: return null
15
+ return model.rawValue
16
+ }
17
+ }
18
+ }
@@ -10,5 +10,7 @@ data class FWVideoFeedItemDetailsModel(
10
10
  val playlistGroup: String?,
11
11
  val playlist: String?,
12
12
  val channel: String?,
13
+ val videoType: String?,
14
+ val liveStreamStatus: String?,
13
15
  val dynamicContentParameters: Map<String, List<String>>?,
14
16
  )
@@ -17,4 +17,6 @@ data class FWVideoPlaybackDetails(
17
17
  val actionUrl: String? = null,
18
18
  val label: String? = null,
19
19
  val feedId: String? = null,
20
+ val videoType: String? = null,
21
+ val liveStreamStatus: String? = null
20
22
  )
@@ -22,12 +22,18 @@ data class FWVideoPlayerConfigModel(
22
22
  val buttonConfiguration: FWPlayerButtonConfigurationModel? = null,
23
23
  val videoPlayerLogoConfiguration: FWVideoPlayerLogoConfigurationModel? = null,
24
24
  val countdownTimerConfiguration: FWCountdownTimerConfigurationModel? = null,
25
+ val actionButtonStyle: FWActionButtonModel? = null,
26
+ val cancelButtonStyle: FWActionButtonModel? = null,
27
+ val showFullScreenIcon: Boolean? = null,
28
+ val enableAutoPlay: Boolean? = null,
29
+ val enableAutoPause: Boolean? = null,
25
30
  ) {
26
31
 
27
32
  data class FWCtaButtonStyleModel(
28
33
  val backgroundColor: String? = null,
29
34
  val fontSize: Int? = null,
30
35
  val textColor: String? = null,
36
+ val shape: FWShape? = null,
31
37
  )
32
38
 
33
39
  data class FWCtaDelayModel(
@@ -24,14 +24,21 @@ object FWVideoPlayerConfigModelDeserializer {
24
24
  private const val BUTTON_CONFIGURATION_KEY = "buttonConfiguration"
25
25
  private const val VIDEO_PLAYER_LOGO_CONFIGURATION_KEY = "videoPlayerLogoConfiguration"
26
26
  private const val COUNT_DOWN_TIMER_CONFIGURATION_KEY = "countdownTimerConfiguration"
27
+ private const val ACTION_BUTTON_STYLE_KEY = "actionButtonStyle"
28
+ private const val CANCEL_BUTTON_STYLE_KEY = "cancelButtonStyle"
27
29
 
28
30
  private const val BACKGROUND_COLOR_KEY = "backgroundColor"
29
31
  private const val FONT_SIZE_KEY = "fontSize"
30
32
  private const val TEXT_COLOR_KEY = "textColor"
33
+ private const val SHAPE_KEY = "shape"
31
34
 
32
35
  private const val TYPE_KEY = "type"
33
36
  private const val VALUE_KEY = "value"
34
37
 
38
+ private const val SHOW_FULL_SCREEN_ICON = "enableFullScreen"
39
+ private const val ENABLE_AUTOPLAY = "enableAutoplay"
40
+ private const val ENABLE_AUTOPAUSE = "enableAutopause"
41
+
35
42
  fun deserialize(responseJson: JSONObject?): FWVideoPlayerConfigModel? {
36
43
  responseJson ?: return null
37
44
 
@@ -51,6 +58,14 @@ object FWVideoPlayerConfigModelDeserializer {
51
58
  val buttonConfigurationJsonObject = responseJson.optJSONObject(BUTTON_CONFIGURATION_KEY)
52
59
  val videoPlayerLogoConfigurationJsonObject = responseJson.optJSONObject(VIDEO_PLAYER_LOGO_CONFIGURATION_KEY)
53
60
  val countdownTimerConfigurationJsonObject = responseJson.optJSONObject(COUNT_DOWN_TIMER_CONFIGURATION_KEY)
61
+ val actionButtonStyleJsonObject = responseJson.optJSONObject(ACTION_BUTTON_STYLE_KEY)
62
+ val cancelButtonStyleJsonObject = responseJson.optJSONObject(CANCEL_BUTTON_STYLE_KEY)
63
+ val showFullScreenIcon =
64
+ if (responseJson.has(SHOW_FULL_SCREEN_ICON)) responseJson.optBoolean(SHOW_FULL_SCREEN_ICON) else null
65
+ val enableAutoPlay =
66
+ if (responseJson.has(ENABLE_AUTOPLAY)) responseJson.optBoolean(ENABLE_AUTOPLAY) else null
67
+ val enableAutoPause =
68
+ if (responseJson.has(ENABLE_AUTOPAUSE)) responseJson.optBoolean(ENABLE_AUTOPAUSE) else null
54
69
 
55
70
  return FWVideoPlayerConfigModel(
56
71
  playerStyle = if (!playerStyle.isNullOrBlank()) FWPlayerStyle.deserialize(playerStyle) else null,
@@ -69,6 +84,11 @@ object FWVideoPlayerConfigModelDeserializer {
69
84
  buttonConfiguration = FWPlayerButtonConfigurationDeserializer.deserialize(buttonConfigurationJsonObject),
70
85
  videoPlayerLogoConfiguration = FWVideoPlayerLogoConfigurationModelDeserializer.deserialize(videoPlayerLogoConfigurationJsonObject),
71
86
  countdownTimerConfiguration = FWCountdownTimerConfigurationModelDeserializer.deserialize(countdownTimerConfigurationJsonObject),
87
+ actionButtonStyle = FWActionButtonDeserializer.deserialize(actionButtonStyleJsonObject),
88
+ cancelButtonStyle = FWActionButtonDeserializer.deserialize(cancelButtonStyleJsonObject),
89
+ showFullScreenIcon = showFullScreenIcon,
90
+ enableAutoPlay = enableAutoPlay,
91
+ enableAutoPause = enableAutoPause
72
92
  )
73
93
  }
74
94
 
@@ -78,11 +98,13 @@ object FWVideoPlayerConfigModelDeserializer {
78
98
  val backgroundColor = if (ctaButtonStyleJson.has(BACKGROUND_COLOR_KEY)) ctaButtonStyleJson.optString(BACKGROUND_COLOR_KEY) else null
79
99
  val fontSize = if (ctaButtonStyleJson.has(FONT_SIZE_KEY)) ctaButtonStyleJson.optInt(FONT_SIZE_KEY) else null
80
100
  val textColor = if (ctaButtonStyleJson.has(TEXT_COLOR_KEY)) ctaButtonStyleJson.optString(TEXT_COLOR_KEY) else null
101
+ val shape = if (ctaButtonStyleJson.has(SHAPE_KEY)) ctaButtonStyleJson.optString(SHAPE_KEY) else null
81
102
 
82
103
  return FWVideoPlayerConfigModel.FWCtaButtonStyleModel(
83
104
  backgroundColor = backgroundColor,
84
105
  fontSize = fontSize,
85
- textColor = textColor
106
+ textColor = textColor,
107
+ shape = if (!shape.isNullOrBlank()) FWShape.deserialize(shape) else null,
86
108
  )
87
109
  }
88
110
 
@@ -24,14 +24,22 @@ object FWVideoPlayerConfigModelSerializer {
24
24
  private const val BUTTON_CONFIGURATION_KEY = "buttonConfiguration"
25
25
  private const val VIDEO_PLAYER_LOGO_CONFIGURATION_KEY = "videoPlayerLogoConfiguration"
26
26
  private const val COUNT_DOWN_TIMER_CONFIGURATION_KEY = "countdownTimerConfiguration"
27
+ private const val ACTION_BUTTON_STYLE_KEY = "actionButtonStyle"
28
+ private const val CANCEL_BUTTON_STYLE_KEY = "cancelButtonStyle"
27
29
 
28
30
  private const val BACKGROUND_COLOR_KEY = "backgroundColor"
29
31
  private const val FONT_SIZE_KEY = "fontSize"
30
32
  private const val TEXT_COLOR_KEY = "textColor"
33
+ private const val SHAPE_KEY = "shape"
31
34
 
32
35
  private const val TYPE_KEY = "type"
33
36
  private const val VALUE_KEY = "value"
34
37
 
38
+ private const val SHOW_FULL_SCREEN_ICON = "enableFullScreen"
39
+ private const val ENABLE_AUTOPLAY = "enableAutoplay"
40
+ private const val ENABLE_AUTOPAUSE = "enableAutopause"
41
+
42
+
35
43
  fun serialize(model: FWVideoPlayerConfigModel?): JSONObject? {
36
44
  model ?: return null
37
45
  val jsonObject = JSONObject()
@@ -51,6 +59,11 @@ object FWVideoPlayerConfigModelSerializer {
51
59
  jsonObject.put(BUTTON_CONFIGURATION_KEY, FWPlayerButtonConfigurationSerializer.serialize(model.buttonConfiguration))
52
60
  jsonObject.put(VIDEO_PLAYER_LOGO_CONFIGURATION_KEY, FWVideoPlayerLogoConfigurationModelSerializer.serialize(model.videoPlayerLogoConfiguration))
53
61
  jsonObject.put(COUNT_DOWN_TIMER_CONFIGURATION_KEY, FWCountdownTimerConfigurationModelSerializer.serialize(model.countdownTimerConfiguration))
62
+ jsonObject.put(ACTION_BUTTON_STYLE_KEY, FWActionButtonSerializer.serialize(model.actionButtonStyle))
63
+ jsonObject.put(CANCEL_BUTTON_STYLE_KEY, FWActionButtonSerializer.serialize(model.cancelButtonStyle))
64
+ jsonObject.put(SHOW_FULL_SCREEN_ICON, model.showFullScreenIcon)
65
+ jsonObject.put(ENABLE_AUTOPLAY, model.enableAutoPlay)
66
+ jsonObject.put(ENABLE_AUTOPAUSE, model.enableAutoPause)
54
67
  return jsonObject
55
68
  }
56
69
 
@@ -60,6 +73,7 @@ object FWVideoPlayerConfigModelSerializer {
60
73
  jsonObject.put(BACKGROUND_COLOR_KEY, model.backgroundColor)
61
74
  jsonObject.put(FONT_SIZE_KEY, model.fontSize)
62
75
  jsonObject.put(TEXT_COLOR_KEY, model.textColor)
76
+ jsonObject.put(SHAPE_KEY, FWShape.serialize(model.shape))
63
77
  return jsonObject
64
78
  }
65
79
 
@@ -7,7 +7,8 @@ enum class FWEventName(val rawValue: String) {
7
7
  VideoFeedClick("fw:video-feed-click"),
8
8
  LiveStream("fw:livestream"),
9
9
  LiveStreamChat("fw:livestream-chat"),
10
- LogMessage("fw:log-message")
10
+ LogMessage("fw:log-message"),
11
+ CustomShareURL("fw:custom-share-url")
11
12
  }
12
13
 
13
14
  enum class FWSDKInitSubEventName(val rawValue: String) {
@@ -57,4 +58,5 @@ enum class FWStoryBlockEventName(val rawValue: String) {
57
58
  StoryBlockEmpty("onStoryBlockEmpty"),
58
59
  StoryBlockFullScreenStateChanged("onStoryBlockFullScreenStateChanged"),
59
60
  StoryBlockGetFeedId("onStoryBlockGetFeedId"),
61
+ StoryBlockPdpVisibilityChange("onStoryBlockPdpVisibilityChange"),
60
62
  }
@@ -0,0 +1,6 @@
1
+ package com.fireworksdk.bridge.models.enums
2
+
3
+ enum class FWLivestreamPlayerVersion(val rawValue: String) {
4
+ V1("v1"),
5
+ V2("v2"),
6
+ }
@@ -22,6 +22,8 @@ import com.fireworksdk.bridge.models.enums.FWVideoFeedMode
22
22
  import com.fireworksdk.bridge.models.enums.FWVideoFeedSource
23
23
  import com.fireworksdk.bridge.reactnative.utils.FWEventUtils
24
24
  import com.fireworksdk.bridge.utils.FWLogUtils
25
+ import com.fireworksdk.bridge.utils.FWModelUtils.internalLiveStreamStatus
26
+ import com.fireworksdk.bridge.utils.FWModelUtils.internalVideoType
25
27
  import org.json.JSONObject
26
28
 
27
29
 
@@ -178,6 +180,8 @@ class FWVideoFeedManager : SimpleViewManager<FWVideoFeed>() {
178
180
  videoFeed.videoFeedPropsModel.playlistGroup,
179
181
  videoFeed.videoFeedPropsModel.playlist,
180
182
  videoFeed.videoFeedPropsModel.channel,
183
+ feedItem.videoInfo.internalVideoType,
184
+ feedItem.videoInfo.internalLiveStreamStatus,
181
185
  videoFeed.videoFeedPropsModel.dynamicContentParameters
182
186
  )
183
187
  FWEventUtils.sendVideoFeedClickEvent(reactContext, fwVideoFeedItemDetailsModel)
@@ -16,4 +16,5 @@ interface FireworkSDKInterface {
16
16
  fun restart(promise: Promise)
17
17
  fun trackPurchase(config: ReadableMap?, promise: Promise)
18
18
  fun setDataTrackingLevel(level: String?, promise: Promise)
19
+ fun setLivestreamPlayerDesignVersion(version: String?, promise: Promise)
19
20
  }
@@ -280,7 +280,7 @@ class FWVideoShoppingModule(
280
280
  }
281
281
  })
282
282
 
283
- FireworkSdk.shopping.setOnCtaButtonClicked { productId, unitId, productWebUrl, videoInfo ->
283
+ FireworkSdk.shopping.setOnCtaButtonClicked { productId, unitId, productWebUrl, videoInfo, product ->
284
284
  FWLogUtils.d { "FWVideoShoppingModule updateCart, productId: $productId, unitId: $unitId" }
285
285
 
286
286
  FireworkSdk.shopping.setCtaButtonStatus(Shopping.CtaButtonStatus.Loading)
@@ -321,7 +321,7 @@ class FWVideoShoppingModule(
321
321
  }
322
322
  })
323
323
 
324
- FireworkSdk.shopping.setOnProductLinkClickListener { productId, unitId, productWebUrl, videoInfo ->
324
+ FireworkSdk.shopping.setOnProductLinkClickListener { productId, unitId, productWebUrl, videoInfo, product ->
325
325
  if (FWGlobalDataUtil.customClickLinkButtonEnabled) {
326
326
  val videoPlaybackDetails = FWModelUtils.convertVideoInfo2PlaybackDetails(videoInfo)
327
327
 
@@ -363,7 +363,7 @@ class FWVideoShoppingModule(
363
363
  }
364
364
 
365
365
  private fun productCardListener() {
366
- FireworkSdk.shopping.setOnProductCardClickListener { productId, unitId, productWebUrl, videoInfo ->
366
+ FireworkSdk.shopping.setOnProductCardClickListener { productId, unitId, productWebUrl, videoInfo, product ->
367
367
  FWLogUtils.d { "FWVideoShoppingModule productCardClick $productId $unitId $productWebUrl" }
368
368
  val videoPlaybackDetails = FWModelUtils.convertVideoInfo2PlaybackDetails(videoInfo)
369
369
  if (isCustomProductCardEnabled) {
@@ -13,10 +13,12 @@ import com.firework.analyticsevents.player.PlayerLifecycleAnalyticsEvent
13
13
  import com.firework.analyticsevents.share.ShareButtonAnalyticsEvent
14
14
  import com.firework.bus.FwAnalyticCallable
15
15
  import com.firework.sdk.FireworkSdk
16
+ import com.firework.sdk.FwLivestreamPlayerVersion
16
17
  import com.firework.sdk.FwTrackingLevel
17
18
  import com.fireworksdk.bridge.FWInitializationProvider
18
19
  import com.fireworksdk.bridge.models.*
19
20
  import com.fireworksdk.bridge.models.enums.FWDataTrackingLevel
21
+ import com.fireworksdk.bridge.models.enums.FWLivestreamPlayerVersion
20
22
  import com.fireworksdk.bridge.models.enums.FWVideoPlaybackSubEventName
21
23
  import com.fireworksdk.bridge.reactnative.FWReactNativeSDK
22
24
  import com.fireworksdk.bridge.reactnative.models.FireworkSDKInterface
@@ -323,6 +325,18 @@ class FireworkSDKModule(
323
325
  promise.resolve(true)
324
326
  }
325
327
 
328
+ @ReactMethod
329
+ override fun setLivestreamPlayerDesignVersion(version: String?, promise: Promise) {
330
+ val playerVersion =
331
+ when (version) {
332
+ FWLivestreamPlayerVersion.V1.rawValue -> FwLivestreamPlayerVersion.V1
333
+ FWLivestreamPlayerVersion.V2.rawValue -> FwLivestreamPlayerVersion.V2
334
+ else -> FwLivestreamPlayerVersion.V1
335
+ }
336
+ FireworkSdk.setLivestreamPlayerVersion(playerVersion)
337
+ promise.resolve(true)
338
+ }
339
+
326
340
  @ReactMethod
327
341
  fun addListener(eventName: String?, promise: Promise) {
328
342
  // Set up any upstream listeners or background tasks as necessary