react-native-firework-sdk 2.13.0 → 2.14.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.
- package/android/.idea/codeStyles/Project.xml +124 -0
- package/android/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamEventDetailsModel.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModel.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelDeserializer.kt +3 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelSerializer.kt +2 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWDataTrackingLevel.kt +7 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWEventName.kt +2 -1
- package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWSwitchLanguageBehavior.kt +6 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/FWReactNativeSDK.kt +19 -7
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWLiveStreamModule.kt +6 -4
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +29 -19
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +41 -17
- package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +25 -13
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWConfigUtil.kt +4 -0
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWGlobalDataUtil.kt +5 -0
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWLanguageUtil.kt +57 -15
- package/android/src/main/java/com/fireworksdk/bridge/utils/FWModelUtils.kt +9 -1
- package/ios/FireworkSdk.xcodeproj/project.pbxproj +4 -0
- package/ios/Models/NativeToRN/FireworkEventName.swift +1 -0
- package/ios/Models/NativeToRN/FireworkSDK+Json.swift +6 -2
- package/ios/Models/RNToNative/RCTConvert+FireworkSDKModule.swift +13 -0
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +8 -16
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +9 -1
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +1 -0
- package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +96 -31
- package/ios/Modules/Shopping/ShoppingModule.swift +12 -3
- package/ios/Utils/Extensions/NumberFormatter+AppLanguage.swift +27 -0
- package/lib/commonjs/FireworkSDK.js +66 -12
- package/lib/commonjs/FireworkSDK.js.map +1 -1
- package/lib/commonjs/VideoShopping.js +15 -0
- package/lib/commonjs/VideoShopping.js.map +1 -1
- package/lib/commonjs/components/StoryBlock.js +6 -0
- package/lib/commonjs/components/StoryBlock.js.map +1 -1
- package/lib/commonjs/components/VideoFeed.js +14 -6
- package/lib/commonjs/components/VideoFeed.js.map +1 -1
- package/lib/commonjs/index.js +14 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/DataTrackingLevel.js +2 -0
- package/lib/commonjs/models/DataTrackingLevel.js.map +1 -0
- package/lib/commonjs/models/FWComponentType.js +14 -0
- package/lib/commonjs/models/FWComponentType.js.map +1 -0
- package/lib/commonjs/models/FWEventName.js +1 -0
- package/lib/commonjs/models/FWEventName.js.map +1 -1
- package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -1
- package/lib/commonjs/utils/FWGlobalState.js +2 -0
- package/lib/commonjs/utils/FWGlobalState.js.map +1 -1
- package/lib/module/FireworkSDK.js +64 -11
- package/lib/module/FireworkSDK.js.map +1 -1
- package/lib/module/VideoShopping.js +15 -0
- package/lib/module/VideoShopping.js.map +1 -1
- package/lib/module/components/StoryBlock.js +5 -0
- package/lib/module/components/StoryBlock.js.map +1 -1
- package/lib/module/components/VideoFeed.js +13 -6
- package/lib/module/components/VideoFeed.js.map +1 -1
- package/lib/module/index.js +6 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/DataTrackingLevel.js +2 -0
- package/lib/module/models/DataTrackingLevel.js.map +1 -0
- package/lib/module/models/FWComponentType.js +7 -0
- package/lib/module/models/FWComponentType.js.map +1 -0
- package/lib/module/models/FWEventName.js +1 -0
- package/lib/module/models/FWEventName.js.map +1 -1
- package/lib/module/modules/FireworkSDKModule.js.map +1 -1
- package/lib/module/utils/FWGlobalState.js +2 -0
- package/lib/module/utils/FWGlobalState.js.map +1 -1
- package/lib/typescript/FireworkSDK.d.ts +22 -1
- package/lib/typescript/VideoShopping.d.ts +8 -1
- package/lib/typescript/index.d.ts +15 -13
- package/lib/typescript/models/DataTrackingLevel.d.ts +1 -0
- package/lib/typescript/models/FWComponentType.d.ts +4 -0
- package/lib/typescript/models/FWEventName.d.ts +2 -1
- package/lib/typescript/models/FWEvents.d.ts +18 -1
- package/lib/typescript/models/FeedItemDetails.d.ts +0 -1
- package/lib/typescript/models/LiveStreamEventDetails.d.ts +1 -0
- package/lib/typescript/models/VideoFeedConfiguration.d.ts +0 -1
- package/lib/typescript/modules/FireworkSDKModule.d.ts +2 -0
- package/lib/typescript/utils/FWGlobalState.d.ts +2 -0
- package/package.json +1 -1
- package/react-native-firework-sdk.podspec +4 -3
- package/src/FireworkSDK.ts +59 -14
- package/src/VideoShopping.ts +24 -0
- package/src/components/StoryBlock.tsx +8 -0
- package/src/components/VideoFeed.tsx +11 -1
- package/src/index.ts +38 -30
- package/src/models/DataTrackingLevel.ts +1 -0
- package/src/models/FWComponentType.ts +4 -0
- package/src/models/FWEventName.ts +1 -0
- package/src/models/FWEvents.ts +19 -1
- package/src/models/FeedItemDetails.ts +0 -1
- package/src/models/LiveStreamEventDetails.ts +1 -0
- package/src/models/VideoFeedConfiguration.ts +0 -1
- package/src/modules/FireworkSDKModule.ts +2 -0
- package/src/utils/FWGlobalState.ts +3 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
<component name="ProjectCodeStyleConfiguration">
|
|
2
|
+
<code_scheme name="Project" version="173">
|
|
3
|
+
<codeStyleSettings language="XML">
|
|
4
|
+
<option name="FORCE_REARRANGE_MODE" value="1" />
|
|
5
|
+
<indentOptions>
|
|
6
|
+
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
7
|
+
</indentOptions>
|
|
8
|
+
<arrangement>
|
|
9
|
+
<rules>
|
|
10
|
+
<section>
|
|
11
|
+
<rule>
|
|
12
|
+
<match>
|
|
13
|
+
<AND>
|
|
14
|
+
<NAME>xmlns:android</NAME>
|
|
15
|
+
<XML_ATTRIBUTE />
|
|
16
|
+
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
|
17
|
+
</AND>
|
|
18
|
+
</match>
|
|
19
|
+
</rule>
|
|
20
|
+
</section>
|
|
21
|
+
<section>
|
|
22
|
+
<rule>
|
|
23
|
+
<match>
|
|
24
|
+
<AND>
|
|
25
|
+
<NAME>xmlns:.*</NAME>
|
|
26
|
+
<XML_ATTRIBUTE />
|
|
27
|
+
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
|
28
|
+
</AND>
|
|
29
|
+
</match>
|
|
30
|
+
<order>BY_NAME</order>
|
|
31
|
+
</rule>
|
|
32
|
+
</section>
|
|
33
|
+
<section>
|
|
34
|
+
<rule>
|
|
35
|
+
<match>
|
|
36
|
+
<AND>
|
|
37
|
+
<NAME>.*:id</NAME>
|
|
38
|
+
<XML_ATTRIBUTE />
|
|
39
|
+
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
|
40
|
+
</AND>
|
|
41
|
+
</match>
|
|
42
|
+
</rule>
|
|
43
|
+
</section>
|
|
44
|
+
<section>
|
|
45
|
+
<rule>
|
|
46
|
+
<match>
|
|
47
|
+
<AND>
|
|
48
|
+
<NAME>.*:name</NAME>
|
|
49
|
+
<XML_ATTRIBUTE />
|
|
50
|
+
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
|
51
|
+
</AND>
|
|
52
|
+
</match>
|
|
53
|
+
</rule>
|
|
54
|
+
</section>
|
|
55
|
+
<section>
|
|
56
|
+
<rule>
|
|
57
|
+
<match>
|
|
58
|
+
<AND>
|
|
59
|
+
<NAME>name</NAME>
|
|
60
|
+
<XML_ATTRIBUTE />
|
|
61
|
+
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
|
62
|
+
</AND>
|
|
63
|
+
</match>
|
|
64
|
+
</rule>
|
|
65
|
+
</section>
|
|
66
|
+
<section>
|
|
67
|
+
<rule>
|
|
68
|
+
<match>
|
|
69
|
+
<AND>
|
|
70
|
+
<NAME>style</NAME>
|
|
71
|
+
<XML_ATTRIBUTE />
|
|
72
|
+
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
|
73
|
+
</AND>
|
|
74
|
+
</match>
|
|
75
|
+
</rule>
|
|
76
|
+
</section>
|
|
77
|
+
<section>
|
|
78
|
+
<rule>
|
|
79
|
+
<match>
|
|
80
|
+
<AND>
|
|
81
|
+
<NAME>.*</NAME>
|
|
82
|
+
<XML_ATTRIBUTE />
|
|
83
|
+
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
|
84
|
+
</AND>
|
|
85
|
+
</match>
|
|
86
|
+
<order>BY_NAME</order>
|
|
87
|
+
</rule>
|
|
88
|
+
</section>
|
|
89
|
+
<section>
|
|
90
|
+
<rule>
|
|
91
|
+
<match>
|
|
92
|
+
<AND>
|
|
93
|
+
<NAME>.*</NAME>
|
|
94
|
+
<XML_ATTRIBUTE />
|
|
95
|
+
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
|
96
|
+
</AND>
|
|
97
|
+
</match>
|
|
98
|
+
<order>ANDROID_ATTRIBUTE_ORDER</order>
|
|
99
|
+
</rule>
|
|
100
|
+
</section>
|
|
101
|
+
<section>
|
|
102
|
+
<rule>
|
|
103
|
+
<match>
|
|
104
|
+
<AND>
|
|
105
|
+
<NAME>.*</NAME>
|
|
106
|
+
<XML_ATTRIBUTE />
|
|
107
|
+
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
|
108
|
+
</AND>
|
|
109
|
+
</match>
|
|
110
|
+
<order>BY_NAME</order>
|
|
111
|
+
</rule>
|
|
112
|
+
</section>
|
|
113
|
+
</rules>
|
|
114
|
+
</arrangement>
|
|
115
|
+
</codeStyleSettings>
|
|
116
|
+
<codeStyleSettings language="kotlin">
|
|
117
|
+
<indentOptions>
|
|
118
|
+
<option name="INDENT_SIZE" value="2" />
|
|
119
|
+
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
120
|
+
<option name="TAB_SIZE" value="2" />
|
|
121
|
+
</indentOptions>
|
|
122
|
+
</codeStyleSettings>
|
|
123
|
+
</code_scheme>
|
|
124
|
+
</component>
|
|
@@ -18,6 +18,7 @@ data class FWVideoFeedConfigModel(
|
|
|
18
18
|
val hidden: Boolean? = null,
|
|
19
19
|
val textColor: String? = null,
|
|
20
20
|
val fontSize: Int? = null,
|
|
21
|
+
val numberOfLines: Int? = null,
|
|
21
22
|
val fontInfo: FWFontInfoModel? = null,
|
|
22
23
|
val backgroundColor: String? = null,
|
|
23
24
|
val gradientDrawable: FWGradientDrawableModel? = null,
|
package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelDeserializer.kt
CHANGED
|
@@ -18,6 +18,7 @@ object FWVideoFeedConfigModelDeserializer {
|
|
|
18
18
|
private const val HIDDEN_KEY = "hidden"
|
|
19
19
|
private const val TEXT_COLOR_KEY = "textColor"
|
|
20
20
|
private const val FONT_SIZE_KEY = "fontSize"
|
|
21
|
+
private const val NUMBER_OF_LINES = "numberOfLines"
|
|
21
22
|
private const val FONT_INFO_KEY = "androidFontInfo"
|
|
22
23
|
private const val GRADIENT_DRAWABLE_KEY = "gradientDrawable"
|
|
23
24
|
|
|
@@ -55,6 +56,7 @@ object FWVideoFeedConfigModelDeserializer {
|
|
|
55
56
|
val hidden = if (titleJson.has(HIDDEN_KEY)) titleJson.optBoolean(HIDDEN_KEY) else null
|
|
56
57
|
val textColor = if (titleJson.has(TEXT_COLOR_KEY)) titleJson.optString(TEXT_COLOR_KEY) else null
|
|
57
58
|
val fontSize = if (titleJson.has(FONT_SIZE_KEY)) titleJson.optInt(FONT_SIZE_KEY) else null
|
|
59
|
+
val numberOfLines = if (titleJson.has(NUMBER_OF_LINES)) titleJson.optInt(NUMBER_OF_LINES) else null
|
|
58
60
|
val fontInfo = FWFontInfoModelDeserializer.deserialize(titleJson.optJSONObject(FONT_INFO_KEY))
|
|
59
61
|
val backgroundColor = if (titleJson.has(BACKGROUND_COLOR_KEY)) titleJson.optString(BACKGROUND_COLOR_KEY) else null
|
|
60
62
|
val gradientDrawable = FWGradientDrawableModelDeserializer.deserialize(titleJson.optJSONObject(GRADIENT_DRAWABLE_KEY))
|
|
@@ -63,6 +65,7 @@ object FWVideoFeedConfigModelDeserializer {
|
|
|
63
65
|
hidden = hidden,
|
|
64
66
|
textColor = textColor,
|
|
65
67
|
fontSize = fontSize,
|
|
68
|
+
numberOfLines = numberOfLines,
|
|
66
69
|
fontInfo = fontInfo,
|
|
67
70
|
backgroundColor = backgroundColor,
|
|
68
71
|
gradientDrawable = gradientDrawable,
|
package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelSerializer.kt
CHANGED
|
@@ -18,6 +18,7 @@ object FWVideoFeedConfigModelSerializer {
|
|
|
18
18
|
private const val HIDDEN_KEY = "hidden"
|
|
19
19
|
private const val TEXT_COLOR_KEY = "textColor"
|
|
20
20
|
private const val FONT_SIZE_KEY = "fontSize"
|
|
21
|
+
private const val NUMBER_OF_LINES = "numberOfLines"
|
|
21
22
|
private const val FONT_INFO_KEY = "androidFontInfo"
|
|
22
23
|
private const val GRADIENT_DRAWABLE_KEY = "gradientDrawable"
|
|
23
24
|
|
|
@@ -44,6 +45,7 @@ object FWVideoFeedConfigModelSerializer {
|
|
|
44
45
|
jsonObject.put(HIDDEN_KEY, model.hidden)
|
|
45
46
|
jsonObject.put(TEXT_COLOR_KEY, model.textColor)
|
|
46
47
|
jsonObject.put(FONT_SIZE_KEY, model.fontSize)
|
|
48
|
+
jsonObject.put(NUMBER_OF_LINES, model.numberOfLines)
|
|
47
49
|
jsonObject.put(FONT_INFO_KEY, FWFontInfoModelSerializer.serialize(model.fontInfo))
|
|
48
50
|
jsonObject.put(GRADIENT_DRAWABLE_KEY, FWGradientDrawableModelSerializer.serialize(model.gradientDrawable))
|
|
49
51
|
return jsonObject
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
package com.fireworksdk.bridge.models.enums
|
|
2
2
|
|
|
3
3
|
enum class FWEventName(val rawValue: String) {
|
|
4
|
-
|
|
4
|
+
SDKInit("fw:sdk-init"),
|
|
5
5
|
CustomCTAClick("fw:custom-cta-click"),
|
|
6
6
|
VideoPlayback("fw:video-playback"),
|
|
7
7
|
VideoFeedClick("fw:video-feed-click"),
|
|
@@ -42,6 +42,7 @@ enum class FWVideoShoppingEventName(val rawValue: String) {
|
|
|
42
42
|
WillDisplayProduct("fw:shopping:will-display-product"),
|
|
43
43
|
CustomLinkButtonClick("fw:shopping:custom-link-button-click"),
|
|
44
44
|
CustomProductCardTap("fw:shopping:custom-product-card-tap"),
|
|
45
|
+
ProductClick("fw:shopping:product-click"),
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
enum class FWLiveStreamEventName(val rawValue: String) {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
package com.fireworksdk.bridge.reactnative
|
|
2
2
|
|
|
3
|
-
import android.annotation.SuppressLint
|
|
4
3
|
import android.app.Activity
|
|
5
4
|
import android.content.Context
|
|
6
5
|
import android.content.pm.PackageManager
|
|
7
|
-
import android.provider.Settings
|
|
8
|
-
import android.util.Base64
|
|
9
6
|
import com.firework.imageloading.ImageLoader
|
|
10
7
|
import com.firework.livestream.LivestreamPlayerInitializer
|
|
11
8
|
import com.firework.sdk.FireworkSdk
|
|
@@ -13,13 +10,12 @@ import com.firework.sdk.FireworkSdkConfig
|
|
|
13
10
|
import com.fireworksdk.bridge.models.FWSDKInitOptionsModel
|
|
14
11
|
import com.fireworksdk.bridge.models.FWSdkInitResultModel
|
|
15
12
|
import com.fireworksdk.bridge.models.enums.FWPlayerLaunchBehavior
|
|
13
|
+
import com.fireworksdk.bridge.models.enums.FWSwitchLanguageBehavior
|
|
16
14
|
import com.fireworksdk.bridge.utils.FWGlobalDataUtil
|
|
17
15
|
import com.fireworksdk.bridge.utils.FWImageLoaderUtil
|
|
18
16
|
import com.fireworksdk.bridge.utils.FWLanguageUtil
|
|
19
17
|
import com.fireworksdk.bridge.utils.FWLiveStreamUtil
|
|
20
18
|
import com.fireworksdk.bridge.utils.FWLogUtils
|
|
21
|
-
import java.nio.charset.StandardCharsets
|
|
22
|
-
import java.security.MessageDigest
|
|
23
19
|
|
|
24
20
|
object FWReactNativeSDK {
|
|
25
21
|
|
|
@@ -36,11 +32,13 @@ object FWReactNativeSDK {
|
|
|
36
32
|
success = false,
|
|
37
33
|
reason = it
|
|
38
34
|
)
|
|
35
|
+
FWGlobalDataUtil.initCompletedListener?.invoke()
|
|
39
36
|
}, onSuccess = {
|
|
40
37
|
FWGlobalDataUtil.sdkInitResultModel = FWSdkInitResultModel(
|
|
41
38
|
success = true,
|
|
42
39
|
reason = null
|
|
43
40
|
)
|
|
41
|
+
FWGlobalDataUtil.initCompletedListener?.invoke()
|
|
44
42
|
})
|
|
45
43
|
}
|
|
46
44
|
|
|
@@ -56,8 +54,21 @@ object FWReactNativeSDK {
|
|
|
56
54
|
return FWLanguageUtil.getInstance(context).updateBaseContextLocale(context)
|
|
57
55
|
}
|
|
58
56
|
|
|
59
|
-
fun changeLanguage(localeString: String
|
|
60
|
-
FWLanguageUtil.getInstance(
|
|
57
|
+
fun changeLanguage(localeString: String?, context: Context): Boolean {
|
|
58
|
+
val isSameLanguageWithCache = FWLanguageUtil.getInstance(context).isSameLanguageWithCache(localeString)
|
|
59
|
+
return if (!isSameLanguageWithCache) {
|
|
60
|
+
// execute change language behavior
|
|
61
|
+
val changeLanguageResult = FWLanguageUtil.getInstance(context).changeLanguage(localeString)
|
|
62
|
+
// change language success, execute rest of logic
|
|
63
|
+
if (changeLanguageResult && context is Activity && FWGlobalDataUtil.switchLanguageBehavior == FWSwitchLanguageBehavior.RestartingActivity) {
|
|
64
|
+
// restart activity
|
|
65
|
+
FWLanguageUtil.getInstance(context).restartActivity(context)
|
|
66
|
+
}
|
|
67
|
+
changeLanguageResult
|
|
68
|
+
} else {
|
|
69
|
+
// no need to change language, return true means change successfully
|
|
70
|
+
true
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
73
|
|
|
63
74
|
fun initSdkInternal(
|
|
@@ -95,6 +106,7 @@ object FWReactNativeSDK {
|
|
|
95
106
|
FWPlayerLaunchBehavior.MuteOnFirstLaunch -> {
|
|
96
107
|
configBuilder.muteOnLaunch(true)
|
|
97
108
|
}
|
|
109
|
+
|
|
98
110
|
else -> {}
|
|
99
111
|
}
|
|
100
112
|
|
package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWLiveStreamModule.kt
CHANGED
|
@@ -13,6 +13,7 @@ import com.fireworksdk.bridge.models.enums.FWLiveStreamEventName
|
|
|
13
13
|
import com.fireworksdk.bridge.reactnative.models.FWLiveStreamInterface
|
|
14
14
|
import com.fireworksdk.bridge.reactnative.utils.FWEventUtils
|
|
15
15
|
import com.fireworksdk.bridge.utils.FWLogUtils
|
|
16
|
+
import com.fireworksdk.bridge.utils.FWModelUtils
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class FWLiveStreamModule(
|
|
@@ -27,6 +28,7 @@ class FWLiveStreamModule(
|
|
|
27
28
|
@Keep
|
|
28
29
|
@FwAnalyticCallable
|
|
29
30
|
fun onLivestreamEvent(event: LivestreamAnalyticEvent) {
|
|
31
|
+
val liveStreamEventDetailsModel = FWModelUtils.convertVideoInfo2LivestreamDetails(event.videoInfo)
|
|
30
32
|
when (event) {
|
|
31
33
|
is LivestreamAnalyticEvent.UserSentChatMessage -> {
|
|
32
34
|
FWLogUtils.d { "userSentChat: $event" }
|
|
@@ -34,7 +36,7 @@ class FWLiveStreamModule(
|
|
|
34
36
|
reactApplicationContext,
|
|
35
37
|
FWLiveStreamEventName.UserSendChat.rawValue,
|
|
36
38
|
FWLiveStreamMessageDetailsModel(event.messageId, event.username, event.messageText),
|
|
37
|
-
|
|
39
|
+
liveStreamEventDetailsModel
|
|
38
40
|
)
|
|
39
41
|
}
|
|
40
42
|
is LivestreamAnalyticEvent.UserJoined -> {
|
|
@@ -42,7 +44,7 @@ class FWLiveStreamModule(
|
|
|
42
44
|
FWEventUtils.sendLiveStreamEvent(
|
|
43
45
|
reactApplicationContext,
|
|
44
46
|
FWLiveStreamEventName.UserJoin.rawValue,
|
|
45
|
-
|
|
47
|
+
liveStreamEventDetailsModel
|
|
46
48
|
)
|
|
47
49
|
}
|
|
48
50
|
is LivestreamAnalyticEvent.UserLeft -> {
|
|
@@ -50,7 +52,7 @@ class FWLiveStreamModule(
|
|
|
50
52
|
FWEventUtils.sendLiveStreamEvent(
|
|
51
53
|
reactApplicationContext,
|
|
52
54
|
FWLiveStreamEventName.UserLeave.rawValue,
|
|
53
|
-
|
|
55
|
+
liveStreamEventDetailsModel
|
|
54
56
|
)
|
|
55
57
|
}
|
|
56
58
|
is LivestreamAnalyticEvent.UserSentLike -> {
|
|
@@ -58,7 +60,7 @@ class FWLiveStreamModule(
|
|
|
58
60
|
FWEventUtils.sendLiveStreamEvent(
|
|
59
61
|
reactApplicationContext,
|
|
60
62
|
FWLiveStreamEventName.UserSendLike.rawValue,
|
|
61
|
-
|
|
63
|
+
liveStreamEventDetailsModel
|
|
62
64
|
)
|
|
63
65
|
}
|
|
64
66
|
}
|
package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt
CHANGED
|
@@ -34,11 +34,13 @@ class FWVideoShoppingModule(
|
|
|
34
34
|
private var ctaHandler: Triple<Int, String, String>? = null
|
|
35
35
|
private val updateProductHandler: HashMap<String, List<Product>> = HashMap()
|
|
36
36
|
private val updateProductHydratorHandler: HashMap<String, ProductHydrator> = HashMap()
|
|
37
|
+
private var isCustomProductCardEnabled = false
|
|
37
38
|
|
|
38
39
|
@ReactMethod
|
|
39
40
|
override fun init() {
|
|
40
41
|
cartListener()
|
|
41
42
|
productListener()
|
|
43
|
+
productCardListener()
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
@ReactMethod
|
|
@@ -344,13 +346,27 @@ class FWVideoShoppingModule(
|
|
|
344
346
|
|
|
345
347
|
@ReactMethod
|
|
346
348
|
override fun setCustomTapProductCardEnabled(value: Boolean?, promise: Promise) {
|
|
349
|
+
isCustomProductCardEnabled = value ?: false
|
|
350
|
+
promise.resolve(true)
|
|
351
|
+
}
|
|
347
352
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
353
|
+
@ReactMethod
|
|
354
|
+
fun addListener(eventName: String?) {
|
|
355
|
+
// Set up any upstream listeners or background tasks as necessary
|
|
356
|
+
FWLogUtils.d { "addListener: $eventName" }
|
|
357
|
+
}
|
|
351
358
|
|
|
352
|
-
|
|
359
|
+
@ReactMethod
|
|
360
|
+
fun removeListeners(count: Int?) {
|
|
361
|
+
// Remove upstream listeners, stop unnecessary background tasks
|
|
362
|
+
FWLogUtils.d { "removeListeners: $count" }
|
|
363
|
+
}
|
|
353
364
|
|
|
365
|
+
private fun productCardListener() {
|
|
366
|
+
FireworkSdk.shopping.setOnProductCardClickListener { productId, unitId, productWebUrl, videoInfo ->
|
|
367
|
+
FWLogUtils.d { "FWVideoShoppingModule productCardClick $productId $unitId $productWebUrl" }
|
|
368
|
+
val videoPlaybackDetails = FWModelUtils.convertVideoInfo2PlaybackDetails(videoInfo)
|
|
369
|
+
if (isCustomProductCardEnabled) {
|
|
354
370
|
FWEventUtils.sendProductCardClickEvent(
|
|
355
371
|
reactApplicationContext,
|
|
356
372
|
productWebUrl,
|
|
@@ -360,25 +376,19 @@ class FWVideoShoppingModule(
|
|
|
360
376
|
callbackId
|
|
361
377
|
)
|
|
362
378
|
}
|
|
363
|
-
|
|
364
|
-
|
|
379
|
+
// send onClickProduct
|
|
380
|
+
FWEventUtils.sendProductClickEvent(
|
|
381
|
+
reactApplicationContext,
|
|
382
|
+
productWebUrl,
|
|
383
|
+
productId,
|
|
384
|
+
unitId,
|
|
385
|
+
videoPlaybackDetails
|
|
386
|
+
)
|
|
387
|
+
isCustomProductCardEnabled
|
|
365
388
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
promise.resolve(true)
|
|
369
389
|
}
|
|
370
390
|
|
|
371
|
-
@ReactMethod
|
|
372
|
-
fun addListener(eventName: String?) {
|
|
373
|
-
// Set up any upstream listeners or background tasks as necessary
|
|
374
|
-
FWLogUtils.d { "addListener: $eventName" }
|
|
375
|
-
}
|
|
376
391
|
|
|
377
|
-
@ReactMethod
|
|
378
|
-
fun removeListeners(count: Int?) {
|
|
379
|
-
// Remove upstream listeners, stop unnecessary background tasks
|
|
380
|
-
FWLogUtils.d { "removeListeners: $count" }
|
|
381
|
-
}
|
|
382
392
|
|
|
383
393
|
override fun getName(): String {
|
|
384
394
|
return "ShoppingModule"
|
package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt
CHANGED
|
@@ -13,8 +13,10 @@ 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.FwTrackingLevel
|
|
16
17
|
import com.fireworksdk.bridge.FWInitializationProvider
|
|
17
18
|
import com.fireworksdk.bridge.models.*
|
|
19
|
+
import com.fireworksdk.bridge.models.enums.FWDataTrackingLevel
|
|
18
20
|
import com.fireworksdk.bridge.models.enums.FWVideoPlaybackSubEventName
|
|
19
21
|
import com.fireworksdk.bridge.reactnative.FWReactNativeSDK
|
|
20
22
|
import com.fireworksdk.bridge.reactnative.models.FireworkSDKInterface
|
|
@@ -29,6 +31,30 @@ class FireworkSDKModule(
|
|
|
29
31
|
reactContext: ReactApplicationContext
|
|
30
32
|
) : ReactContextBaseJavaModule(reactContext), FireworkSDKInterface {
|
|
31
33
|
|
|
34
|
+
init {
|
|
35
|
+
FWGlobalDataUtil.initCompletedListener = {
|
|
36
|
+
initCallback()
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private fun initCallback(): Boolean {
|
|
41
|
+
val sdkInitResultModel = FWGlobalDataUtil.sdkInitResultModel
|
|
42
|
+
return if (sdkInitResultModel != null) { // init in application
|
|
43
|
+
if (sdkInitResultModel.success == true) {
|
|
44
|
+
FWEventUtils.sendInitSuccessEvent(reactApplicationContext)
|
|
45
|
+
} else if (sdkInitResultModel.success == false) {
|
|
46
|
+
FWEventUtils.sendInitFailedEvent(reactApplicationContext, sdkInitResultModel.reason)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
FireworkSdk.analytics.register(this)
|
|
50
|
+
true
|
|
51
|
+
} else {
|
|
52
|
+
false
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
32
58
|
/**
|
|
33
59
|
* Initializes FW SDK
|
|
34
60
|
*
|
|
@@ -63,22 +89,7 @@ class FireworkSDKModule(
|
|
|
63
89
|
override fun markInitCalled(promise: Promise) {
|
|
64
90
|
FWColorUtil.useRgba = true
|
|
65
91
|
FWGlobalDataUtil.pauseWhenNotVisible = true
|
|
66
|
-
|
|
67
|
-
val sdkInitResultModel = FWGlobalDataUtil.sdkInitResultModel
|
|
68
|
-
if (sdkInitResultModel != null) { // init in application
|
|
69
|
-
if (sdkInitResultModel.success == true) {
|
|
70
|
-
FWEventUtils.sendInitSuccessEvent(reactApplicationContext)
|
|
71
|
-
} else if (sdkInitResultModel.success == false) {
|
|
72
|
-
FWEventUtils.sendInitFailedEvent(reactApplicationContext, sdkInitResultModel.reason)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
FireworkSdk.analytics.register(this)
|
|
76
|
-
promise.resolve(true)
|
|
77
|
-
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
promise.resolve(false)
|
|
92
|
+
promise.resolve(initCallback())
|
|
82
93
|
}
|
|
83
94
|
|
|
84
95
|
/**
|
|
@@ -236,7 +247,7 @@ class FireworkSDKModule(
|
|
|
236
247
|
return
|
|
237
248
|
}
|
|
238
249
|
UiThreadUtil.runOnUiThread {
|
|
239
|
-
val result =
|
|
250
|
+
val result = FWReactNativeSDK.changeLanguage(language, activity)
|
|
240
251
|
promise.resolve(result)
|
|
241
252
|
}
|
|
242
253
|
}
|
|
@@ -299,6 +310,19 @@ class FireworkSDKModule(
|
|
|
299
310
|
}
|
|
300
311
|
}
|
|
301
312
|
|
|
313
|
+
@ReactMethod
|
|
314
|
+
override fun setDataTrackingLevel(level: String?, promise: Promise) {
|
|
315
|
+
val trackingLevel =
|
|
316
|
+
when (level) {
|
|
317
|
+
FWDataTrackingLevel.ALL.rawValue -> FwTrackingLevel.ALL
|
|
318
|
+
FWDataTrackingLevel.NONE.rawValue -> FwTrackingLevel.NONE
|
|
319
|
+
FWDataTrackingLevel.ESSENTIAL_ONLY.rawValue -> FwTrackingLevel.ESSENTIAL_ONLY
|
|
320
|
+
else -> FwTrackingLevel.ALL
|
|
321
|
+
}
|
|
322
|
+
FireworkSdk.setTrackingLevel(trackingLevel)
|
|
323
|
+
promise.resolve(true)
|
|
324
|
+
}
|
|
325
|
+
|
|
302
326
|
@ReactMethod
|
|
303
327
|
fun addListener(eventName: String?, promise: Promise) {
|
|
304
328
|
// Set up any upstream listeners or background tasks as necessary
|
|
@@ -18,7 +18,7 @@ import java.util.*
|
|
|
18
18
|
object FWEventUtils {
|
|
19
19
|
|
|
20
20
|
fun sendInitSuccessEvent(reactContext: ReactContext) {
|
|
21
|
-
sendEvent(reactContext, FWEventName.
|
|
21
|
+
sendEvent(reactContext, FWEventName.SDKInit.rawValue, Arguments.createMap())
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
fun sendInitFailedEvent(reactContext: ReactContext, reason: String?) {
|
|
@@ -26,7 +26,7 @@ object FWEventUtils {
|
|
|
26
26
|
val contentMap = Arguments.createMap()
|
|
27
27
|
contentMap.putString(FWSDKInitSubEventName.InitFailed.rawValue, reason?:"unknown")
|
|
28
28
|
eventMap.putMap("error", contentMap)
|
|
29
|
-
sendEvent(reactContext, FWEventName.
|
|
29
|
+
sendEvent(reactContext, FWEventName.SDKInit.rawValue, eventMap)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
fun sendVideoFeedClickEvent(reactContext: ReactContext, info: FWVideoFeedItemDetailsModel) {
|
|
@@ -79,6 +79,17 @@ object FWEventUtils {
|
|
|
79
79
|
sendEvent(reactContext, FWEventName.VideoPlayback.rawValue, eventMap)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
private fun convertLiveStreamDetails2Map(info: FWLiveStreamEventDetailsModel?): WritableMap {
|
|
83
|
+
val contentMap = Arguments.createMap()
|
|
84
|
+
if (!info?.id.isNullOrBlank()) {
|
|
85
|
+
contentMap.putString("id", info?.id)
|
|
86
|
+
}
|
|
87
|
+
if (!info?.feedId.isNullOrBlank()) {
|
|
88
|
+
contentMap.putString("feedId", info?.feedId)
|
|
89
|
+
}
|
|
90
|
+
return contentMap
|
|
91
|
+
}
|
|
92
|
+
|
|
82
93
|
private fun convertVideoPlaybackDetails2Map(info: FWVideoPlaybackDetails?): WritableMap {
|
|
83
94
|
val contentMap = Arguments.createMap()
|
|
84
95
|
if (!info?.id.isNullOrBlank()) {
|
|
@@ -244,11 +255,7 @@ object FWEventUtils {
|
|
|
244
255
|
val eventMap = Arguments.createMap()
|
|
245
256
|
eventMap.putString("eventName", eventName)
|
|
246
257
|
|
|
247
|
-
|
|
248
|
-
if (!info?.id.isNullOrBlank()) {
|
|
249
|
-
contentMap.putString("id", info?.id)
|
|
250
|
-
}
|
|
251
|
-
eventMap.putMap("info", contentMap)
|
|
258
|
+
eventMap.putMap("info", convertLiveStreamDetails2Map(info))
|
|
252
259
|
sendEvent(reactContext, FWEventName.LiveStream.rawValue, eventMap)
|
|
253
260
|
}
|
|
254
261
|
|
|
@@ -267,14 +274,10 @@ object FWEventUtils {
|
|
|
267
274
|
if (!message?.text.isNullOrBlank()) {
|
|
268
275
|
chatMap.putString("text", message?.text)
|
|
269
276
|
}
|
|
270
|
-
eventMap.putMap("
|
|
277
|
+
eventMap.putMap("message", chatMap)
|
|
271
278
|
|
|
272
279
|
// live stream map
|
|
273
|
-
|
|
274
|
-
if (!liveStream?.id.isNullOrBlank()) {
|
|
275
|
-
liveStreamMap.putString("id", liveStream?.id)
|
|
276
|
-
}
|
|
277
|
-
eventMap.putMap("liveStream", liveStreamMap)
|
|
280
|
+
eventMap.putMap("liveStream", convertLiveStreamDetails2Map(liveStream))
|
|
278
281
|
|
|
279
282
|
sendEvent(reactContext, FWEventName.LiveStreamChat.rawValue, eventMap)
|
|
280
283
|
}
|
|
@@ -289,6 +292,15 @@ object FWEventUtils {
|
|
|
289
292
|
sendEvent(reactContext, FWVideoShoppingEventName.CustomProductCardTap.rawValue, eventMap)
|
|
290
293
|
}
|
|
291
294
|
|
|
295
|
+
fun sendProductClickEvent(reactContext: ReactContext, url: String?, productId: String?, unitId: String?, info: FWVideoPlaybackDetails?) {
|
|
296
|
+
val eventMap = Arguments.createMap()
|
|
297
|
+
eventMap.putString("url", url?:"")
|
|
298
|
+
eventMap.putString("productId", productId)
|
|
299
|
+
eventMap.putString("unitId", unitId)
|
|
300
|
+
eventMap.putMap("video", convertVideoPlaybackDetails2Map(info))
|
|
301
|
+
sendEvent(reactContext, FWVideoShoppingEventName.ProductClick.rawValue, eventMap)
|
|
302
|
+
}
|
|
303
|
+
|
|
292
304
|
fun sendCustomLinkButtonClickEvent(reactContext: ReactContext, url: String?, productId: String?, unitId: String?, info: FWVideoPlaybackDetails?, callbackId: Int?) {
|
|
293
305
|
val eventMap = Arguments.createMap()
|
|
294
306
|
eventMap.putString("url", url ?: "")
|
|
@@ -137,6 +137,7 @@ object FWConfigUtil {
|
|
|
137
137
|
val titleHidden = title.hidden
|
|
138
138
|
val titleTextColor = title.textColor
|
|
139
139
|
val titleFontSize = title.fontSize
|
|
140
|
+
val titleNumberOfLines = title.numberOfLines
|
|
140
141
|
val titleBackgroundColor = title.backgroundColor
|
|
141
142
|
val titleGradientDrawable = title.gradientDrawable
|
|
142
143
|
val typeface = getTypeface(context, title.fontInfo)
|
|
@@ -149,6 +150,9 @@ object FWConfigUtil {
|
|
|
149
150
|
if (titleFontSize != null && titleFontSize > 0) {
|
|
150
151
|
titleOptionBuilder.feedTitleTextSize(FWCommonUtil.spToPx(titleFontSize.toFloat(), context))
|
|
151
152
|
}
|
|
153
|
+
if (titleNumberOfLines != null && titleNumberOfLines > 0 && titleNumberOfLines < 6) {
|
|
154
|
+
titleOptionBuilder.feedTitleTextNumberOfLines(titleNumberOfLines.toInt())
|
|
155
|
+
}
|
|
152
156
|
typeface?.let {
|
|
153
157
|
titleOptionBuilder.feedTitleTextTypeface(it)
|
|
154
158
|
}
|
|
@@ -2,6 +2,7 @@ package com.fireworksdk.bridge.utils
|
|
|
2
2
|
|
|
3
3
|
import com.fireworksdk.bridge.models.FWAdBadgeConfigModel
|
|
4
4
|
import com.fireworksdk.bridge.models.FWSdkInitResultModel
|
|
5
|
+
import com.fireworksdk.bridge.models.enums.FWSwitchLanguageBehavior
|
|
5
6
|
|
|
6
7
|
object FWGlobalDataUtil {
|
|
7
8
|
|
|
@@ -18,4 +19,8 @@ object FWGlobalDataUtil {
|
|
|
18
19
|
var shareBaseUrl: String? = null
|
|
19
20
|
|
|
20
21
|
var pauseWhenNotVisible: Boolean = false
|
|
22
|
+
|
|
23
|
+
var switchLanguageBehavior = FWSwitchLanguageBehavior.RestartingActivity
|
|
24
|
+
|
|
25
|
+
var initCompletedListener: (() -> Unit)? = null
|
|
21
26
|
}
|