diff --git a/packages/flutter_tools/lib/runner.dart b/packages/flutter_tools/lib/runner.dart index f1a46f9a9a..f9a4362387 100644 --- a/packages/flutter_tools/lib/runner.dart +++ b/packages/flutter_tools/lib/runner.dart @@ -73,47 +73,28 @@ Future run( exitCode: 1); } - // Disable analytics if user passes in the `--disable-analytics` option - // "flutter --disable-analytics" - // - // Same functionality as "flutter config --no-analytics" for disabling - // except with the `value` hard coded as false if (args.contains('--disable-analytics')) { - // The tool sends the analytics event *before* toggling the flag - // intentionally to be sure that opt-out events are sent correctly. - AnalyticsConfigEvent(enabled: false).send(); - - // Normally, the tool waits for the analytics to all send before the - // tool exits, but only when analytics are enabled. When reporting that - // analytics have been disable, the wait must be done here instead. - await globals.flutterUsage.ensureAnalyticsSent(); - - globals.flutterUsage.enabled = false; - globals.printStatus('Analytics reporting disabled.'); - - // TODO(eliasyishak): Set the telemetry for the unified_analytics - // package as well, the above will be removed once we have - // fully transitioned to using the new package, https://github.com/flutter/flutter/issues/128251 + if (globals.analytics.telemetryEnabled) { + globals.analytics.send( + Event.analyticsCollectionEnabled(status: false), + ); + // Before disablig analytics, we need to close the client to make + // sure the above collection event is sent. + await globals.analytics.close(); + } await globals.analytics.setTelemetry(false); + globals.printStatus('Analytics reporting disabled.'); } - // Enable analytics if user passes in the `--enable-analytics` option - // `flutter --enable-analytics` - // - // Same functionality as `flutter config --analytics` for enabling - // except with the `value` hard coded as true if (args.contains('--enable-analytics')) { - // The tool sends the analytics event *before* toggling the flag - // intentionally to be sure that opt-out events are sent correctly. - AnalyticsConfigEvent(enabled: true).send(); - - globals.flutterUsage.enabled = true; - globals.printStatus('Analytics reporting enabled.'); - - // TODO(eliasyishak): Set the telemetry for the unified_analytics - // package as well, the above will be removed once we have - // fully transitioned to using the new package, https://github.com/flutter/flutter/issues/128251 + final bool alreadyEnabled = globals.analytics.telemetryEnabled; await globals.analytics.setTelemetry(true); + if (!alreadyEnabled) { + globals.analytics.send( + Event.analyticsCollectionEnabled(status: true), + ); + } + globals.printStatus('Analytics reporting enabled.'); } // Send an event to GA3 for any users that are opted into GA3 diff --git a/packages/flutter_tools/test/general.shard/runner/runner_test.dart b/packages/flutter_tools/test/general.shard/runner/runner_test.dart index d67899a7a0..619b1547f2 100644 --- a/packages/flutter_tools/test/general.shard/runner/runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/runner_test.dart @@ -541,7 +541,7 @@ void main() { ); testUsingContext( - 'runner enabling analytics with flag', + '--enable-analytics and --disable-analytics enables/disables telemetry', () async { io.setExitFunctionForTests((int exitCode) {}); @@ -550,8 +550,6 @@ void main() { await runner.run( ['--disable-analytics'], () => [], - // This flutterVersion disables crash reporting. - flutterVersion: '[user-branch]/', shutdownHooks: ShutdownHooks(), ); @@ -560,8 +558,6 @@ void main() { await runner.run( ['--enable-analytics'], () => [], - // This flutterVersion disables crash reporting. - flutterVersion: '[user-branch]/', shutdownHooks: ShutdownHooks(), ); @@ -574,6 +570,72 @@ void main() { }, ); + testUsingContext( + '--enable-analytics and --disable-analytics send an event when telemetry is enabled/disabled', + () async { + io.setExitFunctionForTests((int exitCode) {}); + await globals.analytics.setTelemetry(true); + + await runner.run( + ['--disable-analytics'], + () => [], + shutdownHooks: ShutdownHooks(), + ); + + expect( + (globals.analytics as FakeAnalytics).sentEvents, + [Event.analyticsCollectionEnabled(status: false)], + ); + + (globals.analytics as FakeAnalytics).sentEvents.clear(); + expect(globals.analytics.telemetryEnabled, false); + await runner.run( + ['--enable-analytics'], + () => [], + shutdownHooks: ShutdownHooks(), + ); + + expect((globals.analytics as FakeAnalytics).sentEvents, [ + Event.analyticsCollectionEnabled(status: true), + ]); + }, + overrides: { + Analytics: () => fakeAnalytics, + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + }, + ); + + testUsingContext( + '--enable-analytics and --disable-analytics do not send an event when telemetry is already enabled/disabled', + () async { + io.setExitFunctionForTests((int exitCode) {}); + + await globals.analytics.setTelemetry(false); + await runner.run( + ['--disable-analytics'], + () => [], + shutdownHooks: ShutdownHooks(), + ); + + expect((globals.analytics as FakeAnalytics).sentEvents, isEmpty); + + await globals.analytics.setTelemetry(true); + await runner.run( + ['--enable-analytics'], + () => [], + shutdownHooks: ShutdownHooks(), + ); + + expect((globals.analytics as FakeAnalytics).sentEvents, isEmpty); + }, + overrides: { + Analytics: () => fakeAnalytics, + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + }, + ); + testUsingContext( 'throw error when both flags passed', () async {