Skip to content

Commit 6f1397f

Browse files
committed
add player controls hide delay option
1 parent 109536e commit 6f1397f

File tree

6 files changed

+73
-2
lines changed

6 files changed

+73
-2
lines changed

Screenbox.Core/Services/ISettingsService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public interface ISettingsService
1212
bool PlayerTapGesture { get; set; }
1313
bool PlayerShowControls { get; set; }
1414
bool PlayerShowChapters { get; set; }
15+
int PlayerControlsHideDelay { get; set; }
1516
int PersistentVolume { get; set; }
1617
string PersistentSubtitleLanguage { get; set; }
1718
bool ShowRecent { get; set; }

Screenbox.Core/Services/SettingsService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public sealed class SettingsService : ISettingsService
2020
private const string PlayerSeekGestureKey = "Player/Gesture/Seek";
2121
private const string PlayerTapGestureKey = "Player/Gesture/Tap";
2222
private const string PlayerShowControlsKey = "Player/ShowControls";
23+
private const string PlayerControlsHideDelayKey = "Player/ControlsHideDelay";
2324
private const string PlayerLivelyPathKey = "Player/Lively/Path";
2425
private const string LibrariesUseIndexerKey = "Libraries/UseIndexer";
2526
private const string LibrariesSearchRemovableStorageKey = "Libraries/SearchRemovableStorage";
@@ -114,6 +115,12 @@ public bool PlayerShowControls
114115
set => SetValue(PlayerShowControlsKey, value);
115116
}
116117

118+
public int PlayerControlsHideDelay
119+
{
120+
get => GetValue<int>(PlayerControlsHideDelayKey);
121+
set => SetValue(PlayerControlsHideDelayKey, value);
122+
}
123+
117124
public bool SearchRemovableStorage
118125
{
119126
get => GetValue<bool>(LibrariesSearchRemovableStorageKey);
@@ -169,6 +176,7 @@ public SettingsService()
169176
SetDefault(PlayerSeekGestureKey, true);
170177
SetDefault(PlayerTapGestureKey, true);
171178
SetDefault(PlayerShowControlsKey, true);
179+
SetDefault(PlayerControlsHideDelayKey, 3);
172180
SetDefault(PersistentVolumeKey, 100);
173181
SetDefault(MaxVolumeKey, 100);
174182
SetDefault(LibrariesUseIndexerKey, true);

Screenbox.Core/ViewModels/PlayerPageViewModel.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -576,9 +576,11 @@ public bool TryHideControls(bool skipFocusCheck = false)
576576
return true;
577577
}
578578

579-
private void DelayHideControls(int delayInSeconds = 3)
579+
private void DelayHideControls()
580580
{
581581
if (PlayerVisibility != PlayerVisibilityState.Visible || AudioOnly) return;
582+
583+
int delayInSeconds = _settingsService.PlayerControlsHideDelay;
582584
_controlsVisibilityTimer.Debounce(() => TryHideControls(), TimeSpan.FromSeconds(delayInSeconds));
583585
}
584586

