From 483922d15c02a7a5bacd599a2af602850539bec6 Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Sun, 15 May 2016 20:06:27 -0700 Subject: [PATCH] allow per-command analytics suppression (#3919) * allow per-command analytics suppression * rev the usage package dep --- .../flutter_tools/lib/src/commands/config.dart | 7 ++++--- .../lib/src/runner/flutter_command_runner.dart | 11 +++++++++-- packages/flutter_tools/lib/src/usage.dart | 16 ++++++++++++---- packages/flutter_tools/pubspec.yaml | 2 +- packages/flutter_tools/test/src/context.dart | 6 ++++++ 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/config.dart b/packages/flutter_tools/lib/src/commands/config.dart index f8010583de5..ce43382ba7d 100644 --- a/packages/flutter_tools/lib/src/commands/config.dart +++ b/packages/flutter_tools/lib/src/commands/config.dart @@ -9,11 +9,9 @@ import '../runner/flutter_command.dart'; class ConfigCommand extends FlutterCommand { ConfigCommand() { - String usageStatus = flutterUsage.enabled ? 'enabled' : 'disabled'; - argParser.addFlag('analytics', negatable: true, - help: 'Enable or disable reporting anonymously tool usage statistics and crash reports.\n(currently $usageStatus)'); + help: 'Enable or disable reporting anonymously tool usage statistics and crash reports.'); } @override @@ -28,6 +26,9 @@ class ConfigCommand extends FlutterCommand { @override final List aliases = ['configure']; + @override + String get usageFooter => 'Analytics reporting is currently ${flutterUsage.enabled ? 'enabled' : 'disabled'}.'; + @override bool get requiresProjectRoot => false; diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart index bb363e4a3c0..6aaa6ec036b 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart @@ -44,6 +44,10 @@ class FlutterCommandRunner extends CommandRunner { negatable: true, hide: !verboseHelp, help: 'Whether to use terminal colors.'); + argParser.addFlag('suppress-analytics', + negatable: false, + hide: !verboseHelp, + help: 'Suppress analytics reporting when this command runs.'); String packagesHelp; if (FileSystemEntity.isFileSync('.packages')) @@ -128,10 +132,13 @@ class FlutterCommandRunner extends CommandRunner { if (globalResults.wasParsed('color')) logger.supportsColor = globalResults['color']; - // we must set Cache.flutterRoot early because other features use it - // (e.g. enginePath's initialiser uses it) + // We must set Cache.flutterRoot early because other features use it (e.g. + // enginePath's initialiser uses it). Cache.flutterRoot = path.normalize(path.absolute(globalResults['flutter-root'])); + if (globalResults['suppress-analytics']) + flutterUsage.suppressAnalytics = true; + _checkFlutterCopy(); PackageMap.instance = new PackageMap(path.normalize(path.absolute( diff --git a/packages/flutter_tools/lib/src/usage.dart b/packages/flutter_tools/lib/src/usage.dart index 78a16a4dd3f..f49138fa8ed 100644 --- a/packages/flutter_tools/lib/src/usage.dart +++ b/packages/flutter_tools/lib/src/usage.dart @@ -44,35 +44,43 @@ class Usage { Analytics _analytics; bool _printedUsage = false; + bool _suppressAnalytics = false; bool get isFirstRun => _analytics.firstRun; bool get enabled => _analytics.enabled; + bool get suppressAnalytics => _suppressAnalytics || _analytics.firstRun; + + /// Suppress analytics for this session. + set suppressAnalytics(bool value) { + _suppressAnalytics = value; + } + /// Enable or disable reporting analytics. set enabled(bool value) { _analytics.enabled = value; } void sendCommand(String command) { - if (!isFirstRun) + if (!suppressAnalytics) _analytics.sendScreenView(command); } void sendEvent(String category, String parameter) { - if (!isFirstRun) + if (!suppressAnalytics) _analytics.sendEvent(category, parameter); } UsageTimer startTimer(String event) { - if (isFirstRun) + if (suppressAnalytics) return new _MockUsageTimer(); else return new UsageTimer._(event, _analytics.startTimer(event, category: 'flutter')); } void sendException(dynamic exception, StackTrace trace) { - if (!isFirstRun) + if (!suppressAnalytics) _analytics.sendException('${exception.runtimeType}; ${sanitizeStacktrace(trace)}'); } diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 1bb747271e1..1304f7c47e8 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: path: ^1.3.0 pub_semver: ^1.0.0 stack_trace: ^1.4.0 - usage: ^2.2.0+1 + usage: ^2.2.1 web_socket_channel: ^1.0.0 xml: ^2.4.1 yaml: ^2.1.3 diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart index ec0c8a1be1f..2f40dbb2339 100644 --- a/packages/flutter_tools/test/src/context.dart +++ b/packages/flutter_tools/test/src/context.dart @@ -120,6 +120,12 @@ class MockUsage implements Usage { @override bool get isFirstRun => false; + @override + bool get suppressAnalytics => false; + + @override + set suppressAnalytics(bool value) { } + @override bool get enabled => true;