feat: make showing user presence info optional

895de76e70 replaced the stories feature
with presence status messages. Stories were an optional feature but
right now presence information can only be disabled on a homeserver
level.

Introduce a setting to make this feature optional on a client level.
This commit is contained in:
Marcus Hoffmann 2024-02-11 17:04:46 +01:00
parent aa68e8fe3b
commit ccfa3fa8f6
6 changed files with 37 additions and 1 deletions

View file

@ -1734,6 +1734,16 @@
"type": "text", "type": "text",
"placeholders": {} "placeholders": {}
}, },
"presenceStyle": "Presence:",
"@presenceStyle": {
"type": "text",
"placeholders": {}
},
"presencesToggle": "Show status messages from other users",
"@presencesToggle": {
"type": "text",
"placeholders": {}
},
"singlesignon": "Single Sign on", "singlesignon": "Single Sign on",
"@singlesignon": { "@singlesignon": {
"type": "text", "type": "text",

View file

@ -49,6 +49,7 @@ abstract class AppConfig {
static bool sendTypingNotifications = true; static bool sendTypingNotifications = true;
static bool sendPublicReadReceipts = true; static bool sendPublicReadReceipts = true;
static bool? sendOnEnter; static bool? sendOnEnter;
static bool showPresences = true;
static bool experimentalVoip = false; static bool experimentalVoip = false;
static const bool hideTypingUsernames = false; static const bool hideTypingUsernames = false;
static const bool hideAllStateEvents = false; static const bool hideAllStateEvents = false;

View file

@ -28,4 +28,5 @@ abstract class SettingKeys {
'chat.fluffy.send_public_read_receipts'; 'chat.fluffy.send_public_read_receipts';
static const String sendOnEnter = 'chat.fluffy.send_on_enter'; static const String sendOnEnter = 'chat.fluffy.send_on_enter';
static const String experimentalVoip = 'chat.fluffy.experimental_voip'; static const String experimentalVoip = 'chat.fluffy.experimental_voip';
static const String showPresences = 'chat.fluffy.show_presences';
} }

View file

@ -5,6 +5,7 @@ import 'package:animations/animations.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart';
import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart';
import 'package:fluffychat/pages/chat_list/search_title.dart'; import 'package:fluffychat/pages/chat_list/search_title.dart';
@ -131,7 +132,8 @@ class ChatListViewBody extends StatelessWidget {
), ),
], ],
if (!controller.isSearchMode && if (!controller.isSearchMode &&
controller.activeFilter != ActiveFilter.groups) controller.activeFilter != ActiveFilter.groups &&
AppConfig.showPresences)
StatusMessageList( StatusMessageList(
onStatusEdit: controller.setStatus, onStatusEdit: controller.setStatus,
), ),

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/account_config.dart';
import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/avatar.dart';
@ -9,6 +10,7 @@ import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/mxc_image.dart'; import 'package:fluffychat/widgets/mxc_image.dart';
import '../../config/app_config.dart'; import '../../config/app_config.dart';
import '../../widgets/settings_switch_list_tile.dart';
import 'settings_style.dart'; import 'settings_style.dart';
class SettingsStyleView extends StatelessWidget { class SettingsStyleView extends StatelessWidget {
@ -162,6 +164,22 @@ class SettingsStyleView extends StatelessWidget {
onChanged: controller.switchTheme, onChanged: controller.switchTheme,
), ),
const Divider(height: 1), const Divider(height: 1),
ListTile(
title: Text(
L10n.of(context)!.presenceStyle,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
),
SettingsSwitchListTile.adaptive(
title: L10n.of(context)!.presencesToggle,
onChanged: (b) => AppConfig.showPresences = b,
storeKey: SettingKeys.showPresences,
defaultValue: AppConfig.showPresences,
),
const Divider(height: 1),
ListTile( ListTile(
title: Text( title: Text(
L10n.of(context)!.messagesStyle, L10n.of(context)!.messagesStyle,

View file

@ -62,6 +62,7 @@ class Matrix extends StatefulWidget {
class MatrixState extends State<Matrix> with WidgetsBindingObserver { class MatrixState extends State<Matrix> with WidgetsBindingObserver {
int _activeClient = -1; int _activeClient = -1;
String? activeBundle; String? activeBundle;
SharedPreferences get store => widget.store; SharedPreferences get store => widget.store;
HomeserverSummary? loginHomeserverSummary; HomeserverSummary? loginHomeserverSummary;
@ -443,6 +444,9 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
AppConfig.experimentalVoip = store.getBool(SettingKeys.experimentalVoip) ?? AppConfig.experimentalVoip = store.getBool(SettingKeys.experimentalVoip) ??
AppConfig.experimentalVoip; AppConfig.experimentalVoip;
AppConfig.showPresences =
store.getBool(SettingKeys.showPresences) ?? AppConfig.showPresences;
} }
@override @override