@@ -592,7 +594,7 @@ private void FocusManagerOnFocusChanged(object sender, FocusManagerGotFocusEvent
592594
{
593595
if (_visibilityOverride) return;
594596
ControlsHidden = false;
595-
DelayHideControls(4);
597+
DelayHideControls();
596598
}
597599

598600
private async void ProcessOpeningMedia(MediaViewModel? current)

Screenbox.Core/ViewModels/SettingsPageViewModel.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public sealed partial class SettingsPageViewModel : ObservableRecipient
2929
[ObservableProperty] private bool _playerTapGesture;
3030
[ObservableProperty] private bool _playerShowControls;
3131
[ObservableProperty] private bool _playerShowChapters;
32+
[ObservableProperty] private int _playerControlsHideDelay;
3233
[ObservableProperty] private int _volumeBoost;
3334
[ObservableProperty] private bool _useIndexer;
3435
[ObservableProperty] private bool _showRecent;
@@ -99,6 +100,15 @@ public SettingsPageViewModel(ISettingsService settingsService, ILibraryService l
99100
_playerTapGesture = _settingsService.PlayerTapGesture;
100101
_playerShowControls = _settingsService.PlayerShowControls;
101102
_playerShowChapters = _settingsService.PlayerShowChapters;
103+
_playerControlsHideDelay = _settingsService.PlayerControlsHideDelay switch
104+
{
105+
1 => 0,
106+
2 => 1,
107+
3 => 2,
108+
4 => 3,
109+
5 => 4,
110+
_ => 2 // Default to 3 seconds (Index 2)
111+
};
102112
_useIndexer = _settingsService.UseIndexer;
103113
_showRecent = _settingsService.ShowRecent;
104114
_theme = ((int)_settingsService.Theme + 2) % 3;
@@ -187,6 +197,21 @@ partial void OnPlayerShowChaptersChanged(bool value)
187197
Messenger.Send(new SettingsChangedMessage(nameof(PlayerShowChapters), typeof(SettingsPageViewModel)));
188198
}
189199

200+
partial void OnPlayerControlsHideDelayChanged(int value)
201+
{
202+
_settingsService.PlayerControlsHideDelay = value switch
203+
{
204+
// Index => Seconds
205+
0 => 1,
206+
1 => 2,
207+
2 => 3,
208+
3 => 4,
209+
4 => 5,
210+
_ => 3
211+
};
212+
Messenger.Send(new SettingsChangedMessage(nameof(PlayerControlsHideDelay), typeof(SettingsPageViewModel)));
213+
}
214+
190215
partial void OnUseIndexerChanged(bool value)
191216
{
192217
_settingsService.UseIndexer = value;

Screenbox/Pages/SettingsPage.xaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,23 @@
413413
<ctc:SettingsCard Header="{x:Bind strings:Resources.SettingsShowChaptersHeader}">
414414
<ToggleSwitch IsOn="{x:Bind ViewModel.PlayerShowChapters, Mode=TwoWay}" />
415415
</ctc:SettingsCard>
416+
<ctc:SettingsCard Header="{x:Bind strings:Resources.SettingsControlsHideDelayHeader}">
417+
<ComboBox
418+
MinWidth="150"
419+
AutomationProperties.HelpText="{x:Bind strings:Resources.SettingsControlsHideDelayHeader}"
420+
SelectedIndex="{x:Bind ViewModel.PlayerControlsHideDelay, Mode=TwoWay}">
421+
<ComboBox.ItemTemplate>
422+
<DataTemplate x:DataType="x:String">
423+
<TextBlock Text="{x:Bind Converter={StaticResource ResourceNameToResourceStringConverter}}" />
424+
</DataTemplate>
425+
</ComboBox.ItemTemplate>
426+
<x:String>HideDelay1s</x:String>
427+
<x:String>HideDelay2s</x:String>
428+
<x:String>HideDelay3s</x:String>
429+
<x:String>HideDelay4s</x:String>
430+
<x:String>HideDelay5s</x:String>
431+
</ComboBox>
432+
</ctc:SettingsCard>
416433
</ctc:SettingsExpander.Items>
417434
</ctc:SettingsExpander>
418435

Screenbox/Strings/en-US/Resources.resw

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,24 @@
944944
<data name="SettingsShowChaptersHeader" xml:space="preserve">
945945
<value>Display chapter name when available</value>
946946
</data>
947+
<data name="SettingsControlsHideDelayHeader" xml:space="preserve">
948+
<value>Dismiss controls after this amount of time without interaction</value>
949+
</data>
950+
<data name="HideDelay1s" xml:space="preserve">
951+
<value>1 second</value>
952+
</data>
953+
<data name="HideDelay2s" xml:space="preserve">
954+
<value>2 seconds</value>
955+
</data>
956+
<data name="HideDelay3s" xml:space="preserve">
957+
<value>3 seconds</value>
958+
</data>
959+
<data name="HideDelay4s" xml:space="preserve">
960+
<value>4 seconds</value>
961+
</data>
962+
<data name="HideDelay5s" xml:space="preserve">
963+
<value>5 seconds</value>
964+
</data>
947965
<data name="SettingsLanguageSelectionHeader" xml:space="preserve">
948966
<value>App language</value>
949967
</data>

0 commit comments

Comments
 (0)