From 2ce903b6c359bd2a19d16ff0fb8219fa71209baa Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Mon, 19 Dec 2022 01:37:09 +0100 Subject: [PATCH] Settings for new features --- Shared/Channels/ChannelVideosView.swift | 3 +++ Shared/Defaults.swift | 4 +++ Shared/Home/HomeView.swift | 16 ++++++----- Shared/Home/QueueView.swift | 28 ++++++++++++++------ Shared/Modifiers/PlayerOverlayModifier.swift | 12 +++++++++ Shared/Settings/BrowsingSettings.swift | 19 +++++++++++++ 6 files changed, 67 insertions(+), 15 deletions(-) diff --git a/Shared/Channels/ChannelVideosView.swift b/Shared/Channels/ChannelVideosView.swift index 8de806fd..d7daf7b1 100644 --- a/Shared/Channels/ChannelVideosView.swift +++ b/Shared/Channels/ChannelVideosView.swift @@ -31,6 +31,7 @@ struct ChannelVideosView: View { @Namespace private var focusNamespace @Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle + @Default(.expandChannelDescription) private var expandChannelDescription var presentedChannel: Channel? { store.item ?? channel ?? recents.presentedChannel @@ -165,6 +166,8 @@ struct ChannelVideosView: View { } #endif .onAppear { + descriptionExpanded = expandChannelDescription + if let channel, let cache = ChannelsCacheModel.shared.retrieve(channel.cacheKey), store.item.isNil diff --git a/Shared/Defaults.swift b/Shared/Defaults.swift index 560f13d7..f48c0a54 100644 --- a/Shared/Defaults.swift +++ b/Shared/Defaults.swift @@ -23,6 +23,7 @@ extension Defaults.Keys { static let showHome = Key("showHome", default: true) static let showOpenActionsInHome = Key("showOpenActionsInHome", default: true) + static let showQueueInHome = Key("showQueueInHome", default: true) static let showOpenActionsToolbarItem = Key("showOpenActionsToolbarItem", default: false) static let showFavoritesInHome = Key("showFavoritesInHome", default: true) #if os(iOS) @@ -35,6 +36,8 @@ extension Defaults.Keys { static let playerButtonSingleTapGesture = Key("playerButtonSingleTapGesture", default: .togglePlayer) static let playerButtonDoubleTapGesture = Key("playerButtonDoubleTapGesture", default: .togglePlayerVisibility) static let playerButtonShowsControlButtonsWhenMinimized = Key("playerButtonShowsControlButtonsWhenMinimized", default: false) + static let playerButtonIsExpanded = Key("playerButtonIsExpanded", default: false) + static let playerBarMaxWidth = Key("playerBarMaxWidth", default: "600") #if !os(tvOS) #if os(macOS) @@ -48,6 +51,7 @@ extension Defaults.Keys { #if os(iOS) static let lockPortraitWhenBrowsing = Key("lockPortraitWhenBrowsing", default: UIDevice.current.userInterfaceIdiom == .phone) #endif + static let expandChannelDescription = Key("expandChannelDescription", default: false) static let channelOnThumbnail = Key("channelOnThumbnail", default: false) static let timeOnThumbnail = Key("timeOnThumbnail", default: true) static let roundedThumbnails = Key("roundedThumbnails", default: true) diff --git a/Shared/Home/HomeView.swift b/Shared/Home/HomeView.swift index fd3657ec..f76e245e 100644 --- a/Shared/Home/HomeView.swift +++ b/Shared/Home/HomeView.swift @@ -27,6 +27,7 @@ struct HomeView: View { @Default(.homeHistoryItems) private var homeHistoryItems @Default(.showFavoritesInHome) private var showFavoritesInHome @Default(.showOpenActionsInHome) private var showOpenActionsInHome + @Default(.showQueueInHome) private var showQueueInHome private var navigation: NavigationModel { .shared } @@ -69,13 +70,14 @@ struct HomeView: View { .padding(.horizontal, 15) #endif - QueueView() - .padding(.vertical, 15) - #if os(tvOS) - .padding(.horizontal, 40) - #else - .padding(.horizontal, 15) - #endif + if showQueueInHome { + QueueView() + #if os(tvOS) + .padding(.horizontal, 40) + #else + .padding(.horizontal, 15) + #endif + } if !accounts.current.isNil, showFavoritesInHome { #if os(tvOS) diff --git a/Shared/Home/QueueView.swift b/Shared/Home/QueueView.swift index 1aae75f5..499fa260 100644 --- a/Shared/Home/QueueView.swift +++ b/Shared/Home/QueueView.swift @@ -8,21 +8,24 @@ struct QueueView: View { var body: some View { LazyVStack { if !items.isEmpty { - HStack { - sectionLabel("Next in queue") - Button { - withAnimation { - expanded.toggle() - } - } label: { + Button { + withAnimation { + expanded.toggle() + } + } label: { + HStack { + sectionLabel(label) + Spacer() Label("Show more", systemImage: expanded ? "chevron.up" : "chevron.down") .animation(nil, value: expanded) .foregroundColor(.accentColor) .imageScale(.large) .labelStyle(.iconOnly) + .opacity(items.count > 1 ? 1 : 0) } - .opacity(items.count > 1 ? 1 : 0) } + .disabled(items.count < 2) + ForEach(limitedItems) { item in ContentItemView(item: .init(video: item.video)) .environment(\.listingStyle, .list) @@ -32,6 +35,15 @@ struct QueueView: View { } } } + .padding(.vertical, items.isEmpty ? 0 : 15) + } + + var label: String { + if items.count < 2 { + return "Next in Queue" + } + + return "Next in Queue (\(items.count))" } var limitedItems: [PlayerQueueItem] { diff --git a/Shared/Modifiers/PlayerOverlayModifier.swift b/Shared/Modifiers/PlayerOverlayModifier.swift index e0ac5ea5..4932e27c 100644 --- a/Shared/Modifiers/PlayerOverlayModifier.swift +++ b/Shared/Modifiers/PlayerOverlayModifier.swift @@ -9,6 +9,8 @@ struct PlayerOverlayModifier: ViewModifier { @Environment(\.navigationStyle) private var navigationStyle @Default(.playerButtonShowsControlButtonsWhenMinimized) private var controlsWhenMinimized + @Default(.playerButtonIsExpanded) private var playerButtonIsExpanded + @Default(.playerBarMaxWidth) private var playerBarMaxWidth func body(content: Content) -> some View { content @@ -23,10 +25,20 @@ struct PlayerOverlayModifier: ViewModifier { ControlsBar(fullScreen: .constant(false), expansionState: $expansionState, playerBar: true) .offset(x: expansionState == .mini && !controlsWhenMinimized ? 10 : 0, y: 0) .transition(.opacity) + .frame(maxWidth: maxWidth, alignment: .trailing) + .onAppear { + if playerButtonIsExpanded { + expansionState = .full + } + } } } .animation(.default, value: player.currentItem) } + + var maxWidth: Double { + playerBarMaxWidth == "0" ? .infinity : (Double(playerBarMaxWidth) ?? 600) + } } struct PlayerOverlayModifier_Previews: PreviewProvider { diff --git a/Shared/Settings/BrowsingSettings.swift b/Shared/Settings/BrowsingSettings.swift index 666d2490..5b397c72 100644 --- a/Shared/Settings/BrowsingSettings.swift +++ b/Shared/Settings/BrowsingSettings.swift @@ -17,6 +17,7 @@ struct BrowsingSettings: View { @Default(.timeOnThumbnail) private var timeOnThumbnail @Default(.showHome) private var showHome @Default(.showFavoritesInHome) private var showFavoritesInHome + @Default(.showQueueInHome) private var showQueueInHome @Default(.showOpenActionsInHome) private var showOpenActionsInHome @Default(.showOpenActionsToolbarItem) private var showOpenActionsToolbarItem @Default(.homeHistoryItems) private var homeHistoryItems @@ -24,6 +25,9 @@ struct BrowsingSettings: View { @Default(.playerButtonSingleTapGesture) private var playerButtonSingleTapGesture @Default(.playerButtonDoubleTapGesture) private var playerButtonDoubleTapGesture @Default(.playerButtonShowsControlButtonsWhenMinimized) private var playerButtonShowsControlButtonsWhenMinimized + @Default(.playerButtonIsExpanded) private var playerButtonIsExpanded + @Default(.playerBarMaxWidth) private var playerBarMaxWidth + @Default(.expandChannelDescription) private var expandChannelDescription @ObservedObject private var accounts = AccountsModel.shared @@ -86,6 +90,7 @@ struct BrowsingSettings: View { } #endif Toggle("Show Open Videos quick actions", isOn: $showOpenActionsInHome) + Toggle("Show Next in Queue", isOn: $showQueueInHome) #if os(iOS) HStack { @@ -157,9 +162,21 @@ struct BrowsingSettings: View { #if !os(tvOS) private var playerBarSettings: some View { Section(header: SettingsHeader(text: "Player Bar".localized()), footer: playerBarFooter) { + Toggle("Open expanded", isOn: $playerButtonIsExpanded) Toggle("Always show controls buttons", isOn: $playerButtonShowsControlButtonsWhenMinimized) playerBarGesturePicker("Single tap gesture", selection: $playerButtonSingleTapGesture) playerBarGesturePicker("Double tap gesture", selection: $playerButtonDoubleTapGesture) + HStack { + Text("Maximum width expanded") + Spacer() + TextField("Maximum width expanded", text: $playerBarMaxWidth) + .frame(maxWidth: 100, alignment: .trailing) + .multilineTextAlignment(.trailing) + .labelsHidden() + #if !os(macOS) + .keyboardType(.numberPad) + #endif + } } } @@ -205,6 +222,8 @@ struct BrowsingSettings: View { Toggle("Show anonymous accounts", isOn: $accountPickerDisplaysAnonymousAccounts) } + + Toggle("Open channels with description expanded", isOn: $expandChannelDescription) } }