86d9659056
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
83 lines
2.6 KiB
Swift
83 lines
2.6 KiB
Swift
import Messages
|
|
import SwiftUI
|
|
import UIKit
|
|
|
|
final class MessagesViewController: MSMessagesAppViewController {
|
|
private let stickerBrowser = StickerBrowserViewController()
|
|
private var addPackHostingController: UIHostingController<AddPackView>?
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
addStickerBrowser()
|
|
stickerBrowser.reloadStickers()
|
|
}
|
|
|
|
override func willBecomeActive(with conversation: MSConversation) {
|
|
stickerBrowser.reloadStickers()
|
|
|
|
// Prompt user to add a pack on first launch
|
|
if StickerStore.shared.savedPacks.isEmpty {
|
|
requestPresentationStyle(.expanded)
|
|
}
|
|
}
|
|
|
|
// MARK: - Presentation style transitions
|
|
|
|
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
|
|
removeAddPackView()
|
|
}
|
|
|
|
override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
|
|
switch presentationStyle {
|
|
case .expanded:
|
|
showAddPackView()
|
|
case .compact:
|
|
stickerBrowser.reloadStickers()
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|
|
// MARK: - Child view controllers
|
|
|
|
private func addStickerBrowser() {
|
|
addChild(stickerBrowser)
|
|
stickerBrowser.view.translatesAutoresizingMaskIntoConstraints = false
|
|
view.addSubview(stickerBrowser.view)
|
|
NSLayoutConstraint.activate([
|
|
stickerBrowser.view.topAnchor.constraint(equalTo: view.topAnchor),
|
|
stickerBrowser.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
|
stickerBrowser.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
|
stickerBrowser.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
|
])
|
|
stickerBrowser.didMove(toParent: self)
|
|
}
|
|
|
|
private func showAddPackView() {
|
|
let addPackView = AddPackView { [weak self] in
|
|
self?.stickerBrowser.reloadStickers()
|
|
}
|
|
let hostingController = UIHostingController(rootView: addPackView)
|
|
addPackHostingController = hostingController
|
|
|
|
addChild(hostingController)
|
|
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
|
|
view.addSubview(hostingController.view)
|
|
NSLayoutConstraint.activate([
|
|
hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
|
hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
|
hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
|
hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
|
])
|
|
hostingController.didMove(toParent: self)
|
|
}
|
|
|
|
private func removeAddPackView() {
|
|
guard let hostingController = addPackHostingController else { return }
|
|
hostingController.willMove(toParent: nil)
|
|
hostingController.view.removeFromSuperview()
|
|
hostingController.removeFromParent()
|
|
addPackHostingController = nil
|
|
}
|
|
}
|