diff --git a/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/reflection/ComposeReflection.kt b/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/reflection/ComposeReflection.kt index 9ff626f578..77d0482821 100644 --- a/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/reflection/ComposeReflection.kt +++ b/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/reflection/ComposeReflection.kt @@ -64,8 +64,13 @@ internal object ComposeReflection { val AndroidImageBitmapClass = getClassSafe("androidx.compose.ui.graphics.AndroidImageBitmap") val BitmapField = AndroidImageBitmapClass?.getDeclaredFieldSafe("bitmap") + val ContentPainterModifierClass = getClassSafe("coil.compose.ContentPainterModifier") + val PainterFieldOfContentPainterModifier = + ContentPainterModifierClass?.getDeclaredFieldSafe("painter") + val ContentPainterElementClass = getClassSafe("coil.compose.ContentPainterElement") - val PainterFieldOfContentPainter = ContentPainterElementClass?.getDeclaredFieldSafe("painter") + val PainterFieldOfContentPainterElement = + ContentPainterElementClass?.getDeclaredFieldSafe("painter") val AsyncImagePainterClass = getClassSafe("coil.compose.AsyncImagePainter") val PainterFieldOfAsyncImagePainter = AsyncImagePainterClass?.getDeclaredFieldSafe("_painter") diff --git a/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/utils/ReflectionUtils.kt b/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/utils/ReflectionUtils.kt index de590f36f7..3d570398d8 100644 --- a/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/utils/ReflectionUtils.kt +++ b/features/dd-sdk-android-session-replay-compose/src/main/kotlin/com/datadog/android/sessionreplay/compose/internal/utils/ReflectionUtils.kt @@ -23,13 +23,15 @@ import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeRefl import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.BitmapField import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.CompositionField import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.ContentPainterElementClass +import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.ContentPainterModifierClass import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.GetInnerLayerCoordinatorMethod import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.ImageField import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.LayoutNodeField import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterElementClass import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterField import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterFieldOfAsyncImagePainter -import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterFieldOfContentPainter +import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterFieldOfContentPainterElement +import com.datadog.android.sessionreplay.compose.internal.reflection.ComposeReflection.PainterFieldOfContentPainterModifier import com.datadog.android.sessionreplay.compose.internal.reflection.getSafe @Suppress("TooManyFunctions") @@ -136,12 +138,16 @@ internal class ReflectionUtils { } fun getAsyncImagePainter(semanticsNode: SemanticsNode): Painter? { - val modifier = semanticsNode.layoutInfo.getModifierInfo().firstOrNull { - ContentPainterElementClass?.isInstance(it.modifier) == true - }?.modifier - val asyncPainter = PainterFieldOfContentPainter?.getSafe(modifier) - val painter = PainterFieldOfAsyncImagePainter?.getSafe(asyncPainter) as? Painter - return painter + val asyncPainter = semanticsNode.layoutInfo.getModifierInfo().firstNotNullOfOrNull { + if (ContentPainterModifierClass?.isInstance(it.modifier) == true) { + PainterFieldOfContentPainterModifier?.getSafe(it.modifier) + } else if (ContentPainterElementClass?.isInstance(it.modifier) == true) { + PainterFieldOfContentPainterElement?.getSafe(it.modifier) + } else { + null + } + } + return PainterFieldOfAsyncImagePainter?.getSafe(asyncPainter) as? Painter } fun getNestedPainter(painter: Painter): Painter? {