Skip to content

Commit 8b1e9c6

Browse files
committed
feat(maui): add missing Activity lifecycle events on Android
1 parent cec5cb7 commit 8b1e9c6

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#if ANDROID
2+
using Microsoft.Maui.LifecycleEvents;
3+
using Activity = Android.App.Activity;
4+
5+
namespace Sentry.Maui.Internal;
6+
7+
// Capture Android Activity lifecycle events as breadcrumbs.
8+
// See: https://github.com/getsentry/sentry-java/blob/ab8a72db41b2e5c66e60cef3102294dddba90b20/sentry-android-core/src/main/java/io/sentry/android/core/ActivityBreadcrumbsIntegration.java
9+
internal static class AndroidActivityBreadcrumbsIntegration
10+
{
11+
public static void Register(IAndroidLifecycleBuilder lifecycle)
12+
{
13+
lifecycle.OnCreate((activity, _) => AddBreadcrumb(activity, "created"));
14+
lifecycle.OnStart(activity => AddBreadcrumb(activity, "started"));
15+
lifecycle.OnResume(activity => AddBreadcrumb(activity, "resumed"));
16+
lifecycle.OnPause(activity => AddBreadcrumb(activity, "paused"));
17+
lifecycle.OnStop(activity => AddBreadcrumb(activity, "stopped"));
18+
lifecycle.OnSaveInstanceState((activity, _) => AddBreadcrumb(activity, "saveInstanceState"));
19+
lifecycle.OnDestroy(activity => AddBreadcrumb(activity, "destroyed"));
20+
}
21+
22+
private static void AddBreadcrumb(Activity activity, string state)
23+
{
24+
var breadcrumb = new Breadcrumb(
25+
DateTimeOffset.UtcNow,
26+
message: null,
27+
type: MauiEventsBinder.NavigationType,
28+
data: new Dictionary<string, string>
29+
{
30+
{ "screen", activity.Class.SimpleName },
31+
{ "state", state }
32+
},
33+
category: MauiEventsBinder.LifecycleCategory,
34+
level: BreadcrumbLevel.Info
35+
);
36+
SentrySdk.AddBreadcrumb(breadcrumb);
37+
}
38+
}
39+
#endif

src/Sentry.Maui/Internal/SentryMauiOptionsSetup.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ public void Configure(SentryMauiOptions options)
2626
_config.Bind(bindable);
2727
bindable.ApplyTo(options);
2828

29+
#if __ANDROID__
30+
// Disable Android Activity lifecycle breadcrumbs as Sentry.Maui already tracks these.
31+
options.Native.EnableActivityLifecycleBreadcrumbs = false;
32+
#endif
33+
2934
#if __ANDROID__ || __IOS__
3035
options.Native.AttachScreenshot = options.AttachScreenshot;
3136
#endif

src/Sentry.Maui/SentryMauiAppBuilderExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ private static void RegisterMauiEventsBinder(this MauiAppBuilder builder)
140140

141141
lifecycle.OnStop(activity => SentryMauiEventProcessor.InForeground = false);
142142
lifecycle.OnPause(activity => SentryMauiEventProcessor.InForeground = false);
143+
144+
AndroidActivityBreadcrumbsIntegration.Register(lifecycle);
143145
});
144146
#elif WINDOWS
145147
events.AddWindows(lifecycle =>

0 commit comments

Comments
 (0)