Analytics: build an event

This commit is contained in:
Vishesh Handa
2021-08-03 15:50:17 +02:00
parent 80d7a8246a
commit d0efbbf6ad
7 changed files with 315 additions and 255 deletions

View File

@ -1,7 +1,11 @@
import 'dart:math';
import 'package:fixnum/fixnum.dart';
import 'package:recase/recase.dart';
import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/logger/logger.dart';
import 'generated/analytics.pb.dart' as pb;
enum Event {
NoteAdded,
@ -54,6 +58,7 @@ enum Event {
*/
}
const int _intMaxValue = 9007199254740991;
class Analytics {
bool enabled = false;
@ -62,18 +67,24 @@ class Analytics {
static Analytics init({required bool enable}) {
_global = Analytics();
_global!.enabled = enable;
_global!.sessionId = Random().nextInt(_intMaxValue).toRadixString(16);
return _global!;
}
static Analytics? get instance => _global!;
late String sessionId;
var userProps = <String, String>{};
Future<void> log({
required Event e,
Map<String, String> parameters = const {},
}) async {
String name = _eventToString(e);
if (enabled) {
var event = _buildEvent(name, parameters);
print(event);
// await firebase.logEvent(name: name, parameters: parameters);
}
captureErrorBreadcrumb(name: name, parameters: parameters);
@ -93,7 +104,19 @@ class Analytics {
if (!enabled) {
return;
}
// await firebase.setUserProperty(name: name, value: value);
userProps[name] = value;
}
pb.Event _buildEvent(String name, Map<String, String> params) {
return pb.Event(
name: name,
date: Int64(DateTime.now().millisecondsSinceEpoch ~/ 1000),
params: params,
psuedoId: null,
userProperties: userProps,
sessionID: sessionId,
userFirstTouchTimestamp: null,
);
}
}

View File

@ -19,37 +19,37 @@ message AnalyticsMessage {
// FIXME: What about AppInfo
}
message Any {
oneof value {
string stringValue = 1;
int64 intValue = 2;
double doubleValue = 3;
bool boolValue = 4;
}
}
// message Any {
// oneof value {
// string stringValue = 1;
// int64 intValue = 2;
// double doubleValue = 3;
// bool boolValue = 4;
// }
// }
message Event {
string name = 1;
int64 date = 2; // unix timestamp
map<string, Any> params = 3;
map<string, string> params = 3;
string userId = 4;
string psuedoId = 5;
map<string, Any> userProperties = 6;
map<string, string> userProperties = 6;
string sessionID = 7;
string platform = 8;
int64 userFirstTouchTimestamp = 9;
int64 userFirstTouchTimestamp = 8;
}
message DeviceInfo {
Platform platform = 1;
oneof deviceInfo {
AndroidDeviceInfo androidDeviceInfo = 1;
IosDeviceInfo iosDeviceInfo = 2;
LinuxDeviceInfo linuxDeviceInfo = 3;
MacOSDeviceInfo macOSDeviceInfo = 4;
WindowsDeviceInfo windowsDeviceInfo = 5;
WebBrowserInfo webBrowserInfo = 6;
AndroidDeviceInfo androidDeviceInfo = 11;
IosDeviceInfo iosDeviceInfo = 12;
LinuxDeviceInfo linuxDeviceInfo = 13;
MacOSDeviceInfo macOSDeviceInfo = 14;
WindowsDeviceInfo windowsDeviceInfo = 15;
WebBrowserInfo webBrowserInfo = 16;
}
}
@ -68,6 +68,15 @@ message AppInfo {
string installSource = 4;
}
enum Platform {
android = 0;
ios = 1;
linux = 2;
macos = 3;
windows = 4;
web = 5;
}
message AndroidBuildVersion {
string baseOS = 1;
string codename = 2;

View File

@ -43,7 +43,7 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
androidId: androidInfo.androidId,
systemFeatures: androidInfo.systemFeatures.whereType(),
);
return pb.DeviceInfo(androidDeviceInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), androidDeviceInfo: info);
}
if (Platform.isIOS) {
@ -66,7 +66,7 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
isPhysicalDevice: iosInfo.isPhysicalDevice,
utsname: utsName,
);
return pb.DeviceInfo(iosDeviceInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), iosDeviceInfo: info);
}
if (Platform.isLinux) {
@ -85,7 +85,7 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
machineId: linuxInfo.machineId,
);
return pb.DeviceInfo(linuxDeviceInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), linuxDeviceInfo: info);
}
if (Platform.isMacOS) {
@ -102,7 +102,7 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
cpuFrequency: macOsInfo.cpuFrequency,
);
return pb.DeviceInfo(macOSDeviceInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), macOSDeviceInfo: info);
}
if (Platform.isWindows) {
@ -113,7 +113,7 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
systemMemoryInMegabytes: windowsInfo.systemMemoryInMegabytes,
);
return pb.DeviceInfo(windowsDeviceInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), windowsDeviceInfo: info);
}
if (kIsWeb) {
@ -165,8 +165,31 @@ Future<pb.DeviceInfo> buildDeviceInfo() async {
maxTouchPoints: webInfo.maxTouchPoints,
);
return pb.DeviceInfo(webBrowserInfo: info);
return pb.DeviceInfo(platform: _currentPlatform(), webBrowserInfo: info);
}
throw Exception("Unknown Platform for Analytics");
}
pb.Platform _currentPlatform() {
if (Platform.isAndroid) {
return pb.Platform.android;
}
if (Platform.isIOS) {
return pb.Platform.ios;
}
if (Platform.isMacOS) {
return pb.Platform.macos;
}
if (Platform.isLinux) {
return pb.Platform.linux;
}
if (Platform.isWindows) {
return pb.Platform.windows;
}
if (kIsWeb) {
return pb.Platform.web;
}
throw UnimplementedError('Invalid Analytics Platform');
}

