diff --git a/lib/controls/timeline/flattened_tree_entry_control.dart b/lib/controls/timeline/flattened_tree_entry_control.dart index 0d55046..2409cb4 100644 --- a/lib/controls/timeline/flattened_tree_entry_control.dart +++ b/lib/controls/timeline/flattened_tree_entry_control.dart @@ -478,8 +478,17 @@ class _StatusControlState extends ConsumerState { } Future _report(Profile profile, TimelineEntry entry) async { - final confirm = await showYesNoDialog(context, - 'Open the link in the browser to report on your Friendica server?'); + final needToConfirm = ref.read(promptOnReportingProvider); + late final bool confirm; + + if (needToConfirm) { + confirm = (await showYesNoDialog(context, + 'Open the link in the browser to report on your Friendica server? (You will need to be logged in on the browser too)')) ?? + false; + } else { + confirm = true; + } + if (confirm == true) { final link = Uri.https( profile.serverName, diff --git a/lib/riverpod_controllers/networking/fediverse_instance_client_services.g.dart b/lib/riverpod_controllers/networking/fediverse_instance_client_services.g.dart index eecda2e..6e6ec94 100644 --- a/lib/riverpod_controllers/networking/fediverse_instance_client_services.g.dart +++ b/lib/riverpod_controllers/networking/fediverse_instance_client_services.g.dart @@ -437,7 +437,7 @@ class _InstanceDataV2ProviderElement Profile get profile => (origin as _InstanceDataV2Provider).profile; } -String _$instanceRulesHash() => r'686f3ddc9bf9593457b2f3269e5797495f0f8228'; +String _$instanceRulesHash() => r'7d50f58d883237e5876bb5ad2bdf2f32c8637646'; /// See also [instanceRules]. @ProviderFor(instanceRules) diff --git a/lib/riverpod_controllers/settings_services.dart b/lib/riverpod_controllers/settings_services.dart index 395522c..bf56a13 100644 --- a/lib/riverpod_controllers/settings_services.dart +++ b/lib/riverpod_controllers/settings_services.dart @@ -248,3 +248,19 @@ class OpenTagsInApp extends _$SpoilerHidingSetting { state = value; } } + +@Riverpod(keepAlive: true) +class PromptOnReporting extends _$SpoilerHidingSetting { + static const _promptOnReporting = 'PromptOnReporting'; + + @override + bool build() { + return ref.watch(sharedPreferencesProvider).getBool(_promptOnReporting) ?? + true; + } + + set value(bool value) { + ref.read(sharedPreferencesProvider).setBool(_promptOnReporting, value); + state = value; + } +} diff --git a/lib/riverpod_controllers/settings_services.g.dart b/lib/riverpod_controllers/settings_services.g.dart index 381d7ee..bb2b823 100644 --- a/lib/riverpod_controllers/settings_services.g.dart +++ b/lib/riverpod_controllers/settings_services.g.dart @@ -171,5 +171,21 @@ final openTagsInAppProvider = NotifierProvider.internal( ); typedef _$OpenTagsInApp = Notifier; +String _$promptOnReportingHash() => r'68cf146e3839c0ef1b14a475b461f6899b810b03'; + +/// See also [PromptOnReporting]. +@ProviderFor(PromptOnReporting) +final promptOnReportingProvider = + NotifierProvider.internal( + PromptOnReporting.new, + name: r'promptOnReportingProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$promptOnReportingHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$PromptOnReporting = Notifier; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 4d24102..67156ee 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -34,6 +34,7 @@ class SettingsScreen extends ConsumerWidget { _NetworkTimeoutWidget(), _NotificationGroupingWidget(), _SpoilerHidingWidget(), + _PromptOnReportingWidget(), _OpenTagsInAppWidget(), _ThemeWidget(), if (!kReleaseMode) _ColorBlindnessWidget(), @@ -224,6 +225,24 @@ class _SpoilerHidingWidget extends ConsumerWidget { } } +class _PromptOnReportingWidget extends ConsumerWidget { + const _PromptOnReportingWidget(); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final promptOnReporting = ref.watch(promptOnReportingProvider); + return ListTile( + title: const Text('Confirm Reporting Prompt'), + trailing: Switch( + onChanged: (value) { + ref.read(promptOnReportingProvider.notifier).value = value; + }, + value: promptOnReporting, + ), + ); + } +} + class _OpenTagsInAppWidget extends ConsumerWidget { const _OpenTagsInAppWidget();