Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

### Fixes

- Android not sending events when `autoInitializedNativeSdk` is disabled ([#3420](https://github.com/getsentry/sentry-dart/pull/3420))

## 9.9.1

### Fixes
Expand Down
12 changes: 7 additions & 5 deletions packages/flutter/lib/src/native/java/sentry_native_java.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ class SentryNativeJava extends SentryNativeChannel {
AndroidEnvelopeSender? _envelopeSender;
native.ReplayIntegration? _nativeReplay;

SentryNativeJava(super.options);
SentryNativeJava(super.options) {
// Initialize envelope sender here instead of init() to ensure it starts
// in both autoInitializeNativeSdk enabled and disabled cases.
_envelopeSender = AndroidEnvelopeSender.factory(options);
_envelopeSender!.start();
Comment thread
buenaflor marked this conversation as resolved.
Outdated
Comment thread
buenaflor marked this conversation as resolved.
Outdated
}
Comment thread
buenaflor marked this conversation as resolved.
Comment thread
buenaflor marked this conversation as resolved.

@override
bool get supportsReplay => true;
Expand All @@ -36,11 +41,8 @@ class SentryNativeJava extends SentryNativeChannel {
AndroidReplayRecorder? get testRecorder => _replayRecorder;

@override
Future<void> init(Hub hub) async {
void init(Hub hub) {
initSentryAndroid(hub: hub, options: options, owner: this);

_envelopeSender = AndroidEnvelopeSender.factory(options);
await _envelopeSender?.start();
}

@override
Comment thread
buenaflor marked this conversation as resolved.
Expand Down
60 changes: 60 additions & 0 deletions packages/flutter/test/native/sentry_native_java_test.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
@TestOn('vm')
// ignore_for_file: invalid_use_of_internal_member
library;

import 'dart:async';
import 'dart:typed_data';

import 'package:flutter_test/flutter_test.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:sentry_flutter/src/native/java/android_envelope_sender.dart';
import 'sentry_native_java_web_stub.dart'
if (dart.library.io) 'package:sentry_flutter/src/native/java/sentry_native_java.dart';

Expand Down Expand Up @@ -46,4 +52,58 @@ void main() {
expect(24.5.adjustReplaySizeToBlockSize(), 32.0);
});
});

group('EnvelopeSender initialization', () {
late AndroidEnvelopeSender Function(SentryFlutterOptions) originalFactory;

setUp(() {
originalFactory = AndroidEnvelopeSender.factory;
});

tearDown(() {
AndroidEnvelopeSender.factory = originalFactory;
});

test('starts envelope sender in constructor', () {
var factoryCalled = false;
var startCalled = false;

AndroidEnvelopeSender.factory = (options) {
factoryCalled = true;
return _FakeEnvelopeSender(onStart: () => startCalled = true);
};

final options =
SentryFlutterOptions(dsn: 'https://abc@def.ingest.sentry.io/1234567');
SentryNativeJava(options);

expect(factoryCalled, isTrue,
reason: 'Factory should be called during construction');
expect(startCalled, isTrue,
reason: 'start() should be called during construction');
});
});
}

/// Fake envelope sender for testing that tracks method calls.
class _FakeEnvelopeSender implements AndroidEnvelopeSender {
final void Function()? onStart;

_FakeEnvelopeSender({this.onStart});

@override
FutureOr<void> start() {
onStart?.call();
}

@override
FutureOr<void> close() {
// No-op for testing
}

@override
void captureEnvelope(
Uint8List envelopeData, bool containsUnhandledException) {
// No-op for testing
}
}
Comment thread
buenaflor marked this conversation as resolved.
Outdated
6 changes: 6 additions & 0 deletions packages/flutter/test/native/sentry_native_java_web_stub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@
// without importing JNI or other FFI dependencies.

import 'package:meta/meta.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

@visibleForTesting
extension ReplaySizeAdjustment on double {
double adjustReplaySizeToBlockSize() {
return 0;
}
}

/// Stub class for web compilation. Tests using this run only on VM.
class SentryNativeJava {
SentryNativeJava(SentryFlutterOptions options);
}
Loading