feat: make firebase crashlytics optional.

This commit is contained in:
Aunali321 2022-10-15 18:29:50 +05:30
parent 79aca0e579
commit f31a60d9bb
5 changed files with 58 additions and 7 deletions

View file

@ -106,7 +106,7 @@
"teamSectionTitle": "Team",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Advanced",
"privacySectionTitle": "Privacy",
"logsSectionTitle": "Logs",
"darkThemeLabel": "Dark Mode",
"darkThemeHint": "Welcome to the Dark Side",
"dynamicThemeLabel": "Material You",
@ -134,6 +134,8 @@
"snackbarMessage": "Copied to clipboard",
"sentryLabel": "Sentry Logging",
"sentryHint": "Send anonymous logs to help us improve ReVanced Manager",
"firebaseCrashlyticsLabel": "Firebase Crashlytics",
"firebaseCrashlyticsHint": "Send anonymous crash reports to help us improve ReVanced Manager",
"restartAppForChanges": "Restart the app to apply changes"
},
"appInfoView": {

View file

@ -23,12 +23,24 @@ Future main() async {
await locator<ManagerAPI>().initialize();
String apiUrl = locator<ManagerAPI>().getApiUrl();
await locator<RevancedAPI>().initialize(apiUrl);
// Remove this line if you are building from source and don't have firebase
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
bool isSentryEnabled = locator<ManagerAPI>().isSentryEnabled();
bool isCrashlyticsEnabled = locator<ManagerAPI>().isCrashlyticsEnabled();
// Remove this line if you are building from source and don't have firebase config
if (isCrashlyticsEnabled) {
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
Firebase.app().setAutomaticDataCollectionEnabled(true);
}
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
Firebase.app().setAutomaticDataCollectionEnabled(false);
locator<GithubAPI>().initialize();
await locator<PatcherAPI>().initialize();
tz.initializeTimeZones();
// Remove this line if you are building from source and don't have sentry configured
await SentryFlutter.init(
(options) {
options
@ -52,9 +64,9 @@ Future main() async {
},
appRunner: () {
// Pass all uncaught errors from the framework to Crashlytics.
FlutterError.onError =
FirebaseCrashlytics.instance.recordFlutterFatalError;
if (isCrashlyticsEnabled) {
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
}
runApp(const MyApp());
},
);

View file

@ -91,6 +91,15 @@ class ManagerAPI {
print('Sentry status: $value');
}
bool isCrashlyticsEnabled() {
return _prefs.getBool('crashlyticsEnabled') ?? true;
}
Future<void> setCrashlyticsStatus(bool value) async {
await _prefs.setBool('crashlyticsEnabled', value);
print('Crashlytics status: $value');
}
List<PatchedApplication> getPatchedApps() {
List<String> apps = _prefs.getStringList('patchedApps') ?? [];
return apps.map((a) => PatchedApplication.fromJson(jsonDecode(a))).toList();

View file

@ -140,7 +140,7 @@ class SettingsView extends StatelessWidget {
),
_settingsDivider,
SettingsSection(
title: 'settingsView.privacySectionTitle',
title: 'settingsView.logsSectionTitle',
children: <Widget>[
CustomSwitchTile(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
@ -158,6 +158,24 @@ class SettingsView extends StatelessWidget {
value: model.isSentryEnabled(),
onTap: (value) => model.useSentry(value),
),
const SizedBox(height: 20.0),
CustomSwitchTile(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
title: I18nText(
'settingsView.firebaseCrashlyticsLabel',
child: const Text(
'',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w500,
),
),
),
subtitle:
I18nText('settingsView.firebaseCrashlyticsHint'),
value: model.isCrashlyticsEnabled(),
onTap: (value) => model.useCrashlytics(value),
),
],
),
_settingsDivider,

View file

@ -327,6 +327,16 @@ class SettingsViewModel extends BaseViewModel {
notifyListeners();
}
bool isCrashlyticsEnabled() {
return _managerAPI.isCrashlyticsEnabled();
}
void useCrashlytics(bool value) {
_managerAPI.setCrashlyticsStatus(value);
_toast.showBottom('settingsView.restartAppForChanges');
notifyListeners();
}
Future<int> getSdkVersion() async {
AndroidDeviceInfo info = await DeviceInfoPlugin().androidInfo;
return info.version.sdkInt ?? -1;