imporved app bar; added quick actions;

This commit is contained in:
Fabian Freund
2024-07-09 09:26:21 +02:00
parent 28197ef59f
commit a38f50488c
17 changed files with 446 additions and 169 deletions
@@ -2,6 +2,7 @@ import 'package:bang_navigator/features/bangs/data/models/bang.dart';
import 'package:bang_navigator/features/bangs/domain/providers.dart';
import 'package:bang_navigator/features/bangs/domain/repositories/data.dart';
import 'package:bang_navigator/features/content_block/data/models/host.dart';
import 'package:bang_navigator/features/search_browser/domain/entities/modes.dart';
import 'package:bang_navigator/features/settings/data/models/settings.dart';
import 'package:bang_navigator/features/settings/data/repositories/settings_repository.dart';
import 'package:bang_navigator/features/settings/presentation/controllers/save_settings.dart';
@@ -243,6 +244,76 @@ class SettingsScreen extends HookConsumerWidget {
const SizedBox(
height: 16,
),
_buildSection(theme, 'Appearance'),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const CustomListTile(
title: 'Quick Action',
subtitle:
'Appears in the browser app bar between website title and tab count.',
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Center(
child: SegmentedButton<KagiTool>(
emptySelectionAllowed: true,
segments: [
ButtonSegment(
value: KagiTool.search,
icon: Icon(KagiTool.search.icon),
label: const Text('Search'),
),
ButtonSegment(
value: KagiTool.summarizer,
icon: Icon(KagiTool.summarizer.icon),
label: const Text('Summarizer'),
),
ButtonSegment(
value: KagiTool.assistant,
icon: Icon(KagiTool.assistant.icon),
label: const Text('Assistant'),
),
],
selected: {
if (settings.quickAction != null) settings.quickAction!,
},
onSelectionChanged: (value) async {
await ref
.read(saveSettingsControllerProvider.notifier)
.save(
(currentSettings) =>
currentSettings.copyWith.quickAction(
value.isNotEmpty ? value.first : null,
),
);
},
),
),
),
],
),
),
SwitchListTile.adaptive(
title: const Text('Quick Action - STT'),
subtitle: const Text(
'Quick option will open with speech-to-text input.',
),
value: settings.quickActionVoiceInput,
onChanged: (settings.quickAction != null)
? (value) async {
await ref
.read(saveSettingsControllerProvider.notifier)
.save(
(currentSettings) => currentSettings.copyWith
.quickActionVoiceInput(value),
);
}
: null,
),
_buildSection(theme, 'Content Blocking'),
SwitchListTile.adaptive(
title: const Text('Enable Content Blocking'),
@@ -8,7 +8,7 @@ class CustomListTile extends StatelessWidget {
final Widget? content;
final Widget? prefix;
final Widget suffix;
final Widget? suffix;
const CustomListTile({
super.key,
@@ -16,13 +16,15 @@ class CustomListTile extends StatelessWidget {
required this.subtitle,
this.content,
this.prefix,
required this.suffix,
this.suffix,
this.enabled = true,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final subtitleTextTheme = theme.textTheme.bodyMedium!
.copyWith(color: theme.colorScheme.onSurfaceVariant);
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8),
@@ -44,7 +46,7 @@ class CustomListTile extends StatelessWidget {
Text(
subtitle,
style: enabled
? theme.textTheme.bodyMedium
? subtitleTextTheme
: theme.textTheme.bodyMedium
?.copyWith(color: theme.disabledColor),
),
@@ -52,7 +54,7 @@ class CustomListTile extends StatelessWidget {
],
),
),
suffix,
if (suffix != null) suffix!,
],
),
);