Skip to content

Commit bb1ce7c

Browse files
committed
RUM-9631: Move collectAccessibilitySettings to RumInternalProxy
1 parent 2232142 commit bb1ce7c

File tree

10 files changed

+26
-195
lines changed

10 files changed

+26
-195
lines changed

features/dd-sdk-android-rum/api/apiSurface

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ data class com.datadog.android.rum.RumConfiguration
8888
fun setSessionListener(RumSessionListener): Builder
8989
fun setInitialResourceIdentifier(com.datadog.android.rum.metric.networksettled.InitialResourceIdentifier): Builder
9090
fun setLastInteractionIdentifier(com.datadog.android.rum.metric.interactiontonextview.LastInteractionIdentifier?): Builder
91-
fun collectAccessibilitySettings(): Builder
9291
fun setSlowFramesConfiguration(com.datadog.android.rum.configuration.SlowFramesConfiguration?): Builder
9392
fun trackAnonymousUser(Boolean): Builder
9493
fun build(): RumConfiguration
@@ -175,6 +174,7 @@ class com.datadog.android.rum._RumInternalProxy
175174
fun setAdditionalConfiguration(com.datadog.android.rum.RumConfiguration.Builder, Map<String, Any>): com.datadog.android.rum.RumConfiguration.Builder
176175
fun setComposeActionTrackingStrategy(com.datadog.android.rum.RumConfiguration.Builder, com.datadog.android.rum.tracking.ActionTrackingStrategy): com.datadog.android.rum.RumConfiguration.Builder
177176
fun setRumSessionTypeOverride(com.datadog.android.rum.RumConfiguration.Builder, RumSessionType): com.datadog.android.rum.RumConfiguration.Builder
177+
fun collectAccessibilitySettings(com.datadog.android.rum.RumConfiguration.Builder): com.datadog.android.rum.RumConfiguration.Builder
178178
data class com.datadog.android.rum.configuration.SlowFramesConfiguration
179179
constructor(Int = DEFAULT_SLOW_FRAME_RECORDS_MAX_AMOUNT, Long = DEFAULT_FROZEN_FRAME_THRESHOLD_NS, Long = DEFAULT_CONTINUOUS_SLOW_FRAME_THRESHOLD_NS, Long = DEFAULT_FREEZE_DURATION_NS, Long = DEFAULT_VIEW_LIFETIME_THRESHOLD_NS)
180180
companion object

