Merge branch 'krille/pick-share-keys-with'

This commit is contained in:
Krille 2025-02-05 14:39:18 +01:00
commit 27a2361ba8
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
8 changed files with 85 additions and 7 deletions

View file

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/app_lock.dart';
@ -108,6 +109,16 @@ class SettingsSecurityController extends State<SettingsSecurity> {
Future<void> dehydrateAction() => Matrix.of(context).dehydrateAction(context);
void changeShareKeysWith(ShareKeysWith? shareKeysWith) async {
if (shareKeysWith == null) return;
Matrix.of(context).store.setString(
SettingKeys.shareKeysWith,
shareKeysWith.name,
);
Matrix.of(context).client.shareKeysWith = shareKeysWith;
setState(() {});
}
@override
Widget build(BuildContext context) => SettingsSecurityView(this);
}

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
@ -88,6 +89,41 @@ class SettingsSecurityView extends StatelessWidget {
),
},
Divider(color: theme.dividerColor),
ListTile(
title: Text(
L10n.of(context).shareKeysWith,
style: TextStyle(
color: theme.colorScheme.secondary,
fontWeight: FontWeight.bold,
),
),
subtitle: Text(L10n.of(context).shareKeysWithDescription),
),
ListTile(
title: Material(
borderRadius:
BorderRadius.circular(AppConfig.borderRadius / 2),
color: theme.colorScheme.onInverseSurface,
child: DropdownButton<ShareKeysWith>(
isExpanded: true,
padding: const EdgeInsets.symmetric(horizontal: 8.0),
borderRadius:
BorderRadius.circular(AppConfig.borderRadius / 2),
underline: const SizedBox.shrink(),
value: Matrix.of(context).client.shareKeysWith,
items: ShareKeysWith.values
.map(
(share) => DropdownMenuItem(
value: share,
child: Text(share.localized(L10n.of(context))),
),
)
.toList(),
onChanged: controller.changeShareKeysWith,
),
),
),
Divider(color: theme.dividerColor),
ListTile(
title: Text(
L10n.of(context).account,
@ -142,3 +178,18 @@ class SettingsSecurityView extends StatelessWidget {
);
}
}
extension on ShareKeysWith {
String localized(L10n l10n) {
switch (this) {
case ShareKeysWith.all:
return l10n.allDevices;
case ShareKeysWith.crossVerifiedIfEnabled:
return l10n.crossVerifiedDevicesIfEnabled;
case ShareKeysWith.crossVerified:
return l10n.crossVerifiedDevices;
case ShareKeysWith.directlyVerifiedOnly:
return l10n.verifiedDevicesOnly;
}
}
}