react-native-firework-sdk 2.12.1 → 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/build.gradle +3 -2
- package/android/gradle.properties +4 -3
- package/android/src/main/AndroidManifest.xml +14 -0
- package/android/src/main/java/com/fireworksdk/bridge/FWInitializationProvider.kt +4 -0
- package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt +1 -2
- 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/FWVideoPlayerLogoConfigurationModel.kt +1 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerLogoConfigurationModelDeserializer.kt +3 -0
- package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerLogoConfigurationModelSerializer.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/FWNavigatorInterface.kt +2 -0
- 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/FWNavigatorModule.kt +26 -0
- 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 +43 -19
- 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 +25 -2
- 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 +16 -8
- package/ios/Components/StoryBlock.swift +5 -8
- package/ios/Components/VideoFeed.swift +1 -5
- 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 +29 -12
- 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/models/VideoPlayerLivestreamCountdownTimerTheme.js +2 -0
- package/lib/commonjs/models/VideoPlayerLivestreamCountdownTimerTheme.js.map +1 -0
- 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 +28 -11
- 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/models/VideoPlayerLivestreamCountdownTimerTheme.js +2 -0
- package/lib/module/models/VideoPlayerLivestreamCountdownTimerTheme.js.map +1 -0
- 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 +16 -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/ReplayBadgeConfiguration.d.ts +1 -1
- package/lib/typescript/models/StoryBlockConfiguration.d.ts +0 -2
- package/lib/typescript/models/VideoFeedConfiguration.d.ts +0 -1
- package/lib/typescript/models/VideoPlayerLivestreamCountdownTimerTheme.d.ts +1 -0
- 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 +24 -7
- package/src/index.ts +40 -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/ReplayBadgeConfiguration.ts +1 -1
- package/src/models/StoryBlockConfiguration.ts +0 -2
- package/src/models/VideoFeedConfiguration.ts +0 -1
- package/src/models/VideoPlayerLivestreamCountdownTimerTheme.ts +1 -0
- 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>
|
package/android/build.gradle
CHANGED
|
@@ -5,7 +5,6 @@ buildscript {
|
|
|
5
5
|
repositories {
|
|
6
6
|
google()
|
|
7
7
|
mavenCentral()
|
|
8
|
-
mavenLocal()
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
dependencies {
|
|
@@ -35,6 +34,7 @@ android {
|
|
|
35
34
|
defaultConfig {
|
|
36
35
|
minSdkVersion getExtOrIntegerDefault('minSdkVersion')
|
|
37
36
|
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
|
|
37
|
+
manifestPlaceholders["fw_player_launch_mode"] = getExtOrDefault('fwPlayerLaunchMode')
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// LOG_LEVEL: VERBOSE(2), DEBUG(3), INFO(4), WARN(5), ERROR(6), ASSERT(7)
|
|
@@ -61,9 +61,9 @@ android {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
repositories {
|
|
64
|
+
mavenLocal()
|
|
64
65
|
mavenCentral()
|
|
65
66
|
google()
|
|
66
|
-
mavenLocal()
|
|
67
67
|
|
|
68
68
|
maven {
|
|
69
69
|
setUrl("https://s01.oss.sonatype.org/content/repositories/snapshots/")
|
|
@@ -144,5 +144,6 @@ dependencies {
|
|
|
144
144
|
def fireworkSdkVersion = getExtOrDefault('fwNativeVersion')
|
|
145
145
|
implementation "com.firework:sdk:$fireworkSdkVersion"
|
|
146
146
|
implementation "com.firework.feature:uiKit:$fireworkSdkVersion"
|
|
147
|
+
implementation "com.firework.feature.player:pager:$fireworkSdkVersion"
|
|
147
148
|
}
|
|
148
149
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
android.useAndroidX=true
|
|
2
1
|
android.enableJetifier=true
|
|
2
|
+
android.useAndroidX=true
|
|
3
3
|
org.gradle.jvmargs=-Xmx1536M
|
|
4
|
-
FireworkSDK_kotlinVersion=1.
|
|
4
|
+
FireworkSDK_kotlinVersion=1.8.22
|
|
5
5
|
FireworkSDK_minSdkVersion=21
|
|
6
6
|
FireworkSDK_compileSdkVersion=33
|
|
7
7
|
FireworkSDK_targetSdkVersion=33
|
|
8
|
-
|
|
8
|
+
FireworkSDK_fwPlayerLaunchMode=singleTask
|
|
9
|
+
FireworkSDK_fwNativeVersion=6.11.0
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:tools="http://schemas.android.com/tools"
|
|
2
3
|
package="com.fireworksdk.bridge">
|
|
3
4
|
|
|
4
5
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
@@ -23,6 +24,19 @@
|
|
|
23
24
|
android:name="Firework:RecyclerViewRequestLayoutEnable"
|
|
24
25
|
android:value="true" />
|
|
25
26
|
|
|
27
|
+
<activity
|
|
28
|
+
android:name="com.firework.player.pager.PlayerActivity"
|
|
29
|
+
android:autoRemoveFromRecents="true"
|
|
30
|
+
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
|
|
31
|
+
android:exported="true"
|
|
32
|
+
android:launchMode="${fw_player_launch_mode}"
|
|
33
|
+
android:screenOrientation="portrait"
|
|
34
|
+
android:supportsPictureInPicture="true"
|
|
35
|
+
android:theme="@style/FwPlayerPagerPlayerActivity"
|
|
36
|
+
android:windowSoftInputMode="adjustPan"
|
|
37
|
+
tools:replace="android:launchMode"
|
|
38
|
+
tools:targetApi="n" />
|
|
39
|
+
|
|
26
40
|
</application>
|
|
27
41
|
|
|
28
42
|
</manifest>
|
|
@@ -14,6 +14,7 @@ class FWInitializationProvider: ContentProvider() {
|
|
|
14
14
|
|
|
15
15
|
var application: Application? = null
|
|
16
16
|
var resumedActivity by weakProperty<Activity?>()
|
|
17
|
+
var mainActivity by weakProperty<Activity?>()
|
|
17
18
|
|
|
18
19
|
override fun onCreate(): Boolean {
|
|
19
20
|
sInstance = this
|
|
@@ -36,6 +37,9 @@ class FWInitializationProvider: ContentProvider() {
|
|
|
36
37
|
|
|
37
38
|
override fun onActivityResumed(activity: Activity) {
|
|
38
39
|
resumedActivity = activity
|
|
40
|
+
if (mainActivity == null) { // only set once
|
|
41
|
+
mainActivity = activity
|
|
42
|
+
}
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
override fun onActivityPaused(activity: Activity) {
|
package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt
CHANGED
|
@@ -119,8 +119,7 @@ class StoryBlockFragment : FWBaseFragment() {
|
|
|
119
119
|
childFragmentManager,
|
|
120
120
|
viewLifecycleOwner,
|
|
121
121
|
viewOptionsBuilder.build(),
|
|
122
|
-
FWGlobalDataUtil.pauseWhenNotVisible
|
|
123
|
-
videoFeedPropsModel?.videoPlayerConfiguration?.countdownTimerConfiguration?.isHidden == false
|
|
122
|
+
FWGlobalDataUtil.pauseWhenNotVisible
|
|
124
123
|
)
|
|
125
124
|
isStoryBlockInitializer = true
|
|
126
125
|
|
|
@@ -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
|
|
@@ -7,16 +7,19 @@ object FWVideoPlayerLogoConfigurationModelDeserializer {
|
|
|
7
7
|
|
|
8
8
|
private const val OPTION_KEY = "option"
|
|
9
9
|
private const val ENCODED_ID_KEY = "encodedId"
|
|
10
|
+
private const val IS_CLICKABLE = "isClickable"
|
|
10
11
|
|
|
11
12
|
fun deserialize(responseJson: JSONObject?): FWVideoPlayerLogoConfigurationModel? {
|
|
12
13
|
responseJson ?: return null
|
|
13
14
|
|
|
14
15
|
val option = if (responseJson.has(OPTION_KEY)) responseJson.optString(OPTION_KEY) else null
|
|
15
16
|
val encodedId = if (responseJson.has(ENCODED_ID_KEY)) responseJson.optString(ENCODED_ID_KEY) else null
|
|
17
|
+
val isClickable = if (responseJson.has(IS_CLICKABLE)) responseJson.optBoolean(IS_CLICKABLE) else null
|
|
16
18
|
|
|
17
19
|
return FWVideoPlayerLogoConfigurationModel(
|
|
18
20
|
option = if (!option.isNullOrBlank()) FWVideoPlayerLogoOption.deserialize(option) else null,
|
|
19
21
|
encodedId = encodedId,
|
|
22
|
+
isClickable = isClickable
|
|
20
23
|
)
|
|
21
24
|
}
|
|
22
25
|
|
|
@@ -7,12 +7,14 @@ object FWVideoPlayerLogoConfigurationModelSerializer {
|
|
|
7
7
|
|
|
8
8
|
private const val OPTION_KEY = "option"
|
|
9
9
|
private const val ENCODED_ID_KEY = "encodedId"
|
|
10
|
+
private const val IS_CLICKABLE = "isClickable"
|
|
10
11
|
|
|
11
12
|
fun serialize(model: FWVideoPlayerLogoConfigurationModel?): JSONObject? {
|
|
12
13
|
model ?: return null
|
|
13
14
|
val jsonObject = JSONObject()
|
|
14
15
|
jsonObject.put(OPTION_KEY, FWVideoPlayerLogoOption.serialize(model.option))
|
|
15
16
|
jsonObject.put(ENCODED_ID_KEY, model.encodedId)
|
|
17
|
+
jsonObject.put(IS_CLICKABLE, model.isClickable)
|
|
16
18
|
return jsonObject
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -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/models/FWNavigatorInterface.kt
CHANGED
|
@@ -11,4 +11,6 @@ interface FWNavigatorInterface {
|
|
|
11
11
|
fun canPopNativeContainer(promise: Promise)
|
|
12
12
|
fun startFloatingPlayer(promise: Promise)
|
|
13
13
|
fun stopFloatingPlayer(promise: Promise)
|
|
14
|
+
fun bringRNContainerToTop(promise: Promise)
|
|
15
|
+
fun bringRNContainerToBottom(promise: Promise)
|
|
14
16
|
}
|
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/FWNavigatorModule.kt
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
package com.fireworksdk.bridge.reactnative.module
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
|
+
import android.content.Intent
|
|
4
5
|
import com.facebook.react.bridge.*
|
|
6
|
+
import com.firework.player.pager.PlayerActivity
|
|
5
7
|
import com.firework.sdk.FireworkSdk
|
|
6
8
|
import com.fireworksdk.bridge.FWInitializationProvider
|
|
7
9
|
import com.fireworksdk.bridge.reactnative.models.FWNavigatorInterface
|
|
@@ -85,6 +87,30 @@ class FWNavigatorModule(
|
|
|
85
87
|
promise.resolve(true)
|
|
86
88
|
}
|
|
87
89
|
|
|
90
|
+
@ReactMethod
|
|
91
|
+
override fun bringRNContainerToTop(promise: Promise) {
|
|
92
|
+
// reorder MainActivity to front
|
|
93
|
+
val mainActivity = FWInitializationProvider.INSTANCE.mainActivity
|
|
94
|
+
mainActivity?.let { mActivity ->
|
|
95
|
+
val resumedActivity = FWInitializationProvider.INSTANCE.resumedActivity
|
|
96
|
+
resumedActivity?.let { rActivity ->
|
|
97
|
+
rActivity.startActivity(
|
|
98
|
+
Intent(rActivity, mActivity::class.java)
|
|
99
|
+
.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@ReactMethod
|
|
106
|
+
override fun bringRNContainerToBottom(promise: Promise) {
|
|
107
|
+
// reorder PlayerActivity to front
|
|
108
|
+
val mainActivity = FWInitializationProvider.INSTANCE.mainActivity
|
|
109
|
+
mainActivity?.let {
|
|
110
|
+
it.startActivity(PlayerActivity.getIntentForReorderToFront(it))
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
88
114
|
@ReactMethod
|
|
89
115
|
fun addListener(eventName: String?, promise: Promise) {
|
|
90
116
|
// Set up any upstream listeners or background tasks as necessary
|
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"
|