Commit 483922d1 authored by Devon Carew's avatar Devon Carew

allow per-command analytics suppression (#3919)

* allow per-command analytics suppression

* rev the usage package dep
parent 4db64ace
......@@ -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<String> aliases = <String>['configure'];
@override
String get usageFooter => 'Analytics reporting is currently ${flutterUsage.enabled ? 'enabled' : 'disabled'}.';
@override
bool get requiresProjectRoot => false;
......
......@@ -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(
......
......@@ -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)}');
}
......
......@@ -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
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment