diff --git a/lib/src/localization/app_de.arb b/lib/src/localization/app_de.arb index 26a5ac2..1cda06b 100644 --- a/lib/src/localization/app_de.arb +++ b/lib/src/localization/app_de.arb @@ -118,7 +118,7 @@ "settingsNotifyTroubleshootingNoProblem": "Kein Problem festgestellt", "settingsNotifyTroubleshootingNoProblemDesc": "Klicke auf OK, um eine Testbenachrichtigung zu erhalten. Wenn du auch nach 10 Minuten warten keine Nachricht erhältst, sende uns bitte dein Diagnoseprotokoll unter Einstellungen > Hilfe > Diagnoseprotokoll, damit wir uns das Problem ansehen können.", "settingsHelp": "Hilfe", - "settingsHelpSupport": "Support-Center", + "settingsHelpFAQ": "FAQ", "settingsHelpContactUs": "Kontaktiere uns", "settingsHelpDiagnostics": "Diagnoseprotokoll", "settingsHelpVersion": "Version", diff --git a/lib/src/localization/app_en.arb b/lib/src/localization/app_en.arb index 8cc177d..b484098 100644 --- a/lib/src/localization/app_en.arb +++ b/lib/src/localization/app_en.arb @@ -209,8 +209,8 @@ "@settingsHelp": {}, "settingsHelpDiagnostics": "Diagnostic protocol", "@settingsHelpDiagnostics": {}, - "settingsHelpSupport": "Support Center", - "@settingsHelpSupport": {}, + "settingsHelpFAQ": "FAQ", + "@settingsHelpFAQ": {}, "settingsHelpContactUs": "Contact us", "@settingsHelpContactUs": {}, "settingsHelpVersion": "Version", diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index fa9f2d2..d24e877 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -713,11 +713,11 @@ abstract class AppLocalizations { /// **'Diagnostic protocol'** String get settingsHelpDiagnostics; - /// No description provided for @settingsHelpSupport. + /// No description provided for @settingsHelpFAQ. /// /// In en, this message translates to: - /// **'Support Center'** - String get settingsHelpSupport; + /// **'FAQ'** + String get settingsHelpFAQ; /// No description provided for @settingsHelpContactUs. /// diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index f7ec2cf..48e660f 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -322,7 +322,7 @@ class AppLocalizationsDe extends AppLocalizations { String get settingsHelpDiagnostics => 'Diagnoseprotokoll'; @override - String get settingsHelpSupport => 'Support-Center'; + String get settingsHelpFAQ => 'FAQ'; @override String get settingsHelpContactUs => 'Kontaktiere uns'; diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index bbb0acb..cd386ad 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -322,7 +322,7 @@ class AppLocalizationsEn extends AppLocalizations { String get settingsHelpDiagnostics => 'Diagnostic protocol'; @override - String get settingsHelpSupport => 'Support Center'; + String get settingsHelpFAQ => 'FAQ'; @override String get settingsHelpContactUs => 'Contact us'; diff --git a/lib/src/views/settings/help/faq.dart b/lib/src/views/settings/help/faq.dart new file mode 100644 index 0000000..26110dd --- /dev/null +++ b/lib/src/views/settings/help/faq.dart @@ -0,0 +1,106 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'package:logging/logging.dart'; +import 'package:twonly/src/utils/misc.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class FAQPage extends StatefulWidget { + const FAQPage({super.key}); + + @override + State createState() => _FAQPageState(); +} + +class _FAQPageState extends State { + Map? _faqData; + String? _locale; + late String domain; + bool noInternet = false; + + @override + void initState() { + super.initState(); + domain = "http://10.99.0.140:8000"; + _fetchFAQData(); + } + + Future _fetchFAQData() async { + try { + final response = await http.get(Uri.parse("$domain/faq.json")); + + if (response.statusCode == 200) { + _locale = Localizations.localeOf(context).languageCode; + setState(() { + // print(response.body); + _faqData = json.decode(utf8.decode(response.body.codeUnits)); + }); + } else { + // throw Exception('Failed to load FAQ data'); + } + } catch (e) { + setState(() { + noInternet = true; + }); + } + } + + @override + Widget build(BuildContext context) { + if (noInternet) { + return Scaffold( + appBar: AppBar( + title: Text(context.lang.settingsHelpFAQ), + ), + body: Center( + child: Text("Could not load the FAQ."), + ), + ); + } + + if (_faqData == null) { + return Scaffold( + appBar: AppBar( + title: Text(context.lang.settingsHelpFAQ), + ), + body: Center(child: CircularProgressIndicator()), + ); + } + + final faq = _faqData![_locale ?? 'en']; + + return Scaffold( + appBar: AppBar( + title: Text(context.lang.settingsHelpFAQ), + ), + body: ListView.builder( + itemCount: faq.keys.length, + itemBuilder: (context, index) { + String category = faq.keys.elementAt(index); + var categoryData = faq[category]; + + return Card( + child: ExpansionTile( + title: Text(categoryData['meta']['title']), + subtitle: Text(categoryData['meta']['desc']), + children: categoryData['questions'].map((question) { + return ListTile( + title: Text(question['title']), + onTap: () => _launchURL(question['path']), + ); + }).toList(), + ), + ); + }, + ), + ); + } + + void _launchURL(String path) async { + try { + await launchUrl(Uri.parse("$domain$path")); + } catch (e) { + Logger("launchUrl").shout("Could not launch $e"); + } + } +} diff --git a/lib/src/views/settings/help/help_view.dart b/lib/src/views/settings/help/help_view.dart index 511e54a..1864c47 100644 --- a/lib/src/views/settings/help/help_view.dart +++ b/lib/src/views/settings/help/help_view.dart @@ -5,6 +5,7 @@ import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/settings/help/contact_us_view.dart'; import 'package:twonly/src/views/settings/help/credits_view.dart'; import 'package:twonly/src/views/settings/help/diagnostics_view.dart'; +import 'package:twonly/src/views/settings/help/faq.dart'; import 'package:url_launcher/url_launcher.dart'; class HelpView extends StatelessWidget { @@ -18,11 +19,13 @@ class HelpView extends StatelessWidget { body: ListView( children: [ ListTile( - title: Text(context.lang.settingsHelpSupport), + title: Text(context.lang.settingsHelpFAQ), onTap: () { - launchUrl(Uri.parse("https://twonly.eu/support")); + Navigator.push(context, MaterialPageRoute(builder: (context) { + return FAQPage(); + })); }, - trailing: FaIcon(FontAwesomeIcons.arrowUpRightFromSquare, size: 15), + // trailing: FaIcon(FontAwesomeIcons.arrowUpRightFromSquare, size: 15), ), ListTile( title: Text(context.lang.settingsHelpContactUs),