View File

@ -14,6 +14,35 @@ import 'analytics.pbenum.dart';
export 'analytics.pbenum.dart';
class AnalyticsReply extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'AnalyticsReply', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'gitjournal'), createEmptyInstance: create)
..hasRequiredFields = false
;
AnalyticsReply._() : super();
factory AnalyticsReply() => create();
factory AnalyticsReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory AnalyticsReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
AnalyticsReply clone() => AnalyticsReply()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
AnalyticsReply copyWith(void Function(AnalyticsReply) updates) => super.copyWith((message) => updates(message as AnalyticsReply)) as AnalyticsReply; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static AnalyticsReply create() => AnalyticsReply._();
AnalyticsReply createEmptyInstance() => create();
static $pb.PbList<AnalyticsReply> createRepeated() => $pb.PbList<AnalyticsReply>();
@$core.pragma('dart2js:noInline')
static AnalyticsReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AnalyticsReply>(create);
static AnalyticsReply? _defaultInstance;
}
class AnalyticsMessage extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'AnalyticsMessage', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'gitjournal'), createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'appId', protoName: 'appId')
@ -101,125 +130,16 @@ class AnalyticsMessage extends $pb.GeneratedMessage {
PackageInfo ensurePackageInfo() => $_ensure(3);
}
enum Any_Value {
stringValue,
intValue,
doubleValue,
boolValue,
notSet
}
class Any extends $pb.GeneratedMessage {
static const $core.Map<$core.int, Any_Value> _Any_ValueByTag = {
1 : Any_Value.stringValue,
2 : Any_Value.intValue,
3 : Any_Value.doubleValue,
4 : Any_Value.boolValue,
0 : Any_Value.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Any', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'gitjournal'), createEmptyInstance: create)
..oo(0, [1, 2, 3, 4])
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'stringValue', protoName: 'stringValue')
..aInt64(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'intValue', protoName: 'intValue')
..a<$core.double>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'doubleValue', $pb.PbFieldType.OD, protoName: 'doubleValue')
..aOB(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'boolValue', protoName: 'boolValue')
..hasRequiredFields = false
;
Any._() : super();
factory Any({
$core.String? stringValue,
$fixnum.Int64? intValue,
$core.double? doubleValue,
$core.bool? boolValue,
}) {
final _result = create();
if (stringValue != null) {
_result.stringValue = stringValue;
}
if (intValue != null) {
_result.intValue = intValue;
}
if (doubleValue != null) {
_result.doubleValue = doubleValue;
}
if (boolValue != null) {
_result.boolValue = boolValue;
}
return _result;
}
factory Any.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Any.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
Any clone() => Any()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
Any copyWith(void Function(Any) updates) => super.copyWith((message) => updates(message as Any)) as Any; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Any create() => Any._();
Any createEmptyInstance() => create();
static $pb.PbList<Any> createRepeated() => $pb.PbList<Any>();
@$core.pragma('dart2js:noInline')
static Any getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Any>(create);
static Any? _defaultInstance;
Any_Value whichValue() => _Any_ValueByTag[$_whichOneof(0)]!;
void clearValue() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
$core.String get stringValue => $_getSZ(0);
@$pb.TagNumber(1)
set stringValue($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasStringValue() => $_has(0);
@$pb.TagNumber(1)
void clearStringValue() => clearField(1);
@$pb.TagNumber(2)
$fixnum.Int64 get intValue => $_getI64(1);
@$pb.TagNumber(2)
set intValue($fixnum.Int64 v) { $_setInt64(1, v); }
@$pb.TagNumber(2)
$core.bool hasIntValue() => $_has(1);
@$pb.TagNumber(2)
void clearIntValue() => clearField(2);
@$pb.TagNumber(3)
$core.double get doubleValue => $_getN(2);
@$pb.TagNumber(3)
set doubleValue($core.double v) { $_setDouble(2, v); }
@$pb.TagNumber(3)
$core.bool hasDoubleValue() => $_has(2);
@$pb.TagNumber(3)
void clearDoubleValue() => clearField(3);
@$pb.TagNumber(4)
$core.bool get boolValue => $_getBF(3);
@$pb.TagNumber(4)
set boolValue($core.bool v) { $_setBool(3, v); }
@$pb.TagNumber(4)
$core.bool hasBoolValue() => $_has(3);
@$pb.TagNumber(4)
void clearBoolValue() => clearField(4);
}
class Event extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Event', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'gitjournal'), createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name')
..aInt64(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'date')
..m<$core.String, Any>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'params', entryClassName: 'Event.ParamsEntry', keyFieldType: $pb.PbFieldType.OS, valueFieldType: $pb.PbFieldType.OM, valueCreator: Any.create, packageName: const $pb.PackageName('gitjournal'))
..m<$core.String, $core.String>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'params', entryClassName: 'Event.ParamsEntry', keyFieldType: $pb.PbFieldType.OS, valueFieldType: $pb.PbFieldType.OS, packageName: const $pb.PackageName('gitjournal'))
..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userId', protoName: 'userId')
..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'psuedoId', protoName: 'psuedoId')
..m<$core.String, Any>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userProperties', protoName: 'userProperties', entryClassName: 'Event.UserPropertiesEntry', keyFieldType: $pb.PbFieldType.OS, valueFieldType: $pb.PbFieldType.OM, valueCreator: Any.create, packageName: const $pb.PackageName('gitjournal'))
..m<$core.String, $core.String>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userProperties', protoName: 'userProperties', entryClassName: 'Event.UserPropertiesEntry', keyFieldType: $pb.PbFieldType.OS, valueFieldType: $pb.PbFieldType.OS, packageName: const $pb.PackageName('gitjournal'))
..aOS(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sessionID', protoName: 'sessionID')
..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'platform')
..aInt64(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userFirstTouchTimestamp', protoName: 'userFirstTouchTimestamp')
..aInt64(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userFirstTouchTimestamp', protoName: 'userFirstTouchTimestamp')
..hasRequiredFields = false
;
@ -227,12 +147,11 @@ class Event extends $pb.GeneratedMessage {
factory Event({
$core.String? name,
$fixnum.Int64? date,
$core.Map<$core.String, Any>? params,
$core.Map<$core.String, $core.String>? params,
$core.String? userId,
$core.String? psuedoId,
$core.Map<$core.String, Any>? userProperties,
$core.Map<$core.String, $core.String>? userProperties,
$core.String? sessionID,
$core.String? platform,
$fixnum.Int64? userFirstTouchTimestamp,
}) {
final _result = create();
@ -257,9 +176,6 @@ class Event extends $pb.GeneratedMessage {
if (sessionID != null) {
_result.sessionID = sessionID;
}
if (platform != null) {
_result.platform = platform;
}
if (userFirstTouchTimestamp != null) {
_result.userFirstTouchTimestamp = userFirstTouchTimestamp;
}
@ -305,7 +221,7 @@ class Event extends $pb.GeneratedMessage {
void clearDate() => clearField(2);
@$pb.TagNumber(3)
$core.Map<$core.String, Any> get params => $_getMap(2);
$core.Map<$core.String, $core.String> get params => $_getMap(2);
@$pb.TagNumber(4)
$core.String get userId => $_getSZ(3);
@ -326,7 +242,7 @@ class Event extends $pb.GeneratedMessage {
void clearPsuedoId() => clearField(5);
@$pb.TagNumber(6)
$core.Map<$core.String, Any> get userProperties => $_getMap(5);
$core.Map<$core.String, $core.String> get userProperties => $_getMap(5);
@$pb.TagNumber(7)
$core.String get sessionID => $_getSZ(6);
@ -338,22 +254,13 @@ class Event extends $pb.GeneratedMessage {
void clearSessionID() => clearField(7);
@$pb.TagNumber(8)
$core.String get platform => $_getSZ(7);
$fixnum.Int64 get userFirstTouchTimestamp => $_getI64(7);
@$pb.TagNumber(8)
set platform($core.String v) { $_setString(7, v); }
set userFirstTouchTimestamp($fixnum.Int64 v) { $_setInt64(7, v); }
@$pb.TagNumber(8)
$core.bool hasPlatform() => $_has(7);
$core.bool hasUserFirstTouchTimestamp() => $_has(7);
@$pb.TagNumber(8)
void clearPlatform() => clearField(8);
@$pb.TagNumber(9)
$fixnum.Int64 get userFirstTouchTimestamp => $_getI64(8);
@$pb.TagNumber(9)
set userFirstTouchTimestamp($fixnum.Int64 v) { $_setInt64(8, v); }
@$pb.TagNumber(9)
$core.bool hasUserFirstTouchTimestamp() => $_has(8);
@$pb.TagNumber(9)
void clearUserFirstTouchTimestamp() => clearField(9);
void clearUserFirstTouchTimestamp() => clearField(8);
}
enum DeviceInfo_DeviceInfo {
@ -368,27 +275,29 @@ enum DeviceInfo_DeviceInfo {
class DeviceInfo extends $pb.GeneratedMessage {
static const $core.Map<$core.int, DeviceInfo_DeviceInfo> _DeviceInfo_DeviceInfoByTag = {
1 : DeviceInfo_DeviceInfo.androidDeviceInfo,
2 : DeviceInfo_DeviceInfo.iosDeviceInfo,
3 : DeviceInfo_DeviceInfo.linuxDeviceInfo,
4 : DeviceInfo_DeviceInfo.macOSDeviceInfo,
5 : DeviceInfo_DeviceInfo.windowsDeviceInfo,
6 : DeviceInfo_DeviceInfo.webBrowserInfo,
11 : DeviceInfo_DeviceInfo.androidDeviceInfo,
12 : DeviceInfo_DeviceInfo.iosDeviceInfo,
13 : DeviceInfo_DeviceInfo.linuxDeviceInfo,
14 : DeviceInfo_DeviceInfo.macOSDeviceInfo,
15 : DeviceInfo_DeviceInfo.windowsDeviceInfo,
16 : DeviceInfo_DeviceInfo.webBrowserInfo,
0 : DeviceInfo_DeviceInfo.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeviceInfo', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'gitjournal'), createEmptyInstance: create)
..oo(0, [1, 2, 3, 4, 5, 6])
..aOM<AndroidDeviceInfo>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'androidDeviceInfo', protoName: 'androidDeviceInfo', subBuilder: AndroidDeviceInfo.create)
..aOM<IosDeviceInfo>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'iosDeviceInfo', protoName: 'iosDeviceInfo', subBuilder: IosDeviceInfo.create)
..aOM<LinuxDeviceInfo>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'linuxDeviceInfo', protoName: 'linuxDeviceInfo', subBuilder: LinuxDeviceInfo.create)
..aOM<MacOSDeviceInfo>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'macOSDeviceInfo', protoName: 'macOSDeviceInfo', subBuilder: MacOSDeviceInfo.create)
..aOM<WindowsDeviceInfo>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'windowsDeviceInfo', protoName: 'windowsDeviceInfo', subBuilder: WindowsDeviceInfo.create)
..aOM<WebBrowserInfo>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'webBrowserInfo', protoName: 'webBrowserInfo', subBuilder: WebBrowserInfo.create)
..oo(0, [11, 12, 13, 14, 15, 16])
..e<Platform>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'platform', $pb.PbFieldType.OE, defaultOrMaker: Platform.android, valueOf: Platform.valueOf, enumValues: Platform.values)
..aOM<AndroidDeviceInfo>(11, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'androidDeviceInfo', protoName: 'androidDeviceInfo', subBuilder: AndroidDeviceInfo.create)
..aOM<IosDeviceInfo>(12, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'iosDeviceInfo', protoName: 'iosDeviceInfo', subBuilder: IosDeviceInfo.create)
..aOM<LinuxDeviceInfo>(13, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'linuxDeviceInfo', protoName: 'linuxDeviceInfo', subBuilder: LinuxDeviceInfo.create)
..aOM<MacOSDeviceInfo>(14, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'macOSDeviceInfo', protoName: 'macOSDeviceInfo', subBuilder: MacOSDeviceInfo.create)
..aOM<WindowsDeviceInfo>(15, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'windowsDeviceInfo', protoName: 'windowsDeviceInfo', subBuilder: WindowsDeviceInfo.create)
..aOM<WebBrowserInfo>(16, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'webBrowserInfo', protoName: 'webBrowserInfo', subBuilder: WebBrowserInfo.create)
..hasRequiredFields = false
;
DeviceInfo._() : super();
factory DeviceInfo({
Platform? platform,
AndroidDeviceInfo? androidDeviceInfo,
IosDeviceInfo? iosDeviceInfo,
LinuxDeviceInfo? linuxDeviceInfo,
@ -397,6 +306,9 @@ class DeviceInfo extends $pb.GeneratedMessage {
WebBrowserInfo? webBrowserInfo,
}) {
final _result = create();
if (platform != null) {
_result.platform = platform;
}
if (androidDeviceInfo != null) {
_result.androidDeviceInfo = androidDeviceInfo;
}
@ -442,70 +354,79 @@ class DeviceInfo extends $pb.GeneratedMessage {
void clearDeviceInfo() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
AndroidDeviceInfo get androidDeviceInfo => $_getN(0);
Platform get platform => $_getN(0);
@$pb.TagNumber(1)
set androidDeviceInfo(AndroidDeviceInfo v) { setField(1, v); }
set platform(Platform v) { setField(1, v); }
@$pb.TagNumber(1)
$core.bool hasAndroidDeviceInfo() => $_has(0);
$core.bool hasPlatform() => $_has(0);
@$pb.TagNumber(1)
void clearAndroidDeviceInfo() => clearField(1);
@$pb.TagNumber(1)
AndroidDeviceInfo ensureAndroidDeviceInfo() => $_ensure(0);
void clearPlatform() => clearField(1);
@$pb.TagNumber(2)
IosDeviceInfo get iosDeviceInfo => $_getN(1);
@$pb.TagNumber(2)
set iosDeviceInfo(IosDeviceInfo v) { setField(2, v); }
@$pb.TagNumber(2)
$core.bool hasIosDeviceInfo() => $_has(1);
@$pb.TagNumber(2)
void clearIosDeviceInfo() => clearField(2);
@$pb.TagNumber(2)
IosDeviceInfo ensureIosDeviceInfo() => $_ensure(1);
@$pb.TagNumber(11)
AndroidDeviceInfo get androidDeviceInfo => $_getN(1);
@$pb.TagNumber(11)
set androidDeviceInfo(AndroidDeviceInfo v) { setField(11, v); }
@$pb.TagNumber(11)
$core.bool hasAndroidDeviceInfo() => $_has(1);
@$pb.TagNumber(11)
void clearAndroidDeviceInfo() => clearField(11);
@$pb.TagNumber(11)
AndroidDeviceInfo ensureAndroidDeviceInfo() => $_ensure(1);
@$pb.TagNumber(3)
LinuxDeviceInfo get linuxDeviceInfo => $_getN(2);
@$pb.TagNumber(3)
set linuxDeviceInfo(LinuxDeviceInfo v) { setField(3, v); }
@$pb.TagNumber(3)
$core.bool hasLinuxDeviceInfo() => $_has(2);
@$pb.TagNumber(3)
void clearLinuxDeviceInfo() => clearField(3);
@$pb.TagNumber(3)
LinuxDeviceInfo ensureLinuxDeviceInfo() => $_ensure(2);
@$pb.TagNumber(12)
IosDeviceInfo get iosDeviceInfo => $_getN(2);
@$pb.TagNumber(12)
set iosDeviceInfo(IosDeviceInfo v) { setField(12, v); }
@$pb.TagNumber(12)
$core.bool hasIosDeviceInfo() => $_has(2);
@$pb.TagNumber(12)
void clearIosDeviceInfo() => clearField(12);
@$pb.TagNumber(12)
IosDeviceInfo ensureIosDeviceInfo() => $_ensure(2);
@$pb.TagNumber(4)
MacOSDeviceInfo get macOSDeviceInfo => $_getN(3);
@$pb.TagNumber(4)
set macOSDeviceInfo(MacOSDeviceInfo v) { setField(4, v); }
@$pb.TagNumber(4)
$core.bool hasMacOSDeviceInfo() => $_has(3);
@$pb.TagNumber(4)
void clearMacOSDeviceInfo() => clearField(4);
@$pb.TagNumber(4)
MacOSDeviceInfo ensureMacOSDeviceInfo() => $_ensure(3);
@$pb.TagNumber(13)
LinuxDeviceInfo get linuxDeviceInfo => $_getN(3);
@$pb.TagNumber(13)
set linuxDeviceInfo(LinuxDeviceInfo v) { setField(13, v); }
@$pb.TagNumber(13)
$core.bool hasLinuxDeviceInfo() => $_has(3);
@$pb.TagNumber(13)
void clearLinuxDeviceInfo() => clearField(13);
@$pb.TagNumber(13)
LinuxDeviceInfo ensureLinuxDeviceInfo() => $_ensure(3);
@$pb.TagNumber(5)
WindowsDeviceInfo get windowsDeviceInfo => $_getN(4);
@$pb.TagNumber(5)
set windowsDeviceInfo(WindowsDeviceInfo v) { setField(5, v); }
@$pb.TagNumber(5)
$core.bool hasWindowsDeviceInfo() => $_has(4);
@$pb.TagNumber(5)
void clearWindowsDeviceInfo() => clearField(5);
@$pb.TagNumber(5)
WindowsDeviceInfo ensureWindowsDeviceInfo() => $_ensure(4);
@$pb.TagNumber(14)
MacOSDeviceInfo get macOSDeviceInfo => $_getN(4);
@$pb.TagNumber(14)
set macOSDeviceInfo(MacOSDeviceInfo v) { setField(14, v); }
@$pb.TagNumber(14)
$core.bool hasMacOSDeviceInfo() => $_has(4);
@$pb.TagNumber(14)
void clearMacOSDeviceInfo() => clearField(14);
@$pb.TagNumber(14)
MacOSDeviceInfo ensureMacOSDeviceInfo() => $_ensure(4);
@$pb.TagNumber(6)
WebBrowserInfo get webBrowserInfo => $_getN(5);
@$pb.TagNumber(6)
set webBrowserInfo(WebBrowserInfo v) { setField(6, v); }
@$pb.TagNumber(6)
$core.bool hasWebBrowserInfo() => $_has(5);
@$pb.TagNumber(6)
void clearWebBrowserInfo() => clearField(6);
@$pb.TagNumber(6)
WebBrowserInfo ensureWebBrowserInfo() => $_ensure(5);
@$pb.TagNumber(15)
WindowsDeviceInfo get windowsDeviceInfo => $_getN(5);
@$pb.TagNumber(15)
set windowsDeviceInfo(WindowsDeviceInfo v) { setField(15, v); }
@$pb.TagNumber(15)
$core.bool hasWindowsDeviceInfo() => $_has(5);
@$pb.TagNumber(15)
void clearWindowsDeviceInfo() => clearField(15);
@$pb.TagNumber(15)
WindowsDeviceInfo ensureWindowsDeviceInfo() => $_ensure(5);
@$pb.TagNumber(16)
WebBrowserInfo get webBrowserInfo => $_getN(6);
@$pb.TagNumber(16)
set webBrowserInfo(WebBrowserInfo v) { setField(16, v); }
@$pb.TagNumber(16)
$core.bool hasWebBrowserInfo() => $_has(6);
@$pb.TagNumber(16)
void clearWebBrowserInfo() => clearField(16);
@$pb.TagNumber(16)
WebBrowserInfo ensureWebBrowserInfo() => $_ensure(6);
}
class PackageInfo extends $pb.GeneratedMessage {

View File

@ -11,6 +11,29 @@ import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class Platform extends $pb.ProtobufEnum {
static const Platform android = Platform._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'android');
static const Platform ios = Platform._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ios');
static const Platform linux = Platform._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'linux');
static const Platform macos = Platform._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'macos');
static const Platform windows = Platform._(4, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'windows');
static const Platform web = Platform._(5, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'web');
static const $core.List<Platform> values = <Platform> [
android,
ios,
linux,
macos,
windows,
web,
];
static final $core.Map<$core.int, Platform> _byValue = $pb.ProtobufEnum.initByValue(values);
static Platform? valueOf($core.int value) => _byValue[value];
const Platform._($core.int v, $core.String n) : super(v, n);
}
class BrowserName extends $pb.ProtobufEnum {
static const BrowserName unknown = BrowserName._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'unknown');
static const BrowserName firefox = BrowserName._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'firefox');

View File

@ -0,0 +1,55 @@
///
// Generated code. Do not modify.
// source: analytics.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:async' as $async;
import 'dart:core' as $core;
import 'package:grpc/service_api.dart' as $grpc;
import 'analytics.pb.dart' as $0;
export 'analytics.pb.dart';
class AnalyticsServiceClient extends $grpc.Client {
static final _$sendData =
$grpc.ClientMethod<$0.AnalyticsMessage, $0.AnalyticsReply>(
'/gitjournal.AnalyticsService/SendData',
($0.AnalyticsMessage value) => value.writeToBuffer(),
($core.List<$core.int> value) => $0.AnalyticsReply.fromBuffer(value));
AnalyticsServiceClient($grpc.ClientChannel channel,
{$grpc.CallOptions? options,
$core.Iterable<$grpc.ClientInterceptor>? interceptors})
: super(channel, options: options, interceptors: interceptors);
$grpc.ResponseFuture<$0.AnalyticsReply> sendData($0.AnalyticsMessage request,
{$grpc.CallOptions? options}) {
return $createUnaryCall(_$sendData, request, options: options);
}
}
abstract class AnalyticsServiceBase extends $grpc.Service {
$core.String get $name => 'gitjournal.AnalyticsService';
AnalyticsServiceBase() {
$addMethod($grpc.ServiceMethod<$0.AnalyticsMessage, $0.AnalyticsReply>(
'SendData',
sendData_Pre,
false,
false,
($core.List<$core.int> value) => $0.AnalyticsMessage.fromBuffer(value),
($0.AnalyticsReply value) => value.writeToBuffer()));
}
$async.Future<$0.AnalyticsReply> sendData_Pre($grpc.ServiceCall call,
$async.Future<$0.AnalyticsMessage> request) async {
return sendData(call, await request);
}
$async.Future<$0.AnalyticsReply> sendData(
$grpc.ServiceCall call, $0.AnalyticsMessage request);
}

View File

@ -9,6 +9,21 @@ import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use platformDescriptor instead')
const Platform$json = const {
'1': 'Platform',
'2': const [
const {'1': 'android', '2': 0},
const {'1': 'ios', '2': 1},
const {'1': 'linux', '2': 2},
const {'1': 'macos', '2': 3},
const {'1': 'windows', '2': 4},
const {'1': 'web', '2': 5},
],
};
/// Descriptor for `Platform`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List platformDescriptor = $convert.base64Decode('CghQbGF0Zm9ybRILCgdhbmRyb2lkEAASBwoDaW9zEAESCQoFbGludXgQAhIJCgVtYWNvcxADEgsKB3dpbmRvd3MQBBIHCgN3ZWIQBQ==');
@$core.Deprecated('Use browserNameDescriptor instead')
const BrowserName$json = const {
'1': 'BrowserName',
@ -26,6 +41,13 @@ const BrowserName$json = const {
/// Descriptor for `BrowserName`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List browserNameDescriptor = $convert.base64Decode('CgtCcm93c2VyTmFtZRILCgd1bmtub3duEAASCwoHZmlyZWZveBABEhMKD3NhbXN1bmdJbnRlcm5ldBACEgkKBW9wZXJhEAMSCAoEbXNpZRAEEggKBGVkZ2UQBRIKCgZjaHJvbWUQBhIKCgZzYWZhcmkQBw==');
@$core.Deprecated('Use analyticsReplyDescriptor instead')
const AnalyticsReply$json = const {
'1': 'AnalyticsReply',
};
/// Descriptor for `AnalyticsReply`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List analyticsReplyDescriptor = $convert.base64Decode('Cg5BbmFseXRpY3NSZXBseQ==');
@$core.Deprecated('Use analyticsMessageDescriptor instead')
const AnalyticsMessage$json = const {
'1': 'AnalyticsMessage',
@ -39,22 +61,6 @@ const AnalyticsMessage$json = const {
/// Descriptor for `AnalyticsMessage`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List analyticsMessageDescriptor = $convert.base64Decode('ChBBbmFseXRpY3NNZXNzYWdlEhQKBWFwcElkGAEgASgJUgVhcHBJZBIpCgZldmVudHMYAiADKAsyES5naXRqb3VybmFsLkV2ZW50UgZldmVudHMSNgoKZGV2aWNlSW5mbxgDIAEoCzIWLmdpdGpvdXJuYWwuRGV2aWNlSW5mb1IKZGV2aWNlSW5mbxI5CgtwYWNrYWdlSW5mbxgEIAEoCzIXLmdpdGpvdXJuYWwuUGFja2FnZUluZm9SC3BhY2thZ2VJbmZv');
@$core.Deprecated('Use anyDescriptor instead')
const Any$json = const {
'1': 'Any',
'2': const [
const {'1': 'stringValue', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'stringValue'},
const {'1': 'intValue', '3': 2, '4': 1, '5': 3, '9': 0, '10': 'intValue'},
const {'1': 'doubleValue', '3': 3, '4': 1, '5': 1, '9': 0, '10': 'doubleValue'},
const {'1': 'boolValue', '3': 4, '4': 1, '5': 8, '9': 0, '10': 'boolValue'},
],
'8': const [
const {'1': 'value'},
],
};
/// Descriptor for `Any`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List anyDescriptor = $convert.base64Decode('CgNBbnkSIgoLc3RyaW5nVmFsdWUYASABKAlIAFILc3RyaW5nVmFsdWUSHAoIaW50VmFsdWUYAiABKANIAFIIaW50VmFsdWUSIgoLZG91YmxlVmFsdWUYAyABKAFIAFILZG91YmxlVmFsdWUSHgoJYm9vbFZhbHVlGAQgASgISABSCWJvb2xWYWx1ZUIHCgV2YWx1ZQ==');
@$core.Deprecated('Use eventDescriptor instead')
const Event$json = const {
'1': 'Event',
@ -66,8 +72,7 @@ const Event$json = const {
const {'1': 'psuedoId', '3': 5, '4': 1, '5': 9, '10': 'psuedoId'},
const {'1': 'userProperties', '3': 6, '4': 3, '5': 11, '6': '.gitjournal.Event.UserPropertiesEntry', '10': 'userProperties'},
const {'1': 'sessionID', '3': 7, '4': 1, '5': 9, '10': 'sessionID'},
const {'1': 'platform', '3': 8, '4': 1, '5': 9, '10': 'platform'},
const {'1': 'userFirstTouchTimestamp', '3': 9, '4': 1, '5': 3, '10': 'userFirstTouchTimestamp'},
const {'1': 'userFirstTouchTimestamp', '3': 8, '4': 1, '5': 3, '10': 'userFirstTouchTimestamp'},
],
'3': const [Event_ParamsEntry$json, Event_UserPropertiesEntry$json],
};
@ -77,7 +82,7 @@ const Event_ParamsEntry$json = const {
'1': 'ParamsEntry',
'2': const [
const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 11, '6': '.gitjournal.Any', '10': 'value'},
const {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'},
],
'7': const {'7': true},
};
@ -87,23 +92,24 @@ const Event_UserPropertiesEntry$json = const {
'1': 'UserPropertiesEntry',
'2': const [
const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
const {'1': 'value', '3': 2, '4': 1, '5': 11, '6': '.gitjournal.Any', '10': 'value'},
const {'1': 'value', '3': 2, '4': 1, '5': 9, '10': 'value'},
],
'7': const {'7': true},
};
/// Descriptor for `Event`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List eventDescriptor = $convert.base64Decode('CgVFdmVudBISCgRuYW1lGAEgASgJUgRuYW1lEhIKBGRhdGUYAiABKANSBGRhdGUSNQoGcGFyYW1zGAMgAygLMh0uZ2l0am91cm5hbC5FdmVudC5QYXJhbXNFbnRyeVIGcGFyYW1zEhYKBnVzZXJJZBgEIAEoCVIGdXNlcklkEhoKCHBzdWVkb0lkGAUgASgJUghwc3VlZG9JZBJNCg51c2VyUHJvcGVydGllcxgGIAMoCzIlLmdpdGpvdXJuYWwuRXZlbnQuVXNlclByb3BlcnRpZXNFbnRyeVIOdXNlclByb3BlcnRpZXMSHAoJc2Vzc2lvbklEGAcgASgJUglzZXNzaW9uSUQSGgoIcGxhdGZvcm0YCCABKAlSCHBsYXRmb3JtEjgKF3VzZXJGaXJzdFRvdWNoVGltZXN0YW1wGAkgASgDUhd1c2VyRmlyc3RUb3VjaFRpbWVzdGFtcBpKCgtQYXJhbXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIlCgV2YWx1ZRgCIAEoCzIPLmdpdGpvdXJuYWwuQW55UgV2YWx1ZToCOAEaUgoTVXNlclByb3BlcnRpZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIlCgV2YWx1ZRgCIAEoCzIPLmdpdGpvdXJuYWwuQW55UgV2YWx1ZToCOAE=');
final $typed_data.Uint8List eventDescriptor = $convert.base64Decode('CgVFdmVudBISCgRuYW1lGAEgASgJUgRuYW1lEhIKBGRhdGUYAiABKANSBGRhdGUSNQoGcGFyYW1zGAMgAygLMh0uZ2l0am91cm5hbC5FdmVudC5QYXJhbXNFbnRyeVIGcGFyYW1zEhYKBnVzZXJJZBgEIAEoCVIGdXNlcklkEhoKCHBzdWVkb0lkGAUgASgJUghwc3VlZG9JZBJNCg51c2VyUHJvcGVydGllcxgGIAMoCzIlLmdpdGpvdXJuYWwuRXZlbnQuVXNlclByb3BlcnRpZXNFbnRyeVIOdXNlclByb3BlcnRpZXMSHAoJc2Vzc2lvbklEGAcgASgJUglzZXNzaW9uSUQSOAoXdXNlckZpcnN0VG91Y2hUaW1lc3RhbXAYCCABKANSF3VzZXJGaXJzdFRvdWNoVGltZXN0YW1wGjkKC1BhcmFtc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaQQoTVXNlclByb3BlcnRpZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoCVIFdmFsdWU6AjgB');
@$core.Deprecated('Use deviceInfoDescriptor instead')
const DeviceInfo$json = const {
'1': 'DeviceInfo',
'2': const [
const {'1': 'androidDeviceInfo', '3': 1, '4': 1, '5': 11, '6': '.gitjournal.AndroidDeviceInfo', '9': 0, '10': 'androidDeviceInfo'},
const {'1': 'iosDeviceInfo', '3': 2, '4': 1, '5': 11, '6': '.gitjournal.IosDeviceInfo', '9': 0, '10': 'iosDeviceInfo'},
const {'1': 'linuxDeviceInfo', '3': 3, '4': 1, '5': 11, '6': '.gitjournal.LinuxDeviceInfo', '9': 0, '10': 'linuxDeviceInfo'},
const {'1': 'macOSDeviceInfo', '3': 4, '4': 1, '5': 11, '6': '.gitjournal.MacOSDeviceInfo', '9': 0, '10': 'macOSDeviceInfo'},
const {'1': 'windowsDeviceInfo', '3': 5, '4': 1, '5': 11, '6': '.gitjournal.WindowsDeviceInfo', '9': 0, '10': 'windowsDeviceInfo'},
const {'1': 'webBrowserInfo', '3': 6, '4': 1, '5': 11, '6': '.gitjournal.WebBrowserInfo', '9': 0, '10': 'webBrowserInfo'},
const {'1': 'platform', '3': 1, '4': 1, '5': 14, '6': '.gitjournal.Platform', '10': 'platform'},
const {'1': 'androidDeviceInfo', '3': 11, '4': 1, '5': 11, '6': '.gitjournal.AndroidDeviceInfo', '9': 0, '10': 'androidDeviceInfo'},
const {'1': 'iosDeviceInfo', '3': 12, '4': 1, '5': 11, '6': '.gitjournal.IosDeviceInfo', '9': 0, '10': 'iosDeviceInfo'},
const {'1': 'linuxDeviceInfo', '3': 13, '4': 1, '5': 11, '6': '.gitjournal.LinuxDeviceInfo', '9': 0, '10': 'linuxDeviceInfo'},
const {'1': 'macOSDeviceInfo', '3': 14, '4': 1, '5': 11, '6': '.gitjournal.MacOSDeviceInfo', '9': 0, '10': 'macOSDeviceInfo'},
const {'1': 'windowsDeviceInfo', '3': 15, '4': 1, '5': 11, '6': '.gitjournal.WindowsDeviceInfo', '9': 0, '10': 'windowsDeviceInfo'},
const {'1': 'webBrowserInfo', '3': 16, '4': 1, '5': 11, '6': '.gitjournal.WebBrowserInfo', '9': 0, '10': 'webBrowserInfo'},
],
'8': const [
const {'1': 'deviceInfo'},
@ -111,7 +117,7 @@ const DeviceInfo$json = const {
};
/// Descriptor for `DeviceInfo`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List deviceInfoDescriptor = $convert.base64Decode('CgpEZXZpY2VJbmZvEk0KEWFuZHJvaWREZXZpY2VJbmZvGAEgASgLMh0uZ2l0am91cm5hbC5BbmRyb2lkRGV2aWNlSW5mb0gAUhFhbmRyb2lkRGV2aWNlSW5mbxJBCg1pb3NEZXZpY2VJbmZvGAIgASgLMhkuZ2l0am91cm5hbC5Jb3NEZXZpY2VJbmZvSABSDWlvc0RldmljZUluZm8SRwoPbGludXhEZXZpY2VJbmZvGAMgASgLMhsuZ2l0am91cm5hbC5MaW51eERldmljZUluZm9IAFIPbGludXhEZXZpY2VJbmZvEkcKD21hY09TRGV2aWNlSW5mbxgEIAEoCzIbLmdpdGpvdXJuYWwuTWFjT1NEZXZpY2VJbmZvSABSD21hY09TRGV2aWNlSW5mbxJNChF3aW5kb3dzRGV2aWNlSW5mbxgFIAEoCzIdLmdpdGpvdXJuYWwuV2luZG93c0RldmljZUluZm9IAFIRd2luZG93c0RldmljZUluZm8SRAoOd2ViQnJvd3NlckluZm8YBiABKAsyGi5naXRqb3VybmFsLldlYkJyb3dzZXJJbmZvSABSDndlYkJyb3dzZXJJbmZvQgwKCmRldmljZUluZm8=');
final $typed_data.Uint8List deviceInfoDescriptor = $convert.base64Decode('CgpEZXZpY2VJbmZvEjAKCHBsYXRmb3JtGAEgASgOMhQuZ2l0am91cm5hbC5QbGF0Zm9ybVIIcGxhdGZvcm0STQoRYW5kcm9pZERldmljZUluZm8YCyABKAsyHS5naXRqb3VybmFsLkFuZHJvaWREZXZpY2VJbmZvSABSEWFuZHJvaWREZXZpY2VJbmZvEkEKDWlvc0RldmljZUluZm8YDCABKAsyGS5naXRqb3VybmFsLklvc0RldmljZUluZm9IAFINaW9zRGV2aWNlSW5mbxJHCg9saW51eERldmljZUluZm8YDSABKAsyGy5naXRqb3VybmFsLkxpbnV4RGV2aWNlSW5mb0gAUg9saW51eERldmljZUluZm8SRwoPbWFjT1NEZXZpY2VJbmZvGA4gASgLMhsuZ2l0am91cm5hbC5NYWNPU0RldmljZUluZm9IAFIPbWFjT1NEZXZpY2VJbmZvEk0KEXdpbmRvd3NEZXZpY2VJbmZvGA8gASgLMh0uZ2l0am91cm5hbC5XaW5kb3dzRGV2aWNlSW5mb0gAUhF3aW5kb3dzRGV2aWNlSW5mbxJECg53ZWJCcm93c2VySW5mbxgQIAEoCzIaLmdpdGpvdXJuYWwuV2ViQnJvd3NlckluZm9IAFIOd2ViQnJvd3NlckluZm9CDAoKZGV2aWNlSW5mbw==');
@$core.Deprecated('Use packageInfoDescriptor instead')
const PackageInfo$json = const {
'1': 'PackageInfo',