Skip to content

Commit 307b057

Browse files
markushiromtsngetsentry-bot
committed
Determine recording size based on active window (#4354)
* Determine recording size based on active window * Extend sample app with Dialog * Update Changelog * Use onPreDrawListener instead of onDrawListener for determining window size * fix(replay): Fix window tracking (#4419) * fix(replay): Fix window tracking * api dump * Fix Changelog * Fix tests * [SR] Remove configuration from start() method (#4454) * Remove configuration from start() method * Open up onConfigurationChanged for Hybrid SDKs * Address logging concerns * Format code * Cache last known config * Update sentry-android-replay/src/main/java/io/sentry/android/replay/capture/BaseCaptureStrategy.kt Co-authored-by: Roman Zavarnitsyn <[email protected]> * Fix order * Fix compile issue --------- Co-authored-by: Sentry Github Bot <[email protected]> Co-authored-by: Roman Zavarnitsyn <[email protected]> --------- Co-authored-by: Roman Zavarnitsyn <[email protected]> Co-authored-by: Sentry Github Bot <[email protected]>
1 parent 0eb04f5 commit 307b057

File tree

22 files changed

+1830
-711
lines changed

22 files changed

+1830
-711
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- Session Replay: Fix crash on devices with the Unisoc/Spreadtrum T606 chipset ([#4477](https://github.com/getsentry/sentry-java/pull/4477))
1616
- Session Replay: Fix masking of non-styled `Text` Composables ([#4361](https://github.com/getsentry/sentry-java/pull/4361))
1717
- Session Replay: Fix masking read-only `TextField` Composables ([#4362](https://github.com/getsentry/sentry-java/pull/4362))
18+
- Correctly capture Dialogs and non full-sized windows ([#4354](https://github.com/getsentry/sentry-java/pull/4354))
1819

1920
## 7.22.5
2021

sentry-android-replay/api/sentry-android-replay.api

Lines changed: 14 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -34,49 +34,47 @@ public final class io/sentry/android/replay/ModifierExtensionsKt {
3434
}
3535

3636
public abstract interface class io/sentry/android/replay/Recorder : java/io/Closeable {
37+
public abstract fun onConfigurationChanged (Lio/sentry/android/replay/ScreenshotRecorderConfig;)V
3738
public abstract fun pause ()V
39+
public abstract fun reset ()V
3840
public abstract fun resume ()V
39-
public abstract fun start (Lio/sentry/android/replay/ScreenshotRecorderConfig;)V
41+
public abstract fun start ()V
4042
public abstract fun stop ()V
4143
}
4244

4345
public final class io/sentry/android/replay/ReplayCache : java/io/Closeable {
4446
public static final field $stable I
45-
public static final field Companion Lio/sentry/android/replay/ReplayCache$Companion;
4647
public fun <init> (Lio/sentry/SentryOptions;Lio/sentry/protocol/SentryId;)V
4748
public final fun addFrame (Ljava/io/File;JLjava/lang/String;)V
4849
public static synthetic fun addFrame$default (Lio/sentry/android/replay/ReplayCache;Ljava/io/File;JLjava/lang/String;ILjava/lang/Object;)V
4950
public fun close ()V
5051
public final fun createVideoOf (JJIIIIILjava/io/File;)Lio/sentry/android/replay/GeneratedVideo;
5152
public static synthetic fun createVideoOf$default (Lio/sentry/android/replay/ReplayCache;JJIIIIILjava/io/File;ILjava/lang/Object;)Lio/sentry/android/replay/GeneratedVideo;
52-
public final fun persistSegmentValues (Ljava/lang/String;Ljava/lang/String;)V
53-
public final fun rotate (J)Ljava/lang/String;
5453
}
5554

56-
public final class io/sentry/android/replay/ReplayCache$Companion {
57-
public final fun makeReplayCacheDir (Lio/sentry/SentryOptions;Lio/sentry/protocol/SentryId;)Ljava/io/File;
58-
}
59-
60-
public final class io/sentry/android/replay/ReplayIntegration : android/content/ComponentCallbacks, io/sentry/IConnectionStatusProvider$IConnectionStatusObserver, io/sentry/Integration, io/sentry/ReplayController, io/sentry/android/replay/ScreenshotRecorderCallback, io/sentry/android/replay/gestures/TouchRecorderCallback, io/sentry/transport/RateLimiter$IRateLimitObserver, java/io/Closeable {
55+
public final class io/sentry/android/replay/ReplayIntegration : io/sentry/IConnectionStatusProvider$IConnectionStatusObserver, io/sentry/Integration, io/sentry/ReplayController, io/sentry/android/replay/ScreenshotRecorderCallback, io/sentry/android/replay/WindowCallback, io/sentry/android/replay/gestures/TouchRecorderCallback, io/sentry/transport/RateLimiter$IRateLimitObserver, java/io/Closeable {
6156
public static final field $stable I
6257
public fun <init> (Landroid/content/Context;Lio/sentry/transport/ICurrentDateProvider;)V
63-
public fun <init> (Landroid/content/Context;Lio/sentry/transport/ICurrentDateProvider;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
64-
public synthetic fun <init> (Landroid/content/Context;Lio/sentry/transport/ICurrentDateProvider;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
58+
public fun <init> (Landroid/content/Context;Lio/sentry/transport/ICurrentDateProvider;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V
59+
public synthetic fun <init> (Landroid/content/Context;Lio/sentry/transport/ICurrentDateProvider;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6560
public fun captureReplay (Ljava/lang/Boolean;)V
6661
public fun close ()V
62+
public fun disableDebugMaskingOverlay ()V
63+
public fun enableDebugMaskingOverlay ()V
6764
public fun getBreadcrumbConverter ()Lio/sentry/ReplayBreadcrumbConverter;
6865
public final fun getReplayCacheDir ()Ljava/io/File;
6966
public fun getReplayId ()Lio/sentry/protocol/SentryId;
67+
public fun isDebugMaskingOverlayEnabled ()Z
7068
public fun isRecording ()Z
71-
public fun onConfigurationChanged (Landroid/content/res/Configuration;)V
69+
public final fun onConfigurationChanged (Lio/sentry/android/replay/ScreenshotRecorderConfig;)V
7270
public fun onConnectionStatusChanged (Lio/sentry/IConnectionStatusProvider$ConnectionStatus;)V
73-
public fun onLowMemory ()V
7471
public fun onRateLimitChanged (Lio/sentry/transport/RateLimiter;)V
7572
public fun onScreenshotRecorded (Landroid/graphics/Bitmap;)V
7673
public fun onScreenshotRecorded (Ljava/io/File;J)V
7774
public fun onTouchEvent (Landroid/view/MotionEvent;)V
75+
public fun onWindowSizeChanged (II)V
7876
public fun pause ()V
79-
public fun register (Lio/sentry/IHub;Lio/sentry/SentryOptions;)V
77+
public fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
8078
public fun resume ()V
8179
public fun setBreadcrumbConverter (Lio/sentry/ReplayBreadcrumbConverter;)V
8280
public fun start ()V
@@ -90,7 +88,6 @@ public abstract interface class io/sentry/android/replay/ScreenshotRecorderCallb
9088

9189
public final class io/sentry/android/replay/ScreenshotRecorderConfig {
9290
public static final field $stable I
93-
public static final field Companion Lio/sentry/android/replay/ScreenshotRecorderConfig$Companion;
9491
public fun <init> (IIFFII)V
9592
public final fun component1 ()I
9693
public final fun component2 ()I
@@ -111,10 +108,6 @@ public final class io/sentry/android/replay/ScreenshotRecorderConfig {
111108
public fun toString ()Ljava/lang/String;
112109
}
113110

114-
public final class io/sentry/android/replay/ScreenshotRecorderConfig$Companion {
115-
public final fun from (Landroid/content/Context;Lio/sentry/SentryReplayOptions;)Lio/sentry/android/replay/ScreenshotRecorderConfig;
116-
}
117-
118111
public final class io/sentry/android/replay/SentryReplayModifiers {
119112
public static final field $stable I
120113
public static final field INSTANCE Lio/sentry/android/replay/SentryReplayModifiers;
@@ -133,36 +126,14 @@ public final class io/sentry/android/replay/ViewExtensionsKt {
133126
public static final fun sentryReplayUnmask (Landroid/view/View;)V
134127
}
135128

136-
public final class io/sentry/android/replay/gestures/GestureRecorder : io/sentry/android/replay/OnRootViewsChangedListener {
137-
public static final field $stable I
138-
public fun <init> (Lio/sentry/SentryOptions;Lio/sentry/android/replay/gestures/TouchRecorderCallback;)V
139-
public fun onRootViewsChanged (Landroid/view/View;Z)V
140-
public final fun stop ()V
141-
}
142-
143-
public final class io/sentry/android/replay/gestures/ReplayGestureConverter {
144-
public static final field $stable I
145-
public fun <init> (Lio/sentry/transport/ICurrentDateProvider;)V
146-
public final fun convert (Landroid/view/MotionEvent;Lio/sentry/android/replay/ScreenshotRecorderConfig;)Ljava/util/List;
129+
public abstract interface class io/sentry/android/replay/WindowCallback {
130+
public abstract fun onWindowSizeChanged (II)V
147131
}
148132

149133
public abstract interface class io/sentry/android/replay/gestures/TouchRecorderCallback {
150134
public abstract fun onTouchEvent (Landroid/view/MotionEvent;)V
151135
}
152136

153-
public final class io/sentry/android/replay/util/AndroidTextLayout : io/sentry/android/replay/util/TextLayout {
154-
public static final field $stable I
155-
public fun <init> (Landroid/text/Layout;)V
156-
public fun getDominantTextColor ()Ljava/lang/Integer;
157-
public fun getEllipsisCount (I)I
158-
public fun getLineBottom (I)I
159-
public fun getLineCount ()I
160-
public fun getLineStart (I)I
161-
public fun getLineTop (I)I
162-
public fun getLineVisibleEnd (I)I
163-
public fun getPrimaryHorizontal (II)F
164-
}
165-
166137
public class io/sentry/android/replay/util/FixedWindowCallback : android/view/Window$Callback {
167138
public final field delegate Landroid/view/Window$Callback;
168139
public fun <init> (Landroid/view/Window$Callback;)V
@@ -193,82 +164,3 @@ public class io/sentry/android/replay/util/FixedWindowCallback : android/view/Wi
193164
public fun onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
194165
}
195166

196-
public abstract interface class io/sentry/android/replay/util/TextLayout {
197-
public abstract fun getDominantTextColor ()Ljava/lang/Integer;
198-
public abstract fun getEllipsisCount (I)I
199-
public abstract fun getLineBottom (I)I
200-
public abstract fun getLineCount ()I
201-
public abstract fun getLineStart (I)I
202-
public abstract fun getLineTop (I)I
203-
public abstract fun getLineVisibleEnd (I)I
204-
public abstract fun getPrimaryHorizontal (II)F
205-
}
206-
207-
public abstract interface class io/sentry/android/replay/video/SimpleFrameMuxer {
208-
public abstract fun getVideoTime ()J
209-
public abstract fun isStarted ()Z
210-
public abstract fun muxVideoFrame (Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;)V
211-
public abstract fun release ()V
212-
public abstract fun start (Landroid/media/MediaFormat;)V
213-
}
214-
215-
public final class io/sentry/android/replay/video/SimpleMp4FrameMuxer : io/sentry/android/replay/video/SimpleFrameMuxer {
216-
public static final field $stable I
217-
public fun <init> (Ljava/lang/String;F)V
218-
public fun getVideoTime ()J
219-
public fun isStarted ()Z
220-
public fun muxVideoFrame (Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;)V
221-
public fun release ()V
222-
public fun start (Landroid/media/MediaFormat;)V
223-
}
224-
225-
public abstract class io/sentry/android/replay/viewhierarchy/ViewHierarchyNode {
226-
public static final field $stable I
227-
public static final field Companion Lio/sentry/android/replay/viewhierarchy/ViewHierarchyNode$Companion;
228-
public synthetic fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
229-
public synthetic fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
230-
public final fun getChildren ()Ljava/util/List;
231-
public final fun getDistance ()I
232-
public final fun getElevation ()F
233-
public final fun getHeight ()I
234-
public final fun getParent ()Lio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;
235-
public final fun getShouldMask ()Z
236-
public final fun getVisibleRect ()Landroid/graphics/Rect;
237-
public final fun getWidth ()I
238-
public final fun getX ()F
239-
public final fun getY ()F
240-
public final fun isImportantForContentCapture ()Z
241-
public final fun isObscured (Lio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;)Z
242-
public final fun isVisible ()Z
243-
public final fun setChildren (Ljava/util/List;)V
244-
public final fun setImportantForCaptureToAncestors (Z)V
245-
public final fun setImportantForContentCapture (Z)V
246-
public final fun traverse (Lkotlin/jvm/functions/Function1;)V
247-
}
248-
249-
public final class io/sentry/android/replay/viewhierarchy/ViewHierarchyNode$Companion {
250-
public final fun fromView (Landroid/view/View;Lio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ILio/sentry/SentryOptions;)Lio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;
251-
}
252-
253-
public final class io/sentry/android/replay/viewhierarchy/ViewHierarchyNode$GenericViewHierarchyNode : io/sentry/android/replay/viewhierarchy/ViewHierarchyNode {
254-
public static final field $stable I
255-
public fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;)V
256-
public synthetic fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
257-
}
258-
259-
public final class io/sentry/android/replay/viewhierarchy/ViewHierarchyNode$ImageViewHierarchyNode : io/sentry/android/replay/viewhierarchy/ViewHierarchyNode {
260-
public static final field $stable I
261-
public fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;)V
262-
public synthetic fun <init> (FFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
263-
}
264-
265-
public final class io/sentry/android/replay/viewhierarchy/ViewHierarchyNode$TextViewHierarchyNode : io/sentry/android/replay/viewhierarchy/ViewHierarchyNode {
266-
public static final field $stable I
267-
public fun <init> (Lio/sentry/android/replay/util/TextLayout;Ljava/lang/Integer;IIFFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;)V
268-
public synthetic fun <init> (Lio/sentry/android/replay/util/TextLayout;Ljava/lang/Integer;IIFFIIFILio/sentry/android/replay/viewhierarchy/ViewHierarchyNode;ZZZLandroid/graphics/Rect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
269-
public final fun getDominantColor ()Ljava/lang/Integer;
270-
public final fun getLayout ()Lio/sentry/android/replay/util/TextLayout;
271-
public final fun getPaddingLeft ()I
272-
public final fun getPaddingTop ()I
273-
}
274-

sentry-android-replay/src/main/java/io/sentry/android/replay/Recorder.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ interface Recorder : Closeable {
88
* at which the screenshots should be taken, and the screenshots size/resolution, which can
99
* change e.g. in the case of orientation change or window size change
1010
*/
11-
fun start(recorderConfig: ScreenshotRecorderConfig)
11+
fun start()
12+
13+
fun onConfigurationChanged(config: ScreenshotRecorderConfig)
1214

1315
fun resume()
1416

1517
fun pause()
1618

19+
fun reset()
20+
1721
fun stop()
1822
}

0 commit comments

Comments
 (0)