diff --git a/lib/generated/intl/messages_de.dart b/lib/generated/intl/messages_de.dart index d5e23988..3ce118aa 100644 --- a/lib/generated/intl/messages_de.dart +++ b/lib/generated/intl/messages_de.dart @@ -163,6 +163,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "errorTokenExpired": m4, "errorWhenPullingChallenges": m5, + "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "generatingPhonePart": MessageLookupByLibrary.simpleMessage( "Generiere Telefonanteil", ), diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index c59cf812..50f14a98 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -156,6 +156,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "errorTokenExpired": m4, "errorWhenPullingChallenges": m5, + "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "generatingPhonePart": MessageLookupByLibrary.simpleMessage( "Generating phone part", ), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 8af887c8..1a5886be 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -1152,6 +1152,16 @@ class S { ); } + /// `Feedback` + String get feedback { + return Intl.message( + 'Feedback', + name: 'feedback', + desc: 'Feedback button in the about page', + args: [], + ); + } + /// `Privacy policy` String get privacyPolicy { return Intl.message( diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 99306f0c..f48b5b96 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -405,6 +405,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": null, + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Zásady ochrany osobních údajů", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 88a25e7d..ad075870 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -388,6 +388,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": "Feedback", + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Datenschutzerklärung", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 55eafc92..573add74 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -397,6 +397,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": "Feedback", + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Privacy policy", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 56e20514..5e7d3866 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -402,6 +402,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": null, + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Política de privacidad", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 220628fa..848eae26 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -407,6 +407,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": null, + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Politique de confidentialité", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 6eba9d3e..f5cef402 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -404,6 +404,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": null, + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Privacybeleid", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index bbe08571..1cfb1715 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -400,6 +400,10 @@ "@appVersion": { "description": "App version info in the About page" }, + "feedback": null, + "@feedback": { + "description": "Feedback button in the about page" + }, "privacyPolicy": "Polityka prywatności", "@privacyPolicy": { "description": "Button to open the privacy policy" diff --git a/lib/utils/globals.dart b/lib/utils/globals.dart index e5fee517..bd4c16a6 100644 --- a/lib/utils/globals.dart +++ b/lib/utils/globals.dart @@ -42,4 +42,5 @@ final appName = 'eduMFA Authenticator'; final brandColor = const Color(0xFF768FFC); final websiteUri = Uri.parse("https://edumfa.io/"); final policyStatementUri = Uri.parse("https://edumfa.io/app-privacy"); +final feedbackUrl = Uri.parse("https://formulare.hm.edu/frontend-server/form/provide/752"); final githubUri = Uri.parse("https://github.com/eduMFA/authenticator"); diff --git a/lib/views/settings_view/settings_view_widgets/about_view.dart b/lib/views/settings_view/settings_view_widgets/about_view.dart index 59de5424..4048e346 100644 --- a/lib/views/settings_view/settings_view_widgets/about_view.dart +++ b/lib/views/settings_view/settings_view_widgets/about_view.dart @@ -25,6 +25,14 @@ class AboutSettingsView extends StatelessView { body: SingleChildScrollView( child: Column( children: [ + SettingsTile( + icon: Icons.feedback, + title: S.of(context).feedback, + isLink: true, + onTap: () => launchUrl(feedbackUrl.replace( + queryParameters: {"ed_Systeminfo": AppInfoUtils.systemInfoString} + )), + ), SettingsTile( icon: Icons.policy, title: S.of(context).privacyPolicy,