mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.6 KiB
Swift
107 lines
3.6 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import UIKit
|
|
import SignalUtilitiesKit
|
|
import SessionUIKit
|
|
|
|
class MediaGalleryNavigationController: UINavigationController {
|
|
// HACK: Though we don't have an input accessory view, the VC we are presented above (ConversationVC) does.
|
|
// If the app is backgrounded and then foregrounded, when OWSWindowManager calls mainWindow.makeKeyAndVisible
|
|
// the ConversationVC's inputAccessoryView will appear *above* us unless we'd previously become first responder.
|
|
override public var canBecomeFirstResponder: Bool {
|
|
return true
|
|
}
|
|
|
|
// MARK: - UI
|
|
|
|
private lazy var backgroundView: UIView = {
|
|
let result: UIView = UIView()
|
|
result.themeBackgroundColor = .newConversation_background
|
|
|
|
return result
|
|
}()
|
|
|
|
// MARK: - View Lifecycle
|
|
|
|
override var preferredStatusBarStyle: UIStatusBarStyle { return ThemeManager.currentTheme.statusBarStyle }
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
view.themeBackgroundColor = .newConversation_background
|
|
|
|
// Insert a view to ensure the nav bar color goes to the top of the screen
|
|
relayoutBackgroundView()
|
|
}
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
super.viewDidAppear(animated)
|
|
|
|
// If the user's device is already rotated, try to respect that by rotating to landscape now
|
|
UIViewController.attemptRotationToDeviceOrientation()
|
|
}
|
|
|
|
// MARK: - Orientation
|
|
|
|
public override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
|
if UIDevice.current.isIPad {
|
|
return .all
|
|
}
|
|
|
|
return .allButUpsideDown
|
|
}
|
|
|
|
// MARK: - Functions
|
|
|
|
private func relayoutBackgroundView() {
|
|
guard !backgroundView.isHidden else {
|
|
backgroundView.removeFromSuperview()
|
|
return
|
|
}
|
|
|
|
view.insertSubview(backgroundView, belowSubview: navigationBar)
|
|
|
|
backgroundView.pin(.top, to: .top, of: view)
|
|
backgroundView.pin(.left, to: .left, of: navigationBar)
|
|
backgroundView.pin(.right, to: .right, of: navigationBar)
|
|
backgroundView.pin(.bottom, to: .bottom, of: navigationBar)
|
|
}
|
|
|
|
override func setNavigationBarHidden(_ hidden: Bool, animated: Bool) {
|
|
super.setNavigationBarHidden(hidden, animated: animated)
|
|
|
|
backgroundView.isHidden = hidden
|
|
relayoutBackgroundView()
|
|
}
|
|
}
|
|
|
|
// MARK: - SwiftUI
|
|
import SwiftUI
|
|
|
|
struct MediaGalleryNavigationController_SwiftUI: UIViewControllerRepresentable {
|
|
typealias UIViewControllerType = MediaGalleryNavigationController
|
|
|
|
public var viewControllers: [UIViewController]
|
|
private let transitioningDelegate: UIViewControllerTransitioningDelegate?
|
|
|
|
public init(
|
|
viewControllers: [UIViewController],
|
|
transitioningDelegate: UIViewControllerTransitioningDelegate? = nil
|
|
) {
|
|
self.viewControllers = viewControllers
|
|
self.transitioningDelegate = transitioningDelegate
|
|
}
|
|
|
|
func makeUIViewController(context: Context) -> MediaGalleryNavigationController {
|
|
let mediaGalleryNavigationController = MediaGalleryNavigationController()
|
|
mediaGalleryNavigationController.modalPresentationStyle = .fullScreen
|
|
mediaGalleryNavigationController.transitioningDelegate = transitioningDelegate
|
|
|
|
return mediaGalleryNavigationController
|
|
}
|
|
|
|
func updateUIViewController(_ mediaGalleryNavigationController: MediaGalleryNavigationController, context: Context) {
|
|
mediaGalleryNavigationController.viewControllers = viewControllers
|
|
}
|
|
}
|