jellyflood/Swiftfin tvOS/App/PreferenceUIHosting 2/PreferenceUIHostingControll...

136 lines
4.2 KiB
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2025 Jellyfin & Jellyfin Contributors
//
// TODO: IMPLEMENT BUTTON OVERRIDES IN `PreferencesView` PACKAGE
// import SwiftUI
// import UIKit
//
//// MARK: PreferenceUIHostingController
//
// class PreferenceUIHostingController: UIHostingController<AnyView> {
//
// init<V: View>(@ViewBuilder wrappedView: @escaping () -> V) {
// let box = Box()
// super.init(rootView: AnyView(
// wrappedView()
// .onPreferenceChange(ViewPreferenceKey.self) {
// box.value?._viewPreference = $0
// }
// .onPreferenceChange(DidPressMenuPreferenceKey.self) {
// box.value?.didPressMenuAction = $0
// }
// .onPreferenceChange(DidPressSelectPreferenceKey.self) {
// box.value?.didPressSelectAction = $0
// }
// ))
// box.value = self
//
// addButtonPressRecognizer(pressType: .menu, action: #selector(didPressMenuSelector))
// addButtonPressRecognizer(pressType: .select, action: #selector(didPressSelectSelector))
// }
//
// @objc
// dynamic required init?(coder aDecoder: NSCoder) {
// super.init(coder: aDecoder)
// super.modalPresentationStyle = .fullScreen
// }
//
// private class Box {
// weak var value: PreferenceUIHostingController?
// init() {}
// }
//
// public var _viewPreference: UIUserInterfaceStyle = .unspecified {
// didSet {
// overrideUserInterfaceStyle = _viewPreference
// }
// }
//
// var didPressMenuAction: ActionHolder = .init(action: {})
// var didPressSelectAction: ActionHolder = .init(action: {})
//
// private func addButtonPressRecognizer(pressType: UIPress.PressType, action: Selector) {
// let pressRecognizer = UITapGestureRecognizer()
// pressRecognizer.addTarget(self, action: action)
// pressRecognizer.allowedPressTypes = [NSNumber(value: pressType.rawValue)]
// view.addGestureRecognizer(pressRecognizer)
// }
//
// @objc
// private func didPressMenuSelector() {
// DispatchQueue.main.async {
// self.didPressMenuAction.action()
// }
// }
//
// @objc
// private func didPressSelectSelector() {
// DispatchQueue.main.async {
// self.didPressSelectAction.action()
// }
// }
// }
//
// struct ActionHolder: Equatable {
//
// static func == (lhs: ActionHolder, rhs: ActionHolder) -> Bool {
// lhs.uuid == rhs.uuid
// }
//
// var action: () -> Void
// let uuid = UUID().uuidString
// }
//
//// MARK: Preference Keys
//
// struct ViewPreferenceKey: PreferenceKey {
// typealias Value = UIUserInterfaceStyle
//
// static var defaultValue: UIUserInterfaceStyle = .unspecified
//
// static func reduce(value: inout UIUserInterfaceStyle, nextValue: () -> UIUserInterfaceStyle) {
// value = nextValue()
// }
// }
//
// struct DidPressMenuPreferenceKey: PreferenceKey {
//
// static var defaultValue: ActionHolder = .init(action: {})
//
// static func reduce(value: inout ActionHolder, nextValue: () -> ActionHolder) {
// value = nextValue()
// }
// }
//
// struct DidPressSelectPreferenceKey: PreferenceKey {
//
// static var defaultValue: ActionHolder = .init(action: {})
//
// static func reduce(value: inout ActionHolder, nextValue: () -> ActionHolder) {
// value = nextValue()
// }
// }
//
//// MARK: Preference Key View Extension
//
// extension View {
//
// func overrideViewPreference(_ viewPreference: UIUserInterfaceStyle) -> some View {
// preference(key: ViewPreferenceKey.self, value: viewPreference)
// }
//
// func onMenuPressed(_ action: @escaping () -> Void) -> some View {
// preference(key: DidPressMenuPreferenceKey.self, value: ActionHolder(action: action))
// }
//
// func onSelectPressed(_ action: @escaping () -> Void) -> some View {
// preference(key: DidPressSelectPreferenceKey.self, value: ActionHolder(action: action))
// }
// }