Add setting to opt out of crash reporting

This commit is contained in:
vishnukvmd 2023-08-11 16:57:00 +05:30
parent 924f446532
commit 7761b32ab2
5 changed files with 56 additions and 3 deletions

View file

@ -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;

View file

@ -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(

View file

@ -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> {

View file

@ -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"
} }

View file

@ -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(),
);
},
),
) )
], ],
), ),