viewer: apply modified video quick actions without leaving
This commit is contained in:
parent
24fcb20616
commit
67efa82fe2
2 changed files with 62 additions and 50 deletions
|
@ -26,45 +26,52 @@ class VideoSection extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final currentShowVideos = context.select<Settings, bool>((s) => !s.hiddenFilters.contains(MimeFilter.video));
|
||||
final currentEnableVideoHardwareAcceleration = context.select<Settings, bool>((s) => s.enableVideoHardwareAcceleration);
|
||||
final currentEnableVideoAutoPlay = context.select<Settings, bool>((s) => s.enableVideoAutoPlay);
|
||||
final currentVideoLoopMode = context.select<Settings, VideoLoopMode>((s) => s.videoLoopMode);
|
||||
|
||||
final children = [
|
||||
if (!standalonePage)
|
||||
SwitchListTile(
|
||||
value: currentShowVideos,
|
||||
onChanged: (v) => settings.changeFilterVisibility({MimeFilter.video}, v),
|
||||
title: Text(context.l10n.settingsVideoShowVideos),
|
||||
Selector<Settings, bool>(
|
||||
selector: (context, s) => !s.hiddenFilters.contains(MimeFilter.video),
|
||||
builder: (context, current, child) => SwitchListTile(
|
||||
value: current,
|
||||
onChanged: (v) => settings.changeFilterVisibility({MimeFilter.video}, v),
|
||||
title: Text(context.l10n.settingsVideoShowVideos),
|
||||
),
|
||||
),
|
||||
const VideoActionsTile(),
|
||||
SwitchListTile(
|
||||
value: currentEnableVideoHardwareAcceleration,
|
||||
onChanged: (v) => settings.enableVideoHardwareAcceleration = v,
|
||||
title: Text(context.l10n.settingsVideoEnableHardwareAcceleration),
|
||||
Selector<Settings, bool>(
|
||||
selector: (context, s) => s.enableVideoHardwareAcceleration,
|
||||
builder: (context, current, child) => SwitchListTile(
|
||||
value: current,
|
||||
onChanged: (v) => settings.enableVideoHardwareAcceleration = v,
|
||||
title: Text(context.l10n.settingsVideoEnableHardwareAcceleration),
|
||||
),
|
||||
),
|
||||
SwitchListTile(
|
||||
value: currentEnableVideoAutoPlay,
|
||||
onChanged: (v) => settings.enableVideoAutoPlay = v,
|
||||
title: Text(context.l10n.settingsVideoEnableAutoPlay),
|
||||
Selector<Settings, bool>(
|
||||
selector: (context, s) => s.enableVideoAutoPlay,
|
||||
builder: (context, current, child) => SwitchListTile(
|
||||
value: current,
|
||||
onChanged: (v) => settings.enableVideoAutoPlay = v,
|
||||
title: Text(context.l10n.settingsVideoEnableAutoPlay),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text(context.l10n.settingsVideoLoopModeTile),
|
||||
subtitle: Text(currentVideoLoopMode.getName(context)),
|
||||
onTap: () async {
|
||||
final value = await showDialog<VideoLoopMode>(
|
||||
context: context,
|
||||
builder: (context) => AvesSelectionDialog<VideoLoopMode>(
|
||||
initialValue: currentVideoLoopMode,
|
||||
options: Map.fromEntries(VideoLoopMode.values.map((v) => MapEntry(v, v.getName(context)))),
|
||||
title: context.l10n.settingsVideoLoopModeTitle,
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
settings.videoLoopMode = value;
|
||||
}
|
||||
},
|
||||
Selector<Settings, VideoLoopMode>(
|
||||
selector: (context, s) => s.videoLoopMode,
|
||||
builder: (context, current, child) => ListTile(
|
||||
title: Text(context.l10n.settingsVideoLoopModeTile),
|
||||
subtitle: Text(current.getName(context)),
|
||||
onTap: () async {
|
||||
final value = await showDialog<VideoLoopMode>(
|
||||
context: context,
|
||||
builder: (context) => AvesSelectionDialog<VideoLoopMode>(
|
||||
initialValue: current,
|
||||
options: Map.fromEntries(VideoLoopMode.values.map((v) => MapEntry(v, v.getName(context)))),
|
||||
title: context.l10n.settingsVideoLoopModeTitle,
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
settings.videoLoopMode = value;
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
const SubtitleThemeTile(),
|
||||
];
|
||||
|
|
|
@ -85,23 +85,28 @@ class _VideoControlOverlayState extends State<VideoControlOverlay> with SingleTi
|
|||
builder: (context, mqWidth, child) {
|
||||
final buttonWidth = OverlayButton.getSize(context);
|
||||
final availableCount = ((mqWidth - outerPadding * 2) / (buttonWidth + innerPadding)).floor();
|
||||
final quickActions = settings.videoQuickActions.take(availableCount - 1).toList();
|
||||
final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList();
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
_ButtonRow(
|
||||
quickActions: quickActions,
|
||||
menuActions: menuActions,
|
||||
scale: scale,
|
||||
controller: controller,
|
||||
onActionSelected: widget.onActionSelected,
|
||||
onActionMenuOpened: widget.onActionMenuOpened,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
_buildProgressBar(),
|
||||
],
|
||||
return Selector<Settings, List<VideoAction>>(
|
||||
selector: (context, s) => s.videoQuickActions,
|
||||
builder: (context, videoQuickActions, child) {
|
||||
final quickActions = videoQuickActions.take(availableCount - 1).toList();
|
||||
final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList();
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
_ButtonRow(
|
||||
quickActions: quickActions,
|
||||
menuActions: menuActions,
|
||||
scale: scale,
|
||||
controller: controller,
|
||||
onActionSelected: widget.onActionSelected,
|
||||
onActionMenuOpened: widget.onActionMenuOpened,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
_buildProgressBar(),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue