diff --git a/Screenbox.Core/Services/ISettingsService.cs b/Screenbox.Core/Services/ISettingsService.cs index cf456da4e..1533da88b 100644 --- a/Screenbox.Core/Services/ISettingsService.cs +++ b/Screenbox.Core/Services/ISettingsService.cs @@ -26,5 +26,6 @@ public interface ISettingsService bool UseMultipleInstances { get; set; } string LivelyActivePath { get; set; } MediaPlaybackAutoRepeatMode PersistentRepeatMode { get; set; } + bool PlayerAutoFullScreen { get; set; } } } diff --git a/Screenbox.Core/Services/SettingsService.cs b/Screenbox.Core/Services/SettingsService.cs index 7aed0928b..08100a671 100644 --- a/Screenbox.Core/Services/SettingsService.cs +++ b/Screenbox.Core/Services/SettingsService.cs @@ -7,6 +7,7 @@ using Windows.Foundation.Collections; using Windows.Media; using Windows.Storage; +using Windows.UI.ViewManagement; namespace Screenbox.Core.Services { @@ -35,6 +36,7 @@ public sealed class SettingsService : ISettingsService private const string PersistentRepeatModeKey = "Values/RepeatMode"; private const string PersistentSubtitleLanguageKey = "Values/SubtitleLanguage"; private const string PlayerShowChaptersKey = "Player/ShowChapters"; + private const string PlayerAutoFullScreenKey = "Player/AutoFullScreen"; public bool UseIndexer { @@ -162,6 +164,12 @@ public bool PlayerShowChapters set => SetValue(PlayerShowChaptersKey, value); } + public bool PlayerAutoFullScreen + { + get => GetValue(PlayerAutoFullScreenKey); + set => SetValue(PlayerAutoFullScreenKey, value); + } + public SettingsService() { SetDefault(PlayerAutoResizeKey, (int)PlayerAutoResizeOption.Never); @@ -180,6 +188,7 @@ public SettingsService() SetDefault(AdvancedMultipleInstancesKey, false); SetDefault(GlobalArgumentsKey, string.Empty); SetDefault(PlayerShowChaptersKey, true); + SetDefault(PlayerAutoFullScreenKey, false); // Device family specific overrides if (SystemInformation.IsXbox) diff --git a/Screenbox.Core/ViewModels/SettingsPageViewModel.cs b/Screenbox.Core/ViewModels/SettingsPageViewModel.cs index 839bda72f..ff32f5214 100644 --- a/Screenbox.Core/ViewModels/SettingsPageViewModel.cs +++ b/Screenbox.Core/ViewModels/SettingsPageViewModel.cs @@ -29,6 +29,7 @@ public sealed partial class SettingsPageViewModel : ObservableRecipient [ObservableProperty] private bool _playerTapGesture; [ObservableProperty] private bool _playerShowControls; [ObservableProperty] private bool _playerShowChapters; + [ObservableProperty] private bool _playerAutoFullScreen; [ObservableProperty] private int _volumeBoost; [ObservableProperty] private bool _useIndexer; [ObservableProperty] private bool _showRecent; @@ -99,6 +100,7 @@ public SettingsPageViewModel(ISettingsService settingsService, ILibraryService l _playerTapGesture = _settingsService.PlayerTapGesture; _playerShowControls = _settingsService.PlayerShowControls; _playerShowChapters = _settingsService.PlayerShowChapters; + _playerAutoFullScreen = _settingsService.PlayerAutoFullScreen; _useIndexer = _settingsService.UseIndexer; _showRecent = _settingsService.ShowRecent; _theme = ((int)_settingsService.Theme + 2) % 3; @@ -187,6 +189,12 @@ partial void OnPlayerShowChaptersChanged(bool value) Messenger.Send(new SettingsChangedMessage(nameof(PlayerShowChapters), typeof(SettingsPageViewModel))); } + partial void OnPlayerAutoFullScreenChanged(bool value) + { + _settingsService.PlayerAutoFullScreen = value; + Messenger.Send(new SettingsChangedMessage(nameof(PlayerAutoFullScreen), typeof(SettingsPageViewModel))); + } + partial void OnUseIndexerChanged(bool value) { _settingsService.UseIndexer = value; diff --git a/Screenbox/App.xaml.cs b/Screenbox/App.xaml.cs index b233ebe2a..4cfc71f64 100644 --- a/Screenbox/App.xaml.cs +++ b/Screenbox/App.xaml.cs @@ -187,6 +187,18 @@ protected override void OnFileActivated(FileActivatedEventArgs args) } Window.Current.Activate(); + + // Auto enter full screen if setting is enabled and we're not already in a special mode + var settings = CommunityToolkit.Mvvm.DependencyInjection.Ioc.Default.GetRequiredService(); + if (settings.PlayerAutoFullScreen) + { + var view = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); + if (!view.IsFullScreenMode && view.ViewMode == Windows.UI.ViewManagement.ApplicationViewMode.Default) + { + view.TryEnterFullScreenMode(); + } + } + WeakReferenceMessenger.Default.Send(new PlayFilesMessage(args.Files, args.NeighboringFilesQuery)); } diff --git a/Screenbox/Pages/SettingsPage.xaml b/Screenbox/Pages/SettingsPage.xaml index 3715519ed..54216608d 100644 --- a/Screenbox/Pages/SettingsPage.xaml +++ b/Screenbox/Pages/SettingsPage.xaml @@ -379,6 +379,15 @@ + + + + Resize the app window to best match a video's native resolution on playback + + Auto full screen + + + Automatically enter full screen mode when opening a media file + Volume boost