mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 12:14:11 +00:00 
			
		
		
		
	Can update conversation settings from mobile application
This commit is contained in:
		@@ -4,6 +4,7 @@ import 'package:comunic/models/api_request.dart';
 | 
				
			|||||||
import 'package:comunic/models/data_conservation_policy_settings.dart';
 | 
					import 'package:comunic/models/data_conservation_policy_settings.dart';
 | 
				
			||||||
import 'package:comunic/models/general_settings.dart';
 | 
					import 'package:comunic/models/general_settings.dart';
 | 
				
			||||||
import 'package:comunic/models/new_emoji.dart';
 | 
					import 'package:comunic/models/new_emoji.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/notifications_settings.dart';
 | 
				
			||||||
import 'package:comunic/models/security_settings.dart';
 | 
					import 'package:comunic/models/security_settings.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import '../models/api_request.dart';
 | 
					import '../models/api_request.dart';
 | 
				
			||||||
@@ -232,4 +233,28 @@ class SettingsHelper {
 | 
				
			|||||||
        .addInt("likes_lifetime", newSettings.likesLifetime ?? 0)
 | 
					        .addInt("likes_lifetime", newSettings.likesLifetime ?? 0)
 | 
				
			||||||
        .execWithThrow();
 | 
					        .execWithThrow();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Get notifications settings
 | 
				
			||||||
 | 
					  ///
 | 
				
			||||||
 | 
					  /// Throws in case of failure
 | 
				
			||||||
 | 
					  static Future<NotificationsSettings> getNotificationsSettings() async {
 | 
				
			||||||
 | 
					    final response = await APIRequest.withLogin("settings/get_notifications")
 | 
				
			||||||
 | 
					        .execWithThrowGetObject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return NotificationsSettings(
 | 
				
			||||||
 | 
					      allowConversations: response["allow_conversations"],
 | 
				
			||||||
 | 
					      allowNotificationsSound: response["allow_notifications_sound"],
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Apply new notifications settings
 | 
				
			||||||
 | 
					  ///
 | 
				
			||||||
 | 
					  /// Throws in case of failure
 | 
				
			||||||
 | 
					  static Future<void> setNotificationsSettings(
 | 
				
			||||||
 | 
					          NotificationsSettings settings) async =>
 | 
				
			||||||
 | 
					      await APIRequest.withLogin("settings/set_notifications")
 | 
				
			||||||
 | 
					          .addBool(
 | 
				
			||||||
 | 
					              "allow_notifications_sound", settings.allowNotificationsSound)
 | 
				
			||||||
 | 
					          .addBool("allow_conversations", settings.allowConversations)
 | 
				
			||||||
 | 
					          .execWithThrow();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								lib/models/notifications_settings.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lib/models/notifications_settings.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Notifications settings
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre Hubert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class NotificationsSettings {
 | 
				
			||||||
 | 
					  bool allowConversations;
 | 
				
			||||||
 | 
					  bool allowNotificationsSound;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  NotificationsSettings({
 | 
				
			||||||
 | 
					    @required this.allowConversations,
 | 
				
			||||||
 | 
					    @required this.allowNotificationsSound,
 | 
				
			||||||
 | 
					  })  : assert(allowConversations != null),
 | 
				
			||||||
 | 
					        assert(allowNotificationsSound != null);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,6 +4,7 @@ import 'package:comunic/ui/routes/settings/account_security_settings.dart';
 | 
				
			|||||||
import 'package:comunic/ui/routes/settings/application_settings.dart';
 | 
					import 'package:comunic/ui/routes/settings/application_settings.dart';
 | 
				
			||||||
import 'package:comunic/ui/routes/settings/custom_emojies_account_settings.dart';
 | 
					import 'package:comunic/ui/routes/settings/custom_emojies_account_settings.dart';
 | 
				
			||||||
import 'package:comunic/ui/routes/settings/general_account_settings.dart';
 | 
					import 'package:comunic/ui/routes/settings/general_account_settings.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/routes/settings/notifications_settings.dart';
 | 
				
			||||||
import 'package:comunic/ui/widgets/settings/header_spacer_section.dart';
 | 
					import 'package:comunic/ui/widgets/settings/header_spacer_section.dart';
 | 
				
			||||||
import 'package:comunic/utils/intl_utils.dart';
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
import 'package:comunic/utils/ui_utils.dart';
 | 
					import 'package:comunic/utils/ui_utils.dart';
 | 
				
			||||||
@@ -84,6 +85,14 @@ class __AccountSettingsBodyState extends State<_AccountSettingsBody> {
 | 
				
			|||||||
          onBuild: () => AccountImageSettingsScreen(),
 | 
					          onBuild: () => AccountImageSettingsScreen(),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Notifications settings
 | 
				
			||||||
 | 
					        _SettingsSection(
 | 
				
			||||||
 | 
					          title: tr("Notifications"),
 | 
				
			||||||
 | 
					          subtitle: tr("Customize the notifications you receive on you phone"),
 | 
				
			||||||
 | 
					          icon: Icons.notifications,
 | 
				
			||||||
 | 
					          onBuild: () => NotificationsSettingsScreen(),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Security settings
 | 
					        // Security settings
 | 
				
			||||||
        _SettingsSection(
 | 
					        _SettingsSection(
 | 
				
			||||||
          title: tr("Security"),
 | 
					          title: tr("Security"),
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								lib/ui/routes/settings/notifications_settings.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								lib/ui/routes/settings/notifications_settings.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					import 'package:comunic/helpers/settings_helper.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/notifications_settings.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/async_screen_widget.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/settings/header_spacer_section.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/log_utils.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/ui_utils.dart';
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'package:settings_ui/settings_ui.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Notifications settings
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre Hubert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class NotificationsSettingsScreen extends StatefulWidget {
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  _NotificationsSettingsScreenState createState() =>
 | 
				
			||||||
 | 
					      _NotificationsSettingsScreenState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _NotificationsSettingsScreenState
 | 
				
			||||||
 | 
					    extends State<NotificationsSettingsScreen> {
 | 
				
			||||||
 | 
					  final key = GlobalKey<AsyncScreenWidgetState>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  NotificationsSettings _settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<void> _loadSettings() async {
 | 
				
			||||||
 | 
					    _settings = await SettingsHelper.getNotificationsSettings();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) => AsyncScreenWidget(
 | 
				
			||||||
 | 
					        key: key,
 | 
				
			||||||
 | 
					        onReload: _loadSettings,
 | 
				
			||||||
 | 
					        onBuild: _buildScreen,
 | 
				
			||||||
 | 
					        errorMessage: tr("Failed to load notifications settings!"),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Widget _buildScreen() => SettingsList(sections: [
 | 
				
			||||||
 | 
					        HeadSpacerSection(),
 | 
				
			||||||
 | 
					        SettingsSection(
 | 
				
			||||||
 | 
					          title: tr("Push notifications"),
 | 
				
			||||||
 | 
					          tiles: [
 | 
				
			||||||
 | 
					            SettingsTile.switchTile(
 | 
				
			||||||
 | 
					              title: tr("Allow conversations notification"),
 | 
				
			||||||
 | 
					              onToggle: (v) {
 | 
				
			||||||
 | 
					                _settings.allowConversations = v;
 | 
				
			||||||
 | 
					                _updatedSettings();
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              switchValue: _settings.allowConversations,
 | 
				
			||||||
 | 
					              subtitle:
 | 
				
			||||||
 | 
					                  tr("Receive notifications for the conversations you follow."),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					          ],
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void _updatedSettings() async {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      await SettingsHelper.setNotificationsSettings(_settings);
 | 
				
			||||||
 | 
					      setState(() {});
 | 
				
			||||||
 | 
					    } catch (e, s) {
 | 
				
			||||||
 | 
					      logError(e, s);
 | 
				
			||||||
 | 
					      snack(context, tr("Failed to update settings!"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user