- tvOS: Allow account picker by long pressing channels button in subscription view.

This commit is contained in:
Hiren Patel 2024-06-16 23:21:49 -04:00
parent 46725bf4d9
commit b626f50adc

View File

@ -11,6 +11,7 @@ struct FeedView: View {
#if os(tvOS)
@Default(.subscriptionsListingStyle) private var subscriptionsListingStyle
@StateObject private var accountsModel = AccountsViewModel()
#endif
var videos: [ContentItem] {
@ -78,6 +79,23 @@ struct FeedView: View {
}
#if os(tvOS)
var accountsPicker: some View {
ForEach(accountsModel.sortedAccounts.filter{ $0.anonymous == false }) { account in
Button(action: {
AccountsModel.shared.setCurrent(account)
}) {
HStack {
Text("\(account.description) (\(account.instance.app.rawValue))")
if account == accountsModel.currentAccount {
Image(systemName: "checkmark")
}
}
}
.buttonStyle(PlainButtonStyle())
}
}
var feedChannelsView: some View {
ScrollViewReader { proxy in
VStack {
@ -198,19 +216,23 @@ struct FeedView: View {
var header: some View {
HStack(spacing: 16) {
#if os(tvOS)
Button(action: {
withAnimation {
self.feedChannelsViewVisible = true
self.focusedChannel = selectedChannel?.id ?? "all"
}
}) {
if #available(tvOS 17.0, *) {
Menu {
accountsPicker
} label: {
Label("Channels", systemImage: "filemenu.and.selection")
.labelStyle(.iconOnly)
.imageScale(.small)
.font(.caption)
} primaryAction: {
withAnimation {
self.feedChannelsViewVisible = true
self.focusedChannel = selectedChannel?.id ?? "all"
}
}
.opacity(feedChannelsViewVisible ? 0 : 1)
.frame(minWidth: feedChannelsViewVisible ? 0 : nil, maxWidth: feedChannelsViewVisible ? 0 : nil)
}
channelHeaderView
if selectedChannel == nil {
Spacer()