Skip to content

Commit aa1c2e1

Browse files
authored
Merge pull request #1597 from DataDog/feature/base64-jmoskovich
Base64 feature branch integration
2 parents 1dfff18 + fb8e426 commit aa1c2e1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3656
-365
lines changed

detekt_custom.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,8 @@ datadog:
343343
- "android.view.Window.Callback.onMenuItemSelected(kotlin.Int, android.view.MenuItem)"
344344
- "android.view.View.getChildAt(kotlin.Int)"
345345
- "android.view.View.hashCode()"
346+
- "androidx.collection.LruCache.size()"
347+
- "androidx.collection.LruCache.maxSize()"
346348
# endregion
347349
# region Android Webview APIs
348350
- "android.webkit.ConsoleMessage.MessageLevel.toLogLevel()"
@@ -361,6 +363,7 @@ datadog:
361363
- "android.webkit.WebViewClient.onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError)"
362364
# endregion
363365
# region Android View APIs
366+
- "android.widget.ImageView.getScaleType()"
364367
- "android.widget.FrameLayout.LayoutParams.constructor(kotlin.Int, kotlin.Int)"
365368
- "android.widget.FrameLayout.removeView(android.view.View)"
366369
- "android.widget.LinearLayout.constructor(android.content.Context)"
@@ -590,6 +593,7 @@ datadog:
590593
- "java.lang.Object.constructor()"
591594
- "java.lang.Runtime.availableProcessors()"
592595
- "java.lang.Runtime.getRuntime()"
596+
- "java.lang.Runtime.maxMemory()"
593597
- "java.lang.System.currentTimeMillis()"
594598
- "java.lang.System.getProperty(kotlin.String)"
595599
- "java.lang.System.identityHashCode(kotlin.Any)"
@@ -735,6 +739,7 @@ datadog:
735739
- "kotlin.collections.MutableList.add(com.datadog.android.plugin.DatadogPlugin)"
736740
- "kotlin.collections.MutableList.add(com.datadog.android.sessionreplay.internal.processor.MutationResolver.Entry)"
737741
- "kotlin.collections.MutableList.add(com.datadog.android.sessionreplay.model.MobileSegment.Add)"
742+
- "kotlin.collections.MutableList.add(com.datadog.android.sessionreplay.model.MobileSegment.Wireframe)"
738743
- "kotlin.collections.MutableList.add(com.datadog.android.sessionreplay.model.MobileSegment.WireframeUpdateMutation)"
739744
- "kotlin.collections.MutableList.add(com.datadog.android.rum.internal.domain.scope.RumScope)"
740745
- "kotlin.collections.MutableList.add(com.datadog.android.rum.model.ActionEvent.Type)"
@@ -847,6 +852,7 @@ datadog:
847852
- "kotlin.Float.toFloat()"
848853
- "kotlin.Int.inv()"
849854
- "kotlin.Int.toChar()"
855+
- "kotlin.Int.toDouble()"
850856
- "kotlin.Int.toFloat()"
851857
- "kotlin.Int.toLong()"
852858
- "kotlin.Int.and(kotlin.Int)"
@@ -866,6 +872,8 @@ datadog:
866872
- "kotlin.Pair.constructor(com.datadog.android.sessionreplay.internal.utils.SessionReplayRumContext, com.google.gson.JsonArray)"
867873
- "kotlin.Pair.constructor(com.datadog.android.sessionreplay.model.MobileSegment, com.google.gson.JsonObject)"
868874
- "kotlin.Pair.constructor(com.google.gson.JsonObject, kotlin.Long)"
875+
- "kotlin.Pair.constructor(kotlin.Int, kotlin.Int)"
876+
- "kotlin.Pair.constructor(kotlin.Long, kotlin.Long)"
869877
- "kotlin.Triple.constructor(kotlin.String, kotlin.String, kotlin.String)"
870878
- "kotlin.Triple.constructor(kotlin.Nothing?, kotlin.Nothing?, kotlin.Nothing?)"
871879
# endregion

features/dd-sdk-android-session-replay-material/src/main/kotlin/com/datadog/android/sessionreplay/material/MaskInputTabWireframeMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ import com.datadog.android.sessionreplay.utils.ViewUtils
1616
internal class MaskInputTabWireframeMapper(
1717
viewUtils: ViewUtils = ViewUtils,
1818
uniqueIdentifierGenerator: UniqueIdentifierGenerator = UniqueIdentifierGenerator,
19-
textViewMapper: WireframeMapper<TextView, MobileSegment.Wireframe.TextWireframe> =
19+
textViewMapper: WireframeMapper<TextView, MobileSegment.Wireframe> =
2020
MaskInputTextViewMapper()
2121
) : TabWireframeMapper(viewUtils, uniqueIdentifierGenerator, textViewMapper)

features/dd-sdk-android-session-replay-material/src/main/kotlin/com/datadog/android/sessionreplay/material/MaskTabWireframeMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ import com.datadog.android.sessionreplay.utils.ViewUtils
1616
internal class MaskTabWireframeMapper(
1717
viewUtils: ViewUtils = ViewUtils,
1818
uniqueIdentifierGenerator: UniqueIdentifierGenerator = UniqueIdentifierGenerator,
19-
textViewMapper: WireframeMapper<TextView, MobileSegment.Wireframe.TextWireframe> =
19+
textViewMapper: WireframeMapper<TextView, MobileSegment.Wireframe> =
2020
MaskTextViewMapper()
2121
) : TabWireframeMapper(viewUtils, uniqueIdentifierGenerator, textViewMapper)

features/dd-sdk-android-session-replay-material/src/main/kotlin/com/datadog/android/sessionreplay/material/TabWireframeMapper.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import com.datadog.android.sessionreplay.internal.recorder.mapper.TextViewMapper
1313
import com.datadog.android.sessionreplay.internal.recorder.mapper.WireframeMapper
1414
import com.datadog.android.sessionreplay.material.internal.densityNormalized
1515
import com.datadog.android.sessionreplay.model.MobileSegment
16-
import com.datadog.android.sessionreplay.model.MobileSegment.Wireframe.TextWireframe
1716
import com.datadog.android.sessionreplay.utils.UniqueIdentifierGenerator
1817
import com.datadog.android.sessionreplay.utils.ViewUtils
1918
import com.google.android.material.tabs.TabLayout
@@ -23,7 +22,7 @@ internal open class TabWireframeMapper(
2322
private val viewUtils: ViewUtils = ViewUtils,
2423
private val uniqueIdentifierGenerator: UniqueIdentifierGenerator =
2524
UniqueIdentifierGenerator,
26-
internal val textViewMapper: WireframeMapper<TextView, TextWireframe> = TextViewMapper()
25+
internal val textViewMapper: WireframeMapper<TextView, MobileSegment.Wireframe> = TextViewMapper()
2726
) : WireframeMapper<TabLayout.TabView, MobileSegment.Wireframe> {
2827

2928
override fun map(
@@ -47,7 +46,7 @@ internal open class TabWireframeMapper(
4746
protected open fun resolveTabIndicatorWireframe(
4847
view: TabView,
4948
systemInformation: SystemInformation,
50-
textWireframe: TextWireframe?
49+
wireframe: MobileSegment.Wireframe?
5150
): MobileSegment.Wireframe? {
5251
val selectorId = uniqueIdentifierGenerator.resolveChildUniqueIdentifier(
5352
view,
@@ -62,8 +61,11 @@ internal open class TabWireframeMapper(
6261
val selectionIndicatorXPos = viewBounds.x + paddingStart
6362
val selectionIndicatorYPos = viewBounds.y + viewBounds.height - selectionIndicatorHeight
6463
val selectionIndicatorWidth = viewBounds.width - paddingStart - paddingEnd
65-
val selectionIndicatorColor = textWireframe?.textStyle?.color
66-
?: SELECTED_TAB_INDICATOR_DEFAULT_COLOR
64+
val selectionIndicatorColor = if (wireframe is MobileSegment.Wireframe.TextWireframe) {
65+
wireframe.textStyle.color
66+
} else {
67+
SELECTED_TAB_INDICATOR_DEFAULT_COLOR
68+
}
6769
val selectionIndicatorShapeStyle = MobileSegment.ShapeStyle(
6870
backgroundColor = selectionIndicatorColor,
6971
opacity = view.alpha
@@ -79,7 +81,7 @@ internal open class TabWireframeMapper(
7981
}
8082

8183
private fun findAndResolveLabelWireframes(view: TabView, mappingContext: MappingContext):
82-
List<TextWireframe> {
84+
List<MobileSegment.Wireframe> {
8385
for (i in 0 until view.childCount) {
8486
val viewChild = view.getChildAt(i) ?: continue
8587
if (TextView::class.java.isAssignableFrom(viewChild::class.java)) {

features/dd-sdk-android-session-replay/api/apiSurface

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,33 +22,23 @@ interface com.datadog.android.sessionreplay.internal.recorder.OptionSelectorDete
2222
fun isOptionSelector(android.view.ViewGroup): Boolean
2323
data class com.datadog.android.sessionreplay.internal.recorder.SystemInformation
2424
constructor(GlobalBounds, Int = Configuration.ORIENTATION_UNDEFINED, Float, String? = null)
25-
class com.datadog.android.sessionreplay.internal.recorder.base64.Base64Serializer
26-
interface com.datadog.android.sessionreplay.internal.recorder.base64.ImageCompression
27-
fun getMimeType(): String?
28-
fun compressBitmapToStream(android.graphics.Bitmap): java.io.ByteArrayOutputStream
29-
class com.datadog.android.sessionreplay.internal.recorder.base64.WebPImageCompression : ImageCompression
30-
override fun getMimeType(): String?
31-
override fun compressBitmapToStream(android.graphics.Bitmap): java.io.ByteArrayOutputStream
32-
companion object
33-
abstract class com.datadog.android.sessionreplay.internal.recorder.mapper.BaseWireframeMapper<T: android.view.View, S: com.datadog.android.sessionreplay.model.MobileSegment.Wireframe> : WireframeMapper<T, S>, com.datadog.android.sessionreplay.internal.AsyncImageProcessingCallback
34-
constructor(com.datadog.android.sessionreplay.utils.StringUtils = StringUtils, com.datadog.android.sessionreplay.utils.ViewUtils = ViewUtils, com.datadog.android.sessionreplay.internal.recorder.base64.ImageCompression = WebPImageCompression(), com.datadog.android.sessionreplay.utils.UniqueIdentifierGenerator = UniqueIdentifierGenerator, com.datadog.android.sessionreplay.internal.recorder.base64.Base64Serializer = Base64Serializer.Builder().build())
25+
abstract class com.datadog.android.sessionreplay.internal.recorder.mapper.BaseWireframeMapper<T: android.view.View, S: com.datadog.android.sessionreplay.model.MobileSegment.Wireframe> : WireframeMapper<T, com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>, com.datadog.android.sessionreplay.internal.AsyncImageProcessingCallback
26+
constructor(com.datadog.android.sessionreplay.utils.StringUtils = StringUtils, com.datadog.android.sessionreplay.utils.ViewUtils = ViewUtils)
27+
override fun map(T, com.datadog.android.sessionreplay.internal.recorder.MappingContext): List<com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>
3528
protected fun resolveViewId(android.view.View): Long
3629
protected fun colorAndAlphaAsStringHexa(Int, Int): String
3730
protected fun resolveViewGlobalBounds(android.view.View, Float): com.datadog.android.sessionreplay.internal.recorder.GlobalBounds
3831
protected fun android.graphics.drawable.Drawable.resolveShapeStyleAndBorder(Float): Pair<com.datadog.android.sessionreplay.model.MobileSegment.ShapeStyle?, com.datadog.android.sessionreplay.model.MobileSegment.ShapeBorder?>?
39-
protected fun resolveChildDrawableUniqueIdentifier(android.view.View): Long?
40-
protected fun getWebPMimeType(): String?
41-
protected fun handleBitmap(android.util.DisplayMetrics, android.graphics.drawable.Drawable, com.datadog.android.sessionreplay.model.MobileSegment.Wireframe.ImageWireframe)
4232
override fun startProcessingImage()
4333
override fun finishProcessingImage()
4434
companion object
4535
class com.datadog.android.sessionreplay.internal.recorder.mapper.MaskInputTextViewMapper : TextViewMapper
4636
constructor()
4737
class com.datadog.android.sessionreplay.internal.recorder.mapper.MaskTextViewMapper : TextViewMapper
4838
constructor()
49-
open class com.datadog.android.sessionreplay.internal.recorder.mapper.TextViewMapper : BaseWireframeMapper<android.widget.TextView, com.datadog.android.sessionreplay.model.MobileSegment.Wireframe.TextWireframe>
39+
open class com.datadog.android.sessionreplay.internal.recorder.mapper.TextViewMapper : BaseWireframeMapper<android.widget.TextView, com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>
5040
constructor()
51-
override fun map(android.widget.TextView, com.datadog.android.sessionreplay.internal.recorder.MappingContext): List<com.datadog.android.sessionreplay.model.MobileSegment.Wireframe.TextWireframe>
41+
override fun map(android.widget.TextView, com.datadog.android.sessionreplay.internal.recorder.MappingContext): List<com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>
5242
interface com.datadog.android.sessionreplay.internal.recorder.mapper.WireframeMapper<T: android.view.View, S: com.datadog.android.sessionreplay.model.MobileSegment.Wireframe>
5343
fun map(T, com.datadog.android.sessionreplay.internal.recorder.MappingContext): List<S>
5444
object com.datadog.android.sessionreplay.utils.StringUtils

features/dd-sdk-android-session-replay/api/dd-sdk-android-session-replay.api

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -87,34 +87,14 @@ public final class com/datadog/android/sessionreplay/internal/recorder/SystemInf
8787
public fun toString ()Ljava/lang/String;
8888
}
8989

90-
public final class com/datadog/android/sessionreplay/internal/recorder/base64/Base64Serializer {
91-
public synthetic fun <init> (Ljava/util/concurrent/ExecutorService;Lcom/datadog/android/sessionreplay/internal/utils/DrawableUtils;Lcom/datadog/android/sessionreplay/internal/utils/Base64Utils;Lcom/datadog/android/sessionreplay/internal/recorder/base64/ImageCompression;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
92-
}
93-
94-
public abstract interface class com/datadog/android/sessionreplay/internal/recorder/base64/ImageCompression {
95-
public abstract fun compressBitmapToStream (Landroid/graphics/Bitmap;)Ljava/io/ByteArrayOutputStream;
96-
public abstract fun getMimeType ()Ljava/lang/String;
97-
}
98-
99-
public final class com/datadog/android/sessionreplay/internal/recorder/base64/WebPImageCompression : com/datadog/android/sessionreplay/internal/recorder/base64/ImageCompression {
100-
public static final field Companion Lcom/datadog/android/sessionreplay/internal/recorder/base64/WebPImageCompression$Companion;
101-
public fun compressBitmapToStream (Landroid/graphics/Bitmap;)Ljava/io/ByteArrayOutputStream;
102-
public fun getMimeType ()Ljava/lang/String;
103-
}
104-
105-
public final class com/datadog/android/sessionreplay/internal/recorder/base64/WebPImageCompression$Companion {
106-
}
107-
10890
public abstract class com/datadog/android/sessionreplay/internal/recorder/mapper/BaseWireframeMapper : com/datadog/android/sessionreplay/internal/AsyncImageProcessingCallback, com/datadog/android/sessionreplay/internal/recorder/mapper/WireframeMapper {
10991
public static final field Companion Lcom/datadog/android/sessionreplay/internal/recorder/mapper/BaseWireframeMapper$Companion;
11092
public fun <init> ()V
111-
public fun <init> (Lcom/datadog/android/sessionreplay/utils/StringUtils;Lcom/datadog/android/sessionreplay/utils/ViewUtils;Lcom/datadog/android/sessionreplay/internal/recorder/base64/ImageCompression;Lcom/datadog/android/sessionreplay/utils/UniqueIdentifierGenerator;Lcom/datadog/android/sessionreplay/internal/recorder/base64/Base64Serializer;)V
112-
public synthetic fun <init> (Lcom/datadog/android/sessionreplay/utils/StringUtils;Lcom/datadog/android/sessionreplay/utils/ViewUtils;Lcom/datadog/android/sessionreplay/internal/recorder/base64/ImageCompression;Lcom/datadog/android/sessionreplay/utils/UniqueIdentifierGenerator;Lcom/datadog/android/sessionreplay/internal/recorder/base64/Base64Serializer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
93+
public fun <init> (Lcom/datadog/android/sessionreplay/utils/StringUtils;Lcom/datadog/android/sessionreplay/utils/ViewUtils;)V
94+
public synthetic fun <init> (Lcom/datadog/android/sessionreplay/utils/StringUtils;Lcom/datadog/android/sessionreplay/utils/ViewUtils;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
11395
protected final fun colorAndAlphaAsStringHexa (II)Ljava/lang/String;
11496
public fun finishProcessingImage ()V
115-
protected final fun getWebPMimeType ()Ljava/lang/String;
116-
protected final fun handleBitmap (Landroid/util/DisplayMetrics;Landroid/graphics/drawable/Drawable;Lcom/datadog/android/sessionreplay/model/MobileSegment$Wireframe$ImageWireframe;)V
117-
protected final fun resolveChildDrawableUniqueIdentifier (Landroid/view/View;)Ljava/lang/Long;
97+
public fun map (Landroid/view/View;Lcom/datadog/android/sessionreplay/internal/recorder/MappingContext;)Ljava/util/List;
11898
protected final fun resolveShapeStyleAndBorder (Landroid/graphics/drawable/Drawable;F)Lkotlin/Pair;
11999
protected final fun resolveViewGlobalBounds (Landroid/view/View;F)Lcom/datadog/android/sessionreplay/internal/recorder/GlobalBounds;
120100
protected final fun resolveViewId (Landroid/view/View;)J

0 commit comments

Comments
 (0)