Files
stickercloner/StickerCloner/StickerCloner MessagesExtension/MessagesViewController.swift
T

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
}
}