Przeglądaj źródła

Add setting to opt out of crash reporting

vishnukvmd 1 rok temu
rodzic
commit
7761b32ab2

+ 22 - 1
lib/core/error-reporting/super_logging.dart

@@ -16,6 +16,7 @@ import 'package:path_provider/path_provider.dart';
 import 'package:photos/core/error-reporting/tunneled_transport.dart';
 import 'package:photos/core/error-reporting/tunneled_transport.dart';
 import 'package:photos/models/typedefs.dart';
 import 'package:photos/models/typedefs.dart';
 import 'package:sentry_flutter/sentry_flutter.dart';
 import 'package:sentry_flutter/sentry_flutter.dart';
+import 'package:shared_preferences/shared_preferences.dart';
 
 
 extension SuperString on String {
 extension SuperString on String {
   Iterable<String> chunked(int chunkSize) sync* {
   Iterable<String> chunked(int chunkSize) sync* {
@@ -141,11 +142,16 @@ class SuperLogging {
   /// The current super logging configuration
   /// The current super logging configuration
   static late LogConfig config;
   static late LogConfig config;
 
 
+  static late SharedPreferences _preferences;
+
+  static const keyShouldReportCrashes = "should_report_crashes";
+
   static Future<void> main([LogConfig? appConfig]) async {
   static Future<void> main([LogConfig? appConfig]) async {
     appConfig ??= LogConfig();
     appConfig ??= LogConfig();
     SuperLogging.config = appConfig;
     SuperLogging.config = appConfig;
 
 
     WidgetsFlutterBinding.ensureInitialized();
     WidgetsFlutterBinding.ensureInitialized();
+    _preferences = await SharedPreferences.getInstance();
 
 
     appVersion ??= await getAppVersion();
     appVersion ??= await getAppVersion();
     final isFDroidClient = await isFDroidBuild();
     final isFDroidClient = await isFDroidBuild();
@@ -155,7 +161,10 @@ class SuperLogging {
     }
     }
 
 
     final enable = appConfig.enableInDebugMode || kReleaseMode;
     final enable = appConfig.enableInDebugMode || kReleaseMode;
-    sentryIsEnabled = enable && appConfig.sentryDsn != null && !isFDroidClient;
+    sentryIsEnabled = enable &&
+        appConfig.sentryDsn != null &&
+        !isFDroidClient &&
+        shouldReportCrashes();
     fileIsEnabled = enable && appConfig.logDirPath != null;
     fileIsEnabled = enable && appConfig.logDirPath != null;
 
 
     if (fileIsEnabled) {
     if (fileIsEnabled) {
@@ -307,6 +316,18 @@ class SuperLogging {
     sentryQueueControl.add(error);
     sentryQueueControl.add(error);
   }
   }
 
 
+  static bool shouldReportCrashes() {
+    if (_preferences.containsKey(keyShouldReportCrashes)) {
+      return _preferences.getBool(keyShouldReportCrashes)!;
+    } else {
+      return true; // Report crashes by default
+    }
+  }
+
+  static Future<void> setShouldReportCrashes(bool value) {
+    return _preferences.setBool(keyShouldReportCrashes, value);
+  }
+
   /// The log file currently in use.
   /// The log file currently in use.
   static File? logFile;
   static File? logFile;
 
 

+ 2 - 0
lib/generated/intl/messages_en.dart

@@ -445,6 +445,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage(
         "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage(
             "Could not update subscription"),
             "Could not update subscription"),
         "count": MessageLookupByLibrary.simpleMessage("Count"),
         "count": MessageLookupByLibrary.simpleMessage("Count"),
+        "crashReporting":
+            MessageLookupByLibrary.simpleMessage("Crash reporting"),
         "create": MessageLookupByLibrary.simpleMessage("Create"),
         "create": MessageLookupByLibrary.simpleMessage("Create"),
         "createAccount": MessageLookupByLibrary.simpleMessage("Create account"),
         "createAccount": MessageLookupByLibrary.simpleMessage("Create account"),
         "createAlbumActionHint": MessageLookupByLibrary.simpleMessage(
         "createAlbumActionHint": MessageLookupByLibrary.simpleMessage(

+ 10 - 1
lib/generated/l10n.dart

@@ -1,7 +1,6 @@
 // GENERATED CODE - DO NOT MODIFY BY HAND
 // GENERATED CODE - DO NOT MODIFY BY HAND
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:intl/intl.dart';
 import 'package:intl/intl.dart';
-
 import 'intl/messages_all.dart';
 import 'intl/messages_all.dart';
 
 
 // **************************************************************************
 // **************************************************************************
@@ -7585,6 +7584,16 @@ class S {
       args: [],
       args: [],
     );
     );
   }
   }
+
+  /// `Crash reporting`
+  String get crashReporting {
+    return Intl.message(
+      'Crash reporting',
+      name: 'crashReporting',
+      desc: '',
+      args: [],
+    );
+  }
 }
 }
 
 
 class AppLocalizationDelegate extends LocalizationsDelegate<S> {
 class AppLocalizationDelegate extends LocalizationsDelegate<S> {

+ 2 - 1
lib/l10n/intl_en.arb

@@ -1094,5 +1094,6 @@
   "sharedWithYou": "Shared with you",
   "sharedWithYou": "Shared with you",
   "sharedByYou": "Shared by you",
   "sharedByYou": "Shared by you",
   "inviteYourFriendsToEnte": "Invite your friends to ente",
   "inviteYourFriendsToEnte": "Invite your friends to ente",
-  "failedToDownloadVideo": "Failed to download video"
+  "failedToDownloadVideo": "Failed to download video",
+  "crashReporting": "Crash reporting"
 }
 }

+ 20 - 0
lib/ui/settings/advanced_settings_screen.dart

@@ -1,4 +1,5 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
+import "package:photos/core/error-reporting/super_logging.dart";
 import "package:photos/generated/l10n.dart";
 import "package:photos/generated/l10n.dart";
 import "package:photos/services/user_remote_flag_service.dart";
 import "package:photos/services/user_remote_flag_service.dart";
 import 'package:photos/theme/ente_theme.dart';
 import 'package:photos/theme/ente_theme.dart';
@@ -137,6 +138,25 @@ class _AdvancedSettingsScreenState extends State<AdvancedSettingsScreen> {
                                   );
                                   );
                                 },
                                 },
                               ),
                               ),
+                            ),
+                            const SizedBox(
+                              height: 24,
+                            ),
+                            MenuItemWidget(
+                              captionedTextWidget: CaptionedTextWidget(
+                                title: S.of(context).crashReporting,
+                              ),
+                              menuItemColor: colorScheme.fillFaint,
+                              singleBorderRadius: 8,
+                              alignCaptionedTextToLeft: true,
+                              trailingWidget: ToggleSwitchWidget(
+                                value: () => SuperLogging.shouldReportCrashes(),
+                                onChanged: () async {
+                                  await SuperLogging.setShouldReportCrashes(
+                                    !SuperLogging.shouldReportCrashes(),
+                                  );
+                                },
+                              ),
                             )
                             )
                           ],
                           ],
                         ),
                         ),