@datadog/mobile-react-native-session-replay 2.3.6-alpha.0 → 2.4.0-alpha.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/DatadogSDKReactNativeSessionReplay.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/ReactNativeSessionReplayExtensionSupport.kt +9 -26
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/mappers/{ReactMaskTextMapper.kt → ReactEditTextMapper.kt} +30 -12
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/mappers/ReactTextMapper.kt +19 -7
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/mappers/ReactViewGroupMapper.kt +19 -7
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/utils/TextViewUtils.kt +1 -1
- package/android/src/test/kotlin/com/datadog/reactnative/sessionreplay/ReactNativeSessionReplayExtensionSupportTest.kt +7 -45
- package/android/src/test/kotlin/com/datadog/reactnative/sessionreplay/mappers/ReactViewGroupMapperTest.kt +11 -5
- package/android/src/test/kotlin/com/datadog/reactnative/sessionreplay/utils/TextViewUtilsTest.kt +2 -2
- package/ios/Sources/DdSessionReplayImplementation.swift +1 -1
- package/package.json +1 -1
- package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/mappers/ReactMaskInputTextMapper.kt +0 -54
|
@@ -19,7 +19,7 @@ Pod::Spec.new do |s|
|
|
|
19
19
|
s.dependency "React-Core"
|
|
20
20
|
|
|
21
21
|
# /!\ Remember to keep the version in sync with DatadogSDKReactNative.podspec
|
|
22
|
-
s.dependency 'DatadogSessionReplay', '~> 2.
|
|
22
|
+
s.dependency 'DatadogSessionReplay', '~> 2.13.0'
|
|
23
23
|
s.dependency 'DatadogSDKReactNative'
|
|
24
24
|
|
|
25
25
|
s.test_spec 'Tests' do |test_spec|
|
package/android/build.gradle
CHANGED
|
@@ -188,7 +188,7 @@ dependencies {
|
|
|
188
188
|
api "com.facebook.react:react-android:$reactNativeVersion"
|
|
189
189
|
}
|
|
190
190
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
191
|
-
implementation "com.datadoghq:dd-sdk-android-session-replay:2.
|
|
191
|
+
implementation "com.datadoghq:dd-sdk-android-session-replay:2.11.0"
|
|
192
192
|
implementation project(path: ':datadog_mobile-react-native')
|
|
193
193
|
|
|
194
194
|
testImplementation "org.junit.platform:junit-platform-launcher:1.6.2"
|
|
@@ -6,15 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
package com.datadog.reactnative.sessionreplay
|
|
8
8
|
|
|
9
|
-
import android.view.View
|
|
10
9
|
import androidx.annotation.VisibleForTesting
|
|
11
10
|
import com.datadog.android.api.InternalLogger
|
|
12
11
|
import com.datadog.android.sessionreplay.ExtensionSupport
|
|
13
|
-
import com.datadog.android.sessionreplay.
|
|
14
|
-
import com.datadog.android.sessionreplay.
|
|
15
|
-
import com.datadog.
|
|
16
|
-
import com.datadog.reactnative.sessionreplay.mappers.ReactMaskInputTextMapper
|
|
17
|
-
import com.datadog.reactnative.sessionreplay.mappers.ReactMaskTextMapper
|
|
12
|
+
import com.datadog.android.sessionreplay.MapperTypeWrapper
|
|
13
|
+
import com.datadog.android.sessionreplay.recorder.OptionSelectorDetector
|
|
14
|
+
import com.datadog.reactnative.sessionreplay.mappers.ReactEditTextMapper
|
|
18
15
|
import com.datadog.reactnative.sessionreplay.mappers.ReactTextMapper
|
|
19
16
|
import com.datadog.reactnative.sessionreplay.mappers.ReactViewGroupMapper
|
|
20
17
|
import com.facebook.react.bridge.ReactContext
|
|
@@ -28,28 +25,14 @@ internal class ReactNativeSessionReplayExtensionSupport(
|
|
|
28
25
|
private val logger: InternalLogger
|
|
29
26
|
) : ExtensionSupport {
|
|
30
27
|
|
|
31
|
-
override fun getCustomViewMappers():
|
|
28
|
+
override fun getCustomViewMappers(): List<MapperTypeWrapper<*>> {
|
|
32
29
|
val uiManagerModule = getUiManagerModule()
|
|
33
30
|
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
),
|
|
40
|
-
SessionReplayPrivacy.MASK to mapOf(
|
|
41
|
-
ReactViewGroup::class.java to ReactViewGroupMapper(),
|
|
42
|
-
ReactTextView::class.java to ReactMaskTextMapper(reactContext, uiManagerModule),
|
|
43
|
-
ReactEditText::class.java to ReactMaskTextMapper(reactContext, uiManagerModule)
|
|
44
|
-
),
|
|
45
|
-
SessionReplayPrivacy.MASK_USER_INPUT to mapOf(
|
|
46
|
-
ReactViewGroup::class.java to ReactViewGroupMapper(),
|
|
47
|
-
ReactTextView::class.java to ReactMaskInputTextMapper(reactContext, uiManagerModule),
|
|
48
|
-
ReactEditText::class.java to ReactMaskInputTextMapper(reactContext, uiManagerModule)
|
|
49
|
-
)
|
|
50
|
-
).mapValues {
|
|
51
|
-
it.value as Map<Class<*>, WireframeMapper<View, *>>
|
|
52
|
-
}
|
|
31
|
+
return listOf(
|
|
32
|
+
MapperTypeWrapper(ReactViewGroup::class.java, ReactViewGroupMapper()),
|
|
33
|
+
MapperTypeWrapper(ReactTextView::class.java, ReactTextMapper(reactContext, uiManagerModule)),
|
|
34
|
+
MapperTypeWrapper(ReactEditText::class.java, ReactEditTextMapper(reactContext, uiManagerModule)),
|
|
35
|
+
)
|
|
53
36
|
}
|
|
54
37
|
|
|
55
38
|
override fun getOptionSelectorDetectors(): List<OptionSelectorDetector> {
|
|
@@ -6,23 +6,36 @@
|
|
|
6
6
|
|
|
7
7
|
package com.datadog.reactnative.sessionreplay.mappers
|
|
8
8
|
|
|
9
|
-
import android.
|
|
10
|
-
import com.datadog.android.sessionreplay.internal.AsyncJobStatusCallback
|
|
11
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
12
|
-
import com.datadog.android.sessionreplay.internal.recorder.mapper.MaskTextViewMapper
|
|
9
|
+
import com.datadog.android.api.InternalLogger
|
|
13
10
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
11
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
12
|
+
import com.datadog.android.sessionreplay.recorder.mapper.EditTextMapper
|
|
13
|
+
import com.datadog.android.sessionreplay.recorder.mapper.WireframeMapper
|
|
14
|
+
import com.datadog.android.sessionreplay.utils.AsyncJobStatusCallback
|
|
15
|
+
import com.datadog.android.sessionreplay.utils.DefaultColorStringFormatter
|
|
16
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewBoundsResolver
|
|
17
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewIdentifierResolver
|
|
18
|
+
import com.datadog.android.sessionreplay.utils.DrawableToColorMapper
|
|
14
19
|
import com.datadog.reactnative.sessionreplay.NoopTextPropertiesResolver
|
|
15
20
|
import com.datadog.reactnative.sessionreplay.ReactTextPropertiesResolver
|
|
16
21
|
import com.datadog.reactnative.sessionreplay.TextPropertiesResolver
|
|
17
22
|
import com.datadog.reactnative.sessionreplay.utils.TextViewUtils
|
|
18
23
|
import com.facebook.react.bridge.ReactContext
|
|
19
24
|
import com.facebook.react.uimanager.UIManagerModule
|
|
25
|
+
import com.facebook.react.views.textinput.ReactEditText
|
|
20
26
|
|
|
21
|
-
internal class
|
|
27
|
+
internal class ReactEditTextMapper(
|
|
22
28
|
private val reactTextPropertiesResolver: TextPropertiesResolver =
|
|
23
29
|
NoopTextPropertiesResolver(),
|
|
24
|
-
private val textViewUtils: TextViewUtils = TextViewUtils()
|
|
25
|
-
):
|
|
30
|
+
private val textViewUtils: TextViewUtils = TextViewUtils(),
|
|
31
|
+
): WireframeMapper<ReactEditText> {
|
|
32
|
+
|
|
33
|
+
private val editTextMapper = EditTextMapper(
|
|
34
|
+
viewIdentifierResolver = DefaultViewIdentifierResolver,
|
|
35
|
+
colorStringFormatter = DefaultColorStringFormatter,
|
|
36
|
+
viewBoundsResolver = DefaultViewBoundsResolver,
|
|
37
|
+
drawableToColorMapper = DrawableToColorMapper.getDefault(),
|
|
38
|
+
)
|
|
26
39
|
|
|
27
40
|
internal constructor(
|
|
28
41
|
reactContext: ReactContext,
|
|
@@ -37,13 +50,19 @@ internal class ReactMaskTextMapper(
|
|
|
37
50
|
)
|
|
38
51
|
}
|
|
39
52
|
)
|
|
40
|
-
|
|
41
53
|
override fun map(
|
|
42
|
-
view:
|
|
54
|
+
view: ReactEditText,
|
|
43
55
|
mappingContext: MappingContext,
|
|
44
|
-
asyncJobStatusCallback: AsyncJobStatusCallback
|
|
56
|
+
asyncJobStatusCallback: AsyncJobStatusCallback,
|
|
57
|
+
internalLogger: InternalLogger
|
|
45
58
|
): List<MobileSegment.Wireframe> {
|
|
46
|
-
val wireframes =
|
|
59
|
+
val wireframes = editTextMapper.map(
|
|
60
|
+
view = view,
|
|
61
|
+
mappingContext = mappingContext,
|
|
62
|
+
asyncJobStatusCallback = asyncJobStatusCallback,
|
|
63
|
+
internalLogger = internalLogger
|
|
64
|
+
)
|
|
65
|
+
|
|
47
66
|
return textViewUtils.mapTextViewToWireframes(
|
|
48
67
|
wireframes = wireframes,
|
|
49
68
|
view = view,
|
|
@@ -52,4 +71,3 @@ internal class ReactMaskTextMapper(
|
|
|
52
71
|
)
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
|
-
|
package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/mappers/ReactTextMapper.kt
CHANGED
|
@@ -7,10 +7,16 @@
|
|
|
7
7
|
package com.datadog.reactnative.sessionreplay.mappers
|
|
8
8
|
|
|
9
9
|
import android.widget.TextView
|
|
10
|
-
import com.datadog.android.
|
|
11
|
-
import com.datadog.android.sessionreplay.
|
|
12
|
-
import com.datadog.android.sessionreplay.internal.recorder.mapper.TextViewMapper
|
|
10
|
+
import com.datadog.android.api.InternalLogger
|
|
11
|
+
import com.datadog.android.sessionreplay.SessionReplayPrivacy
|
|
13
12
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
13
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
14
|
+
import com.datadog.android.sessionreplay.recorder.mapper.TextViewMapper
|
|
15
|
+
import com.datadog.android.sessionreplay.utils.AsyncJobStatusCallback
|
|
16
|
+
import com.datadog.android.sessionreplay.utils.DefaultColorStringFormatter
|
|
17
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewBoundsResolver
|
|
18
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewIdentifierResolver
|
|
19
|
+
import com.datadog.android.sessionreplay.utils.DrawableToColorMapper
|
|
14
20
|
import com.datadog.reactnative.sessionreplay.NoopTextPropertiesResolver
|
|
15
21
|
import com.datadog.reactnative.sessionreplay.ReactTextPropertiesResolver
|
|
16
22
|
import com.datadog.reactnative.sessionreplay.TextPropertiesResolver
|
|
@@ -21,8 +27,13 @@ import com.facebook.react.uimanager.UIManagerModule
|
|
|
21
27
|
internal class ReactTextMapper(
|
|
22
28
|
private val reactTextPropertiesResolver: TextPropertiesResolver =
|
|
23
29
|
NoopTextPropertiesResolver(),
|
|
24
|
-
private val textViewUtils: TextViewUtils = TextViewUtils()
|
|
25
|
-
): TextViewMapper(
|
|
30
|
+
private val textViewUtils: TextViewUtils = TextViewUtils(),
|
|
31
|
+
): TextViewMapper<TextView>(
|
|
32
|
+
viewIdentifierResolver = DefaultViewIdentifierResolver,
|
|
33
|
+
colorStringFormatter = DefaultColorStringFormatter,
|
|
34
|
+
viewBoundsResolver = DefaultViewBoundsResolver,
|
|
35
|
+
drawableToColorMapper = DrawableToColorMapper.getDefault()
|
|
36
|
+
) {
|
|
26
37
|
|
|
27
38
|
internal constructor(
|
|
28
39
|
reactContext: ReactContext,
|
|
@@ -41,9 +52,10 @@ internal class ReactTextMapper(
|
|
|
41
52
|
override fun map(
|
|
42
53
|
view: TextView,
|
|
43
54
|
mappingContext: MappingContext,
|
|
44
|
-
asyncJobStatusCallback: AsyncJobStatusCallback
|
|
55
|
+
asyncJobStatusCallback: AsyncJobStatusCallback,
|
|
56
|
+
internalLogger: InternalLogger
|
|
45
57
|
): List<MobileSegment.Wireframe> {
|
|
46
|
-
val wireframes = super.map(view, mappingContext, asyncJobStatusCallback)
|
|
58
|
+
val wireframes = super.map(view, mappingContext, asyncJobStatusCallback, internalLogger)
|
|
47
59
|
return textViewUtils.mapTextViewToWireframes(
|
|
48
60
|
wireframes = wireframes,
|
|
49
61
|
view = view,
|
|
@@ -6,11 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
package com.datadog.reactnative.sessionreplay.mappers
|
|
8
8
|
|
|
9
|
-
import com.datadog.android.
|
|
10
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
11
|
-
import com.datadog.android.sessionreplay.internal.recorder.mapper.BaseWireframeMapper
|
|
12
|
-
import com.datadog.android.sessionreplay.internal.recorder.mapper.TraverseAllChildrenMapper
|
|
9
|
+
import com.datadog.android.api.InternalLogger
|
|
13
10
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
11
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
12
|
+
import com.datadog.android.sessionreplay.recorder.mapper.BaseWireframeMapper
|
|
13
|
+
import com.datadog.android.sessionreplay.recorder.mapper.TraverseAllChildrenMapper
|
|
14
|
+
import com.datadog.android.sessionreplay.utils.AsyncJobStatusCallback
|
|
15
|
+
import com.datadog.android.sessionreplay.utils.DefaultColorStringFormatter
|
|
16
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewBoundsResolver
|
|
17
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewBoundsResolver.resolveViewGlobalBounds
|
|
18
|
+
import com.datadog.android.sessionreplay.utils.DefaultViewIdentifierResolver
|
|
19
|
+
import com.datadog.android.sessionreplay.utils.DrawableToColorMapper
|
|
14
20
|
import com.datadog.reactnative.sessionreplay.utils.DrawableUtils
|
|
15
21
|
import com.datadog.reactnative.sessionreplay.utils.ReactViewBackgroundDrawableUtils
|
|
16
22
|
import com.facebook.react.views.view.ReactViewGroup
|
|
@@ -20,13 +26,19 @@ internal class ReactViewGroupMapper(
|
|
|
20
26
|
ReactViewBackgroundDrawableUtils(),
|
|
21
27
|
private val drawableUtils: DrawableUtils = DrawableUtils()
|
|
22
28
|
) :
|
|
23
|
-
BaseWireframeMapper<ReactViewGroup
|
|
24
|
-
|
|
29
|
+
BaseWireframeMapper<ReactViewGroup>(
|
|
30
|
+
viewIdentifierResolver = DefaultViewIdentifierResolver,
|
|
31
|
+
colorStringFormatter = DefaultColorStringFormatter,
|
|
32
|
+
viewBoundsResolver = DefaultViewBoundsResolver,
|
|
33
|
+
drawableToColorMapper = DrawableToColorMapper.getDefault()
|
|
34
|
+
),
|
|
35
|
+
TraverseAllChildrenMapper<ReactViewGroup> {
|
|
25
36
|
|
|
26
37
|
override fun map(
|
|
27
38
|
view: ReactViewGroup,
|
|
28
39
|
mappingContext: MappingContext,
|
|
29
|
-
asyncJobStatusCallback: AsyncJobStatusCallback
|
|
40
|
+
asyncJobStatusCallback: AsyncJobStatusCallback,
|
|
41
|
+
internalLogger: InternalLogger
|
|
30
42
|
): List<MobileSegment.Wireframe> {
|
|
31
43
|
val pixelDensity = mappingContext.systemInformation.screenDensity
|
|
32
44
|
val viewGlobalBounds = resolveViewGlobalBounds(view, pixelDensity)
|
package/android/src/main/kotlin/com/datadog/reactnative/sessionreplay/utils/TextViewUtils.kt
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
package com.datadog.reactnative.sessionreplay.utils
|
|
10
10
|
|
|
11
11
|
import android.widget.TextView
|
|
12
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
13
12
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
13
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
14
14
|
import com.datadog.reactnative.sessionreplay.TextPropertiesResolver
|
|
15
15
|
|
|
16
16
|
internal class TextViewUtils {
|
|
@@ -7,17 +7,12 @@
|
|
|
7
7
|
package com.datadog.reactnative.sessionreplay
|
|
8
8
|
|
|
9
9
|
import com.datadog.android.api.InternalLogger
|
|
10
|
-
import com.datadog.
|
|
11
|
-
import com.datadog.reactnative.sessionreplay.mappers.ReactMaskInputTextMapper
|
|
12
|
-
import com.datadog.reactnative.sessionreplay.mappers.ReactMaskTextMapper
|
|
10
|
+
import com.datadog.reactnative.sessionreplay.mappers.ReactEditTextMapper
|
|
13
11
|
import com.datadog.reactnative.sessionreplay.mappers.ReactTextMapper
|
|
14
12
|
import com.datadog.reactnative.sessionreplay.mappers.ReactViewGroupMapper
|
|
15
13
|
import com.facebook.react.bridge.NativeModule
|
|
16
14
|
import com.facebook.react.bridge.ReactContext
|
|
17
15
|
import com.facebook.react.uimanager.UIManagerModule
|
|
18
|
-
import com.facebook.react.views.text.ReactTextView
|
|
19
|
-
import com.facebook.react.views.textinput.ReactEditText
|
|
20
|
-
import com.facebook.react.views.view.ReactViewGroup
|
|
21
16
|
import fr.xgouchet.elmyr.junit5.ForgeExtension
|
|
22
17
|
import org.assertj.core.api.Assertions.assertThat
|
|
23
18
|
import org.junit.jupiter.api.BeforeEach
|
|
@@ -65,51 +60,18 @@ internal class ReactNativeSessionReplayExtensionSupportTest {
|
|
|
65
60
|
fun `M get custom view mappers W getCustomViewMappers()`() {
|
|
66
61
|
// When
|
|
67
62
|
val customViewMappers = testedExtensionSupport.getCustomViewMappers()
|
|
68
|
-
val allowMappers = customViewMappers[SessionReplayPrivacy.ALLOW]
|
|
69
63
|
|
|
70
64
|
// Then
|
|
71
|
-
|
|
72
|
-
assertThat(allowMappers).hasSize(3)
|
|
73
|
-
assertThat(allowMappers[ReactViewGroup::class.java])
|
|
74
|
-
.isInstanceOf(ReactViewGroupMapper::class.java)
|
|
75
|
-
assertThat(allowMappers[ReactTextView::class.java])
|
|
76
|
-
.isInstanceOf(ReactTextMapper::class.java)
|
|
77
|
-
assertThat(allowMappers[ReactEditText::class.java])
|
|
78
|
-
.isInstanceOf(ReactTextMapper::class.java)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@Test
|
|
82
|
-
fun `M get mask input mappers W getCustomViewMappers()`() {
|
|
83
|
-
// When
|
|
84
|
-
val customViewMappers = testedExtensionSupport.getCustomViewMappers()
|
|
85
|
-
val maskUserInputMappers = customViewMappers[SessionReplayPrivacy.MASK_USER_INPUT]
|
|
65
|
+
assertThat(customViewMappers).hasSize(3)
|
|
86
66
|
|
|
87
|
-
|
|
88
|
-
check(maskUserInputMappers != null)
|
|
89
|
-
assertThat(maskUserInputMappers).hasSize(3)
|
|
90
|
-
assertThat(maskUserInputMappers[ReactViewGroup::class.java])
|
|
67
|
+
assertThat(customViewMappers[0].getUnsafeMapper())
|
|
91
68
|
.isInstanceOf(ReactViewGroupMapper::class.java)
|
|
92
|
-
assertThat(maskUserInputMappers[ReactTextView::class.java])
|
|
93
|
-
.isInstanceOf(ReactMaskInputTextMapper::class.java)
|
|
94
|
-
assertThat(maskUserInputMappers[ReactEditText::class.java])
|
|
95
|
-
.isInstanceOf(ReactMaskInputTextMapper::class.java)
|
|
96
|
-
}
|
|
97
69
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
// When
|
|
101
|
-
val customViewMappers = testedExtensionSupport.getCustomViewMappers()
|
|
102
|
-
val maskMappers = customViewMappers[SessionReplayPrivacy.MASK]
|
|
70
|
+
assertThat(customViewMappers[1].getUnsafeMapper())
|
|
71
|
+
.isInstanceOf(ReactTextMapper::class.java)
|
|
103
72
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
assertThat(maskMappers).hasSize(3)
|
|
107
|
-
assertThat(maskMappers[ReactViewGroup::class.java])
|
|
108
|
-
.isInstanceOf(ReactViewGroupMapper::class.java)
|
|
109
|
-
assertThat(maskMappers[ReactTextView::class.java])
|
|
110
|
-
.isInstanceOf(ReactMaskTextMapper::class.java)
|
|
111
|
-
assertThat(maskMappers[ReactEditText::class.java])
|
|
112
|
-
.isInstanceOf(ReactMaskTextMapper::class.java)
|
|
73
|
+
assertThat(customViewMappers[2].getUnsafeMapper())
|
|
74
|
+
.isInstanceOf(ReactEditTextMapper::class.java)
|
|
113
75
|
}
|
|
114
76
|
|
|
115
77
|
@Test
|
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
package com.datadog.reactnative.sessionreplay.mappers
|
|
10
10
|
|
|
11
11
|
import android.graphics.drawable.ColorDrawable
|
|
12
|
-
import com.datadog.android.
|
|
13
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
14
|
-
import com.datadog.android.sessionreplay.internal.recorder.SystemInformation
|
|
12
|
+
import com.datadog.android.api.InternalLogger
|
|
15
13
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
14
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
15
|
+
import com.datadog.android.sessionreplay.recorder.SystemInformation
|
|
16
|
+
import com.datadog.android.sessionreplay.utils.AsyncJobStatusCallback
|
|
16
17
|
import com.datadog.reactnative.sessionreplay.utils.DrawableUtils
|
|
17
18
|
import com.datadog.reactnative.sessionreplay.utils.ReactViewBackgroundDrawableUtils
|
|
18
19
|
import com.facebook.react.views.view.ReactViewBackgroundDrawable
|
|
@@ -50,6 +51,9 @@ internal class ReactViewGroupMapperTest {
|
|
|
50
51
|
@Mock
|
|
51
52
|
private lateinit var mockAsyncJobStatusCallback: AsyncJobStatusCallback
|
|
52
53
|
|
|
54
|
+
@Mock
|
|
55
|
+
private lateinit var mockInternalLogger: InternalLogger
|
|
56
|
+
|
|
53
57
|
@Mock
|
|
54
58
|
private lateinit var mockSystemInformation: SystemInformation
|
|
55
59
|
|
|
@@ -92,7 +96,8 @@ internal class ReactViewGroupMapperTest {
|
|
|
92
96
|
val result = testedMapper.map(
|
|
93
97
|
view = mockReactViewGroup,
|
|
94
98
|
mappingContext = mockMappingContext,
|
|
95
|
-
asyncJobStatusCallback = mockAsyncJobStatusCallback
|
|
99
|
+
asyncJobStatusCallback = mockAsyncJobStatusCallback,
|
|
100
|
+
internalLogger = mockInternalLogger
|
|
96
101
|
)[0] as MobileSegment.Wireframe.ShapeWireframe
|
|
97
102
|
|
|
98
103
|
// Then
|
|
@@ -121,7 +126,8 @@ internal class ReactViewGroupMapperTest {
|
|
|
121
126
|
val result = testedMapper.map(
|
|
122
127
|
view = mockReactViewGroup,
|
|
123
128
|
mappingContext = mockMappingContext,
|
|
124
|
-
asyncJobStatusCallback = mockAsyncJobStatusCallback
|
|
129
|
+
asyncJobStatusCallback = mockAsyncJobStatusCallback,
|
|
130
|
+
internalLogger = mockInternalLogger
|
|
125
131
|
)[0] as MobileSegment.Wireframe.ShapeWireframe
|
|
126
132
|
|
|
127
133
|
// Then
|
package/android/src/test/kotlin/com/datadog/reactnative/sessionreplay/utils/TextViewUtilsTest.kt
CHANGED
|
@@ -10,9 +10,9 @@ import android.content.res.Resources
|
|
|
10
10
|
import android.graphics.Typeface
|
|
11
11
|
import android.util.DisplayMetrics
|
|
12
12
|
import android.widget.TextView
|
|
13
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
14
|
-
import com.datadog.android.sessionreplay.internal.recorder.SystemInformation
|
|
15
13
|
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
14
|
+
import com.datadog.android.sessionreplay.recorder.MappingContext
|
|
15
|
+
import com.datadog.android.sessionreplay.recorder.SystemInformation
|
|
16
16
|
import com.datadog.reactnative.sessionreplay.ReactTextPropertiesResolver
|
|
17
17
|
import fr.xgouchet.elmyr.Forge
|
|
18
18
|
import fr.xgouchet.elmyr.junit5.ForgeExtension
|
|
@@ -55,7 +55,7 @@ public class DdSessionReplayImplementation: NSObject {
|
|
|
55
55
|
resolve(nil)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
func buildPrivacyLevel(privacyLevel: NSString) ->
|
|
58
|
+
func buildPrivacyLevel(privacyLevel: NSString) -> SessionReplayPrivacyLevel {
|
|
59
59
|
switch privacyLevel.lowercased {
|
|
60
60
|
case "mask":
|
|
61
61
|
return .mask
|
package/package.json
CHANGED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
|
|
3
|
-
* This product includes software developed at Datadog (https://www.datadoghq.com/).
|
|
4
|
-
* Copyright 2016-Present Datadog, Inc.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
package com.datadog.reactnative.sessionreplay.mappers
|
|
8
|
-
|
|
9
|
-
import android.widget.TextView
|
|
10
|
-
import com.datadog.android.sessionreplay.internal.AsyncJobStatusCallback
|
|
11
|
-
import com.datadog.android.sessionreplay.internal.recorder.MappingContext
|
|
12
|
-
import com.datadog.android.sessionreplay.internal.recorder.mapper.MaskInputTextViewMapper
|
|
13
|
-
import com.datadog.android.sessionreplay.model.MobileSegment
|
|
14
|
-
import com.datadog.reactnative.sessionreplay.NoopTextPropertiesResolver
|
|
15
|
-
import com.datadog.reactnative.sessionreplay.ReactTextPropertiesResolver
|
|
16
|
-
import com.datadog.reactnative.sessionreplay.TextPropertiesResolver
|
|
17
|
-
import com.datadog.reactnative.sessionreplay.utils.TextViewUtils
|
|
18
|
-
import com.facebook.react.bridge.ReactContext
|
|
19
|
-
import com.facebook.react.uimanager.UIManagerModule
|
|
20
|
-
|
|
21
|
-
internal class ReactMaskInputTextMapper(
|
|
22
|
-
private val reactTextPropertiesResolver: TextPropertiesResolver,
|
|
23
|
-
private val textViewUtils: TextViewUtils = TextViewUtils()
|
|
24
|
-
): MaskInputTextViewMapper() {
|
|
25
|
-
|
|
26
|
-
internal constructor(
|
|
27
|
-
reactContext: ReactContext,
|
|
28
|
-
uiManagerModule: UIManagerModule?
|
|
29
|
-
): this(
|
|
30
|
-
reactTextPropertiesResolver = if (uiManagerModule == null) {
|
|
31
|
-
NoopTextPropertiesResolver()
|
|
32
|
-
} else {
|
|
33
|
-
ReactTextPropertiesResolver(
|
|
34
|
-
reactContext = reactContext,
|
|
35
|
-
uiManagerModule = uiManagerModule
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
override fun map(
|
|
41
|
-
view: TextView,
|
|
42
|
-
mappingContext: MappingContext,
|
|
43
|
-
asyncJobStatusCallback: AsyncJobStatusCallback
|
|
44
|
-
): List<MobileSegment.Wireframe> {
|
|
45
|
-
val wireframes = super.map(view, mappingContext, asyncJobStatusCallback)
|
|
46
|
-
return textViewUtils.mapTextViewToWireframes(
|
|
47
|
-
wireframes = wireframes,
|
|
48
|
-
view = view,
|
|
49
|
-
mappingContext = mappingContext,
|
|
50
|
-
reactTextPropertiesResolver = reactTextPropertiesResolver
|
|
51
|
-
)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|