features/dd-sdk-android-rum/api/dd-sdk-android-rum.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ public final class com/datadog/android/rum/RumConfiguration {
104104
public final class com/datadog/android/rum/RumConfiguration$Builder {
105105
public fun <init> (Ljava/lang/String;)V
106106
public final fun build ()Lcom/datadog/android/rum/RumConfiguration;
107-
public final fun collectAccessibilitySettings ()Lcom/datadog/android/rum/RumConfiguration$Builder;
108107
public final fun disableUserInteractionTracking ()Lcom/datadog/android/rum/RumConfiguration$Builder;
109108
public final fun setActionEventMapper (Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/rum/RumConfiguration$Builder;
110109
public final fun setErrorEventMapper (Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/rum/RumConfiguration$Builder;
@@ -254,6 +253,7 @@ public final class com/datadog/android/rum/_RumInternalProxy {
254253
}
255254

256255
public final class com/datadog/android/rum/_RumInternalProxy$Companion {
256+
public final fun collectAccessibilitySettings (Lcom/datadog/android/rum/RumConfiguration$Builder;)Lcom/datadog/android/rum/RumConfiguration$Builder;
257257
public final fun setAdditionalConfiguration (Lcom/datadog/android/rum/RumConfiguration$Builder;Ljava/util/Map;)Lcom/datadog/android/rum/RumConfiguration$Builder;
258258
public final fun setComposeActionTrackingStrategy (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/tracking/ActionTrackingStrategy;)Lcom/datadog/android/rum/RumConfiguration$Builder;
259259
public final fun setRumSessionTypeOverride (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/RumSessionType;)Lcom/datadog/android/rum/RumConfiguration$Builder;

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/RumConfiguration.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,6 @@ data class RumConfiguration internal constructor(
285285
return this
286286
}
287287

288-
/**
289-
* Sets a flag to collect accessibility settings inside the RUM view end event.
290-
*/
291-
fun collectAccessibilitySettings(): Builder {
292-
rumConfig = rumConfig.copy(collectAccessibilitySettings = true)
293-
return this
294-
}
295-
296288
/**
297289
* The [SlowFramesListener] provides statistical data to help identify performance issues related to UI rendering:
298290
*
@@ -395,6 +387,15 @@ data class RumConfiguration internal constructor(
395387
rumConfig = rumConfig.copy(rumSessionTypeOverride = rumSessionTypeOverride)
396388
return this
397389
}
390+
391+
/**
392+
* Sets a flag to collect accessibility settings inside the RUM view end event.
393+
* By default these settings are not collected.
394+
*/
395+
internal fun collectAccessibilitySettings(): Builder {
396+
rumConfig = rumConfig.copy(collectAccessibilitySettings = true)
397+
return this
398+
}
398399
// endregion
399400
}
400401
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/_RumInternalProxy.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,11 @@ class _RumInternalProxy internal constructor(private val rumMonitor: AdvancedRum
115115
): Builder {
116116
return builder.setRumSessionTypeOverride(rumSessionTypeOverride)
117117
}
118+
119+
fun collectAccessibilitySettings(
120+
builder: Builder
121+
): Builder {
122+
return builder.collectAccessibilitySettings()
123+
}
118124
}
119125
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/accessibility/Accessibility.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@ internal data class Accessibility(
3434
}
3535

3636
companion object {
37-
internal val EMPTY_STATE = Accessibility(
38-
textSize = null,
39-
isScreenReaderEnabled = null,
40-
isColorInversionEnabled = null,
41-
isClosedCaptioningEnabled = null,
42-
isReducedAnimationsEnabled = null,
43-
isScreenPinningEnabled = null
44-
)
45-
4637
internal const val TEXT_SIZE_KEY = "text_size"
4738
internal const val SCREEN_READER_ENABLED_KEY = "screen_reader_enabled"
4839
internal const val COLOR_INVERSION_ENABLED_KEY = "invert_colors_enabled"

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/accessibility/DatadogAccessibilityReader.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ internal class DatadogAccessibilityReader(
3939
) : AccessibilityReader, ComponentCallbacks {
4040

4141
@Volatile
42-
private var currentState = Accessibility.EMPTY_STATE
42+
private var currentState = Accessibility()
4343

4444
private var lastPollTime: AtomicLong = AtomicLong(0)
4545

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -958,11 +958,9 @@ internal open class RumViewScope(
958958

959959
val eventAdditionalAttributes = (eventAttributes + globalAttributes).toMutableMap()
960960

961-
accessibilityReader.let { reader ->
962-
val accessibilityState = reader.getState()
963-
if (accessibilityState.isNotEmpty()) {
964-
eventAdditionalAttributes[ACCESSIBILITY_KEY] = accessibilityState
965-
}
961+
val accessibilityState = accessibilityReader.getState()
962+
if (accessibilityState.isNotEmpty()) {
963+
eventAdditionalAttributes[ACCESSIBILITY_KEY] = accessibilityState
966964
}
967965

968966
val uiSlownessReport = slowFramesListener?.resolveReport(viewId, viewComplete, durationNs)

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/attribute/AccessibilityTest.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,21 +67,6 @@ internal class AccessibilityTest {
6767
)
6868
}
6969

70-
@Test
71-
fun `M return expected EMPTY_STATE W EMPTY_STATE constant`() {
72-
// When
73-
val result = Accessibility.EMPTY_STATE.toMap()
74-
75-
// Then
76-
assertThat(result).isEmpty()
77-
assertThat(Accessibility.EMPTY_STATE.textSize).isNull()
78-
assertThat(Accessibility.EMPTY_STATE.isScreenReaderEnabled).isNull()
79-
assertThat(Accessibility.EMPTY_STATE.isColorInversionEnabled).isNull()
80-
assertThat(Accessibility.EMPTY_STATE.isClosedCaptioningEnabled).isNull()
81-
assertThat(Accessibility.EMPTY_STATE.isReducedAnimationsEnabled).isNull()
82-
assertThat(Accessibility.EMPTY_STATE.isScreenPinningEnabled).isNull()
83-
}
84-
8570
@Test
8671
fun `M have correct constant values W key constants`() {
8772
// Then

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/accessibility/DatadogAccessibilityReaderTest.kt

Lines changed: 1 addition & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,7 @@ internal class DatadogAccessibilityReaderTest {
563563
@Test
564564
fun `M do nothing W onLowMemory { called }`() {
565565
// When/Then - should not throw
566+
@Suppress("DEPRECATION")
566567
testedReader.onLowMemory()
567568

568569
// Verify state is still accessible
@@ -630,129 +631,6 @@ internal class DatadogAccessibilityReaderTest {
630631
assertThat(secondResult[SCREEN_PINNING_ENABLED_KEY] as Boolean).isFalse()
631632
}
632633

633-
@Test
634-
fun `M maintain current state W getState { polling does not change values }`() {
635-
// Given
636-
val fontScale = 1.2f
637-
mockConfiguration.fontScale = fontScale
638-
whenever(mockAccessibilityManager.isTouchExplorationEnabled) doReturn true
639-
whenever(mockActivityManager.lockTaskModeState) doReturn ActivityManager.LOCK_TASK_MODE_NONE
640-
641-
// When
642-
val firstResult = testedReader.getState()
643-
val secondResult = testedReader.getState()
644-
645-
// Then
646-
assertThat(firstResult).isEqualTo(secondResult)
647-
assertThat(firstResult[TEXT_SIZE_KEY]).isEqualTo(fontScale)
648-
assertThat(firstResult[SCREEN_READER_ENABLED_KEY] as Boolean).isTrue()
649-
assertThat(firstResult[SCREEN_PINNING_ENABLED_KEY] as Boolean).isFalse()
650-
}
651-
// endregion
652-
653-
// region Edge Cases
654-
@Test
655-
fun `M return partial state W getState { some managers are null }`() {
656-
// Given
657-
testedReader = DatadogAccessibilityReader(
658-
internalLogger = mockInternalLogger,
659-
applicationContext = mockContext,
660-
resources = null,
661-
activityManager = null,
662-
accessibilityManager = mockAccessibilityManager,
663-
secureWrapper = mockSecureWrapper,
664-
globalWrapper = mockGlobalWrapper,
665-
handler = mockHandler
666-
)
667-
whenever(mockAccessibilityManager.isTouchExplorationEnabled) doReturn true
668-
669-
// When
670-
val result = testedReader.getState()
671-
val isScreenReaderEnabled = result[SCREEN_READER_ENABLED_KEY] as Boolean
672-
673-
// Then
674-
assertThat(result.containsKey(TEXT_SIZE_KEY)).isFalse()
675-
assertThat(result.containsKey(SCREEN_PINNING_ENABLED_KEY)).isFalse()
676-
assertThat(isScreenReaderEnabled).isTrue()
677-
assertThat(result.containsKey(COLOR_INVERSION_ENABLED_KEY)).isFalse()
678-
assertThat(result.containsKey(CLOSED_CAPTIONING_ENABLED_KEY)).isFalse()
679-
assertThat(result.containsKey(REDUCED_ANIMATIONS_ENABLED_KEY)).isFalse()
680-
}
681-
682-
@Test
683-
fun `M return expected map structure W getState { normal operation }`() {
684-
// Given
685-
mockConfiguration.fontScale = 1.2f
686-
whenever(mockAccessibilityManager.isTouchExplorationEnabled) doReturn true
687-
whenever(mockActivityManager.lockTaskModeState) doReturn ActivityManager.LOCK_TASK_MODE_NONE
688-
689-
whenever(
690-
mockSecureWrapper.getInt(
691-
internalLogger = any(),
692-
applicationContext = any(),
693-
key = any()
694-
)
695-
) doReturn false
696-
697-
whenever(
698-
mockGlobalWrapper.getFloat(
699-
internalLogger = any(),
700-
applicationContext = any(),
701-
key = any()
702-
)
703-
) doReturn 1.0f
704-
705-
// When
706-
val result = testedReader.getState()
707-
val isScreenReaderEnabled = result[SCREEN_READER_ENABLED_KEY] as Boolean
708-
val isScreenPinningEnabled = result[SCREEN_PINNING_ENABLED_KEY] as Boolean
709-
710-
// Then
711-
assertThat(result).containsKeys(
712-
TEXT_SIZE_KEY,
713-
SCREEN_READER_ENABLED_KEY,
714-
SCREEN_PINNING_ENABLED_KEY,
715-
COLOR_INVERSION_ENABLED_KEY,
716-
CLOSED_CAPTIONING_ENABLED_KEY,
717-
REDUCED_ANIMATIONS_ENABLED_KEY
718-
)
719-
assertThat(result[TEXT_SIZE_KEY]).isEqualTo(1.2f)
720-
assertThat(isScreenReaderEnabled).isTrue()
721-
assertThat(isScreenPinningEnabled).isFalse()
722-
}
723-
724-
@Test
725-
fun `M exclude null values from map W getState { some values are null }`() {
726-
// Given
727-
whenever(mockAccessibilityManager.isTouchExplorationEnabled) doReturn false
728-
testedReader = DatadogAccessibilityReader(
729-
internalLogger = mockInternalLogger,
730-
applicationContext = mockContext,
731-
resources = null,
732-
activityManager = null,
733-
accessibilityManager = mockAccessibilityManager,
734-
secureWrapper = mockSecureWrapper,
735-
globalWrapper = mockGlobalWrapper,
736-
handler = mockHandler
737-
)
738-
739-
whenever(
740-
mockSecureWrapper.getInt(
741-
internalLogger = mockInternalLogger,
742-
applicationContext = mockContext,
743-
key = ACCESSIBILITY_DISPLAY_INVERSION_ENABLED
744-
)
745-
) doReturn null
746-
747-
// When
748-
val result = testedReader.getState()
749-
val isScreenReaderEnabled = result[SCREEN_READER_ENABLED_KEY] as Boolean
750-
751-
// Then
752-
assertThat(result).doesNotContainKeys(TEXT_SIZE_KEY, SCREEN_PINNING_ENABLED_KEY)
753-
assertThat(result).containsKey(SCREEN_READER_ENABLED_KEY)
754-
assertThat(isScreenReaderEnabled).isFalse()
755-
}
756634
// endregion
757635

758636
// region Listener Tests
@@ -874,37 +752,6 @@ internal class DatadogAccessibilityReaderTest {
874752
assertThat(newPollTime).isGreaterThan(oldTime)
875753
}
876754

877-
@Test
878-
fun `M handle concurrent initialization W getState { multiple threads }`() {
879-
// Given
880-
val executor = java.util.concurrent.Executors.newFixedThreadPool(3)
881-
val results = java.util.concurrent.ConcurrentLinkedQueue<Map<String, Any>>()
882-
val countDownLatch = java.util.concurrent.CountDownLatch(3)
883-
884-
// When - Multiple threads call getState concurrently
885-
repeat(3) {
886-
executor.submit {
887-
try {
888-
val result = testedReader.getState()
889-
results.add(result)
890-
} finally {
891-
countDownLatch.countDown()
892-
}
893-
}
894-
}
895-
896-
// Wait for all threads to complete
897-
countDownLatch.await(5, java.util.concurrent.TimeUnit.SECONDS)
898-
executor.shutdown()
899-
900-
// Then - All calls should succeed and return consistent results
901-
assertThat(results).hasSize(3)
902-
val firstResult = results.first()
903-
results.forEach { result ->
904-
assertThat(result).isEqualTo(firstResult)
905-
}
906-
}
907-
908755
@Test
909756
fun `M handle double cleanup W cleanup { called multiple times }`() {
910757
// Given - Initialize first

sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.datadog.android.rum.GlobalRumMonitor
3232
import com.datadog.android.rum.Rum
3333
import com.datadog.android.rum.RumConfiguration
3434
import com.datadog.android.rum.RumErrorSource
35+
import com.datadog.android.rum._RumInternalProxy
3536
import com.datadog.android.rum.configuration.SlowFramesConfiguration
3637
import com.datadog.android.rum.tracking.NavigationViewTrackingStrategy
3738
import com.datadog.android.sample.account.AccountFragment
@@ -336,10 +337,12 @@ class SampleApplication : Application() {
336337
event.context?.additionalProperties?.put(ATTR_IS_MAPPED, true)
337338
event
338339
}
339-
.collectAccessibilitySettings()
340340
.trackBackgroundEvents(true)
341341
.trackAnonymousUser(true)
342342
.enableComposeActionTracking()
343+
.apply {
344+
_RumInternalProxy.collectAccessibilitySettings(this)
345+
}
343346
.build()
344347
}
345348

0 commit comments

Comments
 (0)