diff --git a/lib/src/localization/app_de.arb b/lib/src/localization/app_de.arb index 345b8a4..9ded928 100644 --- a/lib/src/localization/app_de.arb +++ b/lib/src/localization/app_de.arb @@ -112,6 +112,7 @@ "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", + "settingsHelpContactUs": "Kontaktiere uns", "settingsHelpDiagnostics": "Diagnoseprotokoll", "settingsHelpVersion": "Version", "settingsHelpLicenses": "Lizenzen (Source-Code)", diff --git a/lib/src/localization/app_en.arb b/lib/src/localization/app_en.arb index 0ad0aba..4fa0e65 100644 --- a/lib/src/localization/app_en.arb +++ b/lib/src/localization/app_en.arb @@ -202,6 +202,8 @@ "@settingsHelpDiagnostics": {}, "settingsHelpSupport": "Support Center", "@settingsHelpSupport": {}, + "settingsHelpContactUs": "Contact us", + "@settingsHelpContactUs": {}, "settingsHelpVersion": "Version", "@settingsHelpVersion": {}, "settingsHelpLicenses": "Licenses (Source-Code)", diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index 83786ce..60c076c 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -677,6 +677,12 @@ abstract class AppLocalizations { /// **'Support Center'** String get settingsHelpSupport; + /// No description provided for @settingsHelpContactUs. + /// + /// In en, this message translates to: + /// **'Contact us'** + String get settingsHelpContactUs; + /// No description provided for @settingsHelpVersion. /// /// In en, this message translates to: diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index f4e6266..4678684 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -303,6 +303,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get settingsHelpSupport => 'Support-Center'; + @override + String get settingsHelpContactUs => 'Kontaktiere uns'; + @override String get settingsHelpVersion => 'Version'; diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index a568356..32e4505 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -303,6 +303,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get settingsHelpSupport => 'Support Center'; + @override + String get settingsHelpContactUs => 'Contact us'; + @override String get settingsHelpVersion => 'Version'; diff --git a/lib/src/views/chats/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart index 1b92aaa..4d4b9c5 100644 --- a/lib/src/views/chats/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -119,7 +119,7 @@ class ChatListEntry extends StatelessWidget { Widget getReactionRow() { List children = []; bool hasOneTextReaction = false; - bool hasOneStored = false; + // bool hasOneStored = false; bool hasOneReopened = false; for (final reaction in reactions) { MessageContent? content = MessageContent.fromJson( diff --git a/lib/src/views/settings/help/contact_us_view.dart b/lib/src/views/settings/help/contact_us_view.dart new file mode 100644 index 0000000..88d031b --- /dev/null +++ b/lib/src/views/settings/help/contact_us_view.dart @@ -0,0 +1,106 @@ +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'package:twonly/src/utils/misc.dart'; +import 'package:twonly/src/utils/storage.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class ContactUsView extends StatefulWidget { + const ContactUsView({super.key}); + + @override + State createState() => _ContactUsState(); +} + +class _ContactUsState extends State { + final TextEditingController _controller = TextEditingController(); + + Future _submitFeedback() async { + final String feedback = _controller.text; + + if (feedback.isEmpty) { + // Show a message if the text field is empty + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Please enter your message.')), + ); + return; + } + + final user = await getUser(); + if (user == null) return; + + final feedbackFull = "${user.username}\n\n$feedback"; + + final response = await http.post( + Uri.parse('https://twonly.theconnectapp.de/subscribe.twonly.php'), + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: { + 'feedback': feedbackFull, + }, + ); + if (!context.mounted) return; + + if (response.statusCode == 200) { + // Handle successful response + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Feedback submitted successfully!')), + ); + Navigator.pop(context); + } else { + // Handle error response + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Failed to submit feedback.')), + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(context.lang.settingsHelpContactUs), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + TextField( + controller: _controller, + decoration: InputDecoration( + hintText: 'Your Feedback.', + border: OutlineInputBorder(), + ), + maxLines: 10, + ), + ], + ), + ), + bottomNavigationBar: SafeArea( + child: Padding( + padding: EdgeInsets.all(20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + launchUrl(Uri.parse("https://twonly.eu/support")); + }, + child: Text( + 'Have you read our FAQ yet?', + style: TextStyle( + color: Colors.blue, + ), + ), + ), + ElevatedButton( + onPressed: _submitFeedback, + child: Text('Submit'), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/src/views/settings/credits_view.dart b/lib/src/views/settings/help/credits_view.dart similarity index 100% rename from lib/src/views/settings/credits_view.dart rename to lib/src/views/settings/help/credits_view.dart diff --git a/lib/src/views/settings/diagnostics_view.dart b/lib/src/views/settings/help/diagnostics_view.dart similarity index 100% rename from lib/src/views/settings/diagnostics_view.dart rename to lib/src/views/settings/help/diagnostics_view.dart diff --git a/lib/src/views/settings/help_view.dart b/lib/src/views/settings/help/help_view.dart similarity index 84% rename from lib/src/views/settings/help_view.dart rename to lib/src/views/settings/help/help_view.dart index fe3b3bb..495bf08 100644 --- a/lib/src/views/settings/help_view.dart +++ b/lib/src/views/settings/help/help_view.dart @@ -2,8 +2,9 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:twonly/src/utils/misc.dart'; -import 'package:twonly/src/views/settings/credits_view.dart'; -import 'package:twonly/src/views/settings/diagnostics_view.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:url_launcher/url_launcher.dart'; class HelpView extends StatelessWidget { @@ -24,6 +25,14 @@ class HelpView extends StatelessWidget { trailing: FaIcon(FontAwesomeIcons.arrowUpRightFromSquare, size: 15), ), + ListTile( + title: Text(context.lang.settingsHelpContactUs), + onTap: () { + Navigator.push(context, MaterialPageRoute(builder: (context) { + return ContactUsView(); + })); + }, + ), Divider(), FutureBuilder( future: PackageInfo.fromPlatform(), diff --git a/lib/src/views/settings/settings_main_view.dart b/lib/src/views/settings/settings_main_view.dart index 57596a8..ca255b3 100644 --- a/lib/src/views/settings/settings_main_view.dart +++ b/lib/src/views/settings/settings_main_view.dart @@ -11,7 +11,7 @@ import 'package:twonly/src/views/settings/chat/chat_settings_view.dart'; import 'package:twonly/src/views/settings/data_and_storage_view.dart'; import 'package:twonly/src/views/settings/notification_view.dart'; import 'package:twonly/src/views/settings/profile/profile_view.dart'; -import 'package:twonly/src/views/settings/help_view.dart'; +import 'package:twonly/src/views/settings/help/help_view.dart'; import 'package:twonly/src/views/settings/privacy_view.dart'; class SettingsMainView extends StatefulWidget {