diff --git a/assets/i18n/en.json b/assets/i18n/en.json index 2a3448420..f0e4ef15f 100644 --- a/assets/i18n/en.json +++ b/assets/i18n/en.json @@ -3714,7 +3714,7 @@ "abilities": [ { "name": "Normal Attack", - "description": " Performs up to 6 consecutive spear strikes.", + "description": "Performs up to 6 consecutive spear strikes.", "descriptions": [] }, { diff --git a/lib/bloc/artifact_details/artifact_details_bloc.dart b/lib/bloc/artifact_details/artifact_details_bloc.dart index 00e97adc4..bb8274740 100644 --- a/lib/bloc/artifact_details/artifact_details_bloc.dart +++ b/lib/bloc/artifact_details/artifact_details_bloc.dart @@ -6,6 +6,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import '../../common/app_constants.dart'; import '../../common/assets.dart'; import '../../services/genshing_service.dart'; +import '../../telemetry.dart'; part 'artifact_details_bloc.freezed.dart'; part 'artifact_details_event.dart'; @@ -22,8 +23,9 @@ class ArtifactDetailsBloc extends Bloc { ) async* { yield const CharacterState.loading(); - final s = event.when( - loadFromName: (name) { + final s = await event.when( + loadFromName: (name) async { + await trackCharacterLoaded(name); final char = _genshinService.getCharacter(name); final translation = _genshinService.getCharacterTranslation(name); return _buildInitialState(char, translation); }, - loadFromImg: (img) { + loadFromImg: (img) async { + await trackCharacterLoaded(img, loadedFromName: false); final char = _genshinService.getCharacterByImg(img); final translation = _genshinService.getCharacterTranslation(char.name); return _buildInitialState(char, translation); diff --git a/lib/bloc/materials/materials_bloc.dart b/lib/bloc/materials/materials_bloc.dart index d747b256c..edc0de588 100644 --- a/lib/bloc/materials/materials_bloc.dart +++ b/lib/bloc/materials/materials_bloc.dart @@ -5,6 +5,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import '../../models/models.dart'; import '../../services/genshing_service.dart'; +import '../../telemetry.dart'; part 'materials_bloc.freezed.dart'; part 'materials_event.dart'; @@ -18,6 +19,7 @@ class MaterialsBloc extends Bloc { Stream mapEventToState( MaterialsEvent event, ) async* { + await trackAscentionMaterialsOpened(); final s = event.when( init: () { final days = [ diff --git a/lib/bloc/url_page/url_page_bloc.dart b/lib/bloc/url_page/url_page_bloc.dart index d39993e0a..801c8809a 100644 --- a/lib/bloc/url_page/url_page_bloc.dart +++ b/lib/bloc/url_page/url_page_bloc.dart @@ -4,6 +4,7 @@ import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../../services/network_service.dart'; +import '../../telemetry.dart'; part 'url_page_bloc.freezed.dart'; part 'url_page_event.dart'; @@ -20,9 +21,10 @@ class UrlPageBloc extends Bloc { Stream mapEventToState( UrlPageEvent event, ) async* { - final s = await event.when( - init: () async { + final s = await event.map( + init: (e) async { final isInternetAvailable = await _networkService.isInternetAvailable(); + await trackUrlOpened(e.loadMap, e.loadWishSimulator, isInternetAvailable); return UrlPageState.loaded( hasInternetConnection: isInternetAvailable, mapUrl: mapUrl, diff --git a/lib/bloc/url_page/url_page_event.dart b/lib/bloc/url_page/url_page_event.dart index 3ffe46dd1..48be1f6fb 100644 --- a/lib/bloc/url_page/url_page_event.dart +++ b/lib/bloc/url_page/url_page_event.dart @@ -2,5 +2,8 @@ part of 'url_page_bloc.dart'; @freezed abstract class UrlPageEvent with _$UrlPageEvent { - const factory UrlPageEvent.init() = _Init; + const factory UrlPageEvent.init({ + @required bool loadMap, + @required bool loadWishSimulator, + }) = _Init; } diff --git a/lib/bloc/weapon/weapon_bloc.dart b/lib/bloc/weapon/weapon_bloc.dart index c8790d724..870708990 100644 --- a/lib/bloc/weapon/weapon_bloc.dart +++ b/lib/bloc/weapon/weapon_bloc.dart @@ -8,6 +8,7 @@ import '../../common/enums/stat_type.dart'; import '../../common/enums/weapon_type.dart'; import '../../models/models.dart'; import '../../services/genshing_service.dart'; +import '../../telemetry.dart'; part 'weapon_bloc.freezed.dart'; part 'weapon_event.dart'; @@ -22,13 +23,15 @@ class WeaponBloc extends Bloc { WeaponEvent event, ) async* { yield const WeaponState.loading(); - final s = event.when( - loadFromImg: (img) { + final s = await event.when( + loadFromImg: (img) async { + await trackWeaponLoaded(img, loadedFromName: false); final weapon = _genshinService.getWeaponByImg(img); final translation = _genshinService.getWeaponTranslation(weapon.name); return _buildInitialState(weapon, translation); }, - loadFromName: (name) { + loadFromName: (name) async { + await trackWeaponLoaded(name); final weapon = _genshinService.getWeapon(name); final translation = _genshinService.getWeaponTranslation(name); return _buildInitialState(weapon, translation); diff --git a/lib/main.dart b/lib/main.dart index e5bda0b26..b2b88528c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,7 +15,6 @@ import 'ui/pages/main_tab_page.dart'; import 'ui/pages/splash_page.dart'; Future main() async { - WidgetsFlutterBinding.ensureInitialized(); await initTelemetry(); initInjection(); runApp(MyApp()); diff --git a/lib/services/logging_service.dart b/lib/services/logging_service.dart index 7b4a2de21..b0f000d8f 100644 --- a/lib/services/logging_service.dart +++ b/lib/services/logging_service.dart @@ -4,6 +4,7 @@ import 'package:log_4_dart_2/log_4_dart_2.dart'; import 'package:sprintf/sprintf.dart'; import '../common/extensions/string_extensions.dart'; +import '../telemetry.dart'; abstract class LoggingService { void info(Type type, String msg, [List args]); @@ -68,6 +69,7 @@ class LoggingServiceImpl implements LoggingService { 'msg': _formatEx(msg, ex), 'trace': trace?.toString() ?? 'No trace available', }; + trackEventAsync('Error - ${DateTime.now()}', map); } void _trackWarning(String tag, String msg, [dynamic ex, StackTrace trace]) { @@ -76,5 +78,6 @@ class LoggingServiceImpl implements LoggingService { 'msg': _formatEx(msg, ex), 'trace': trace?.toString() ?? 'No trace available', }; + trackEventAsync('Warning - ${DateTime.now()}', map); } } diff --git a/lib/telemetry.dart b/lib/telemetry.dart index c002f5329..918b02a33 100644 --- a/lib/telemetry.dart +++ b/lib/telemetry.dart @@ -1,7 +1,56 @@ -import 'package:flutter_appcenter/flutter_appcenter.dart'; - +import 'flutter_appcenter_bundle.dart'; import 'secrets.dart'; +//Only call this function from the main.dart Future initTelemetry() async { - await FlutterAppCenter.init(appSecretAndroid: Secrets.appCenterKey, tokenAndroid: 'N/A'); + await AppCenter.startAsync(appSecretAndroid: Secrets.appCenterKey, appSecretIOS: ''); +} + +Future trackEventAsync(String name, [Map properties]) { + return AppCenter.trackEventAsync(name, properties); +} + +Future trackCharacterLoaded( + String value, { + bool loadedFromName = true, +}) async { + if (loadedFromName) { + await trackEventAsync('Character-FromName', {'Name': value}); + } else { + await trackEventAsync('Character-FromImg', {'Image': value}); + } +} + +Future trackWeaponLoaded( + String value, { + bool loadedFromName = true, +}) async { + if (loadedFromName) { + await trackEventAsync('Weapon-FromName', {'Name': value}); + } else { + await trackEventAsync('Weapon-FromImg', {'Image': value}); + } +} + +Future trackArtifactLoaded( + String value, { + bool loadedFromName = true, +}) async { + if (loadedFromName) { + await trackEventAsync('Artifact-FromName', {'Name': value}); + } else { + await trackEventAsync('Artifact-FromImg', {'Image': value}); + } +} + +Future trackAscentionMaterialsOpened() async { + await trackEventAsync('AscentionMaterials-Opened'); +} + +Future trackUrlOpened(bool loadMap, bool loadWishSimulator, bool networkAvailable) async { + await trackEventAsync('Url-Opened', { + 'Map': loadMap.toString(), + 'WishSimulator': loadWishSimulator.toString(), + 'NetworkAvailable': networkAvailable.toString(), + }); } diff --git a/lib/ui/pages/map_page.dart b/lib/ui/pages/map_page.dart index 363dc9bcc..689c40ba9 100644 --- a/lib/ui/pages/map_page.dart +++ b/lib/ui/pages/map_page.dart @@ -63,7 +63,7 @@ class _MapPageState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - context.read().add(const UrlPageEvent.init()); + context.read().add(const UrlPageEvent.init(loadMap: true, loadWishSimulator: false)); } @override diff --git a/lib/ui/pages/wish_simulator_page.dart b/lib/ui/pages/wish_simulator_page.dart index 65bb03b8e..1f30797f3 100644 --- a/lib/ui/pages/wish_simulator_page.dart +++ b/lib/ui/pages/wish_simulator_page.dart @@ -18,7 +18,7 @@ class _WishSimulatorPageState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - context.read().add(const UrlPageEvent.init()); + context.read().add(const UrlPageEvent.init(loadMap: false, loadWishSimulator: true)); } @override diff --git a/pubspec.lock b/pubspec.lock index 7e55bf710..282f47268 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -22,13 +22,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.0" - android_metadata: - dependency: transitive - description: - name: android_metadata - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.2" ansicolor: dependency: transitive description: @@ -218,13 +211,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.4" - dio: - dependency: transitive - description: - name: dio - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.10" dog: dependency: "direct main" description: @@ -265,13 +251,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_appcenter: - dependency: "direct main" - description: - name: flutter_appcenter - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.11" flutter_bloc: dependency: "direct main" description: @@ -392,13 +371,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.19" - install_plugin: - dependency: transitive - description: - name: install_plugin - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.1" intl: dependency: transitive description: @@ -525,13 +497,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0" - open_appstore: - dependency: transitive - description: - name: open_appstore - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.2" package_config: dependency: transitive description: @@ -595,20 +560,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.9.2" - permission_handler: - dependency: transitive - description: - name: permission_handler - url: "https://pub.dartlang.org" - source: hosted - version: "5.0.1+1" - permission_handler_platform_interface: - dependency: transitive - description: - name: permission_handler_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.1" petitparser: dependency: transitive description: @@ -651,13 +602,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.13" - progress_dialog: - dependency: transitive - description: - name: progress_dialog - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.4" provider: dependency: transitive description: @@ -888,7 +832,7 @@ packages: source: hosted version: "1.3.0-nullsafety.3" url_launcher: - dependency: transitive + dependency: "direct main" description: name: url_launcher url: "https://pub.dartlang.org" diff --git a/pubspec.yaml b/pubspec.yaml index 1e878fad5..7bed0e578 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.3+8 +version: 1.0.4+9 environment: sdk: ">=2.10.4 <3.0.0" @@ -24,7 +24,6 @@ dependencies: cupertino_icons: ^1.0.0 data_connection_checker: ^0.3.4 dog: ^1.3.1 - flutter_appcenter: ^1.0.11 flutter: sdk: flutter flutter_bloc: ^6.1.0 @@ -48,6 +47,7 @@ dependencies: sprintf: ^5.0.0 sqlite3_flutter_libs: ^0.2.0 transparent_image: 1.0.0 + url_launcher: 5.7.10 dev_dependencies: build_runner: ^1.10.6