@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.
@@ -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.7.1'
22
+ s.dependency 'DatadogSessionReplay', '~> 2.13.0'
23
23
  s.dependency 'DatadogSDKReactNative'
24
24
 
25
25
  s.test_spec 'Tests' do |test_spec|
@@ -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.6.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.SessionReplayPrivacy
14
- import com.datadog.android.sessionreplay.internal.recorder.OptionSelectorDetector
15
- import com.datadog.android.sessionreplay.internal.recorder.mapper.WireframeMapper
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(): Map<SessionReplayPrivacy, Map<Class<*>, WireframeMapper<View, *>>> {
28
+ override fun getCustomViewMappers(): List<MapperTypeWrapper<*>> {
32
29
  val uiManagerModule = getUiManagerModule()
33
30
 
34
- return mapOf(
35
- SessionReplayPrivacy.ALLOW to mapOf(
36
- ReactViewGroup::class.java to ReactViewGroupMapper(),
37
- ReactTextView::class.java to ReactTextMapper(reactContext, uiManagerModule),
38
- ReactEditText::class.java to ReactTextMapper(reactContext, uiManagerModule)
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.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.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 ReactMaskTextMapper(
27
+ internal class ReactEditTextMapper(
22
28
  private val reactTextPropertiesResolver: TextPropertiesResolver =
23
29
  NoopTextPropertiesResolver(),
24
- private val textViewUtils: TextViewUtils = TextViewUtils()
25
- ): MaskTextViewMapper() {
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: TextView,
54
+ view: ReactEditText,
43
55
  mappingContext: MappingContext,
44
- asyncJobStatusCallback: AsyncJobStatusCallback
56
+ asyncJobStatusCallback: AsyncJobStatusCallback,
57
+ internalLogger: InternalLogger
45
58
  ): List<MobileSegment.Wireframe> {
46
- val wireframes = super.map(view, mappingContext, asyncJobStatusCallback)
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
-
@@ -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.sessionreplay.internal.AsyncJobStatusCallback
11
- import com.datadog.android.sessionreplay.internal.recorder.MappingContext
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.sessionreplay.internal.AsyncJobStatusCallback
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, MobileSegment.Wireframe>(),
24
- TraverseAllChildrenMapper<ReactViewGroup, MobileSegment.Wireframe> {
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)
@@ -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.android.sessionreplay.SessionReplayPrivacy
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
- check(allowMappers != null)
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
- // Then
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
- @Test
99
- fun `M get mask mappers W getCustomViewMappers()`() {
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
- // Then
105
- check(maskMappers != null)
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.sessionreplay.internal.AsyncJobStatusCallback
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
@@ -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) -> SessionReplay.Configuration.PrivacyLevel {
58
+ func buildPrivacyLevel(privacyLevel: NSString) -> SessionReplayPrivacyLevel {
59
59
  switch privacyLevel.lowercased {
60
60
  case "mask":
61
61
  return .mask
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datadog/mobile-react-native-session-replay",
3
- "version": "2.3.6-alpha.0",
3
+ "version": "2.4.0-alpha.0",
4
4
  "description": "A client-side React Native module to enable session replay with Datadog",
5
5
  "keywords": [
6
6
  "datadog",
@@ -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
-