Path: blob/main/SignalUI/Stickers/StickerPickerKeyboard.swift
1 views
//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
public import SignalServiceKit
// MARK: - StickerKeyboard
public protocol StickerKeyboardDelegate: AnyObject {
func stickerKeyboardDidRequestPresentManageStickersView(_ stickerKeyboard: StickerKeyboard)
func stickerKeyboard(_: StickerKeyboard, didSelect stickerInfo: StickerInfo)
}
public class StickerKeyboard: CustomKeyboard {
public weak var delegate: StickerKeyboardDelegate?
private lazy var stickerPickerView = StickerPickerView(delegate: self)
public init(delegate: StickerKeyboardDelegate?) {
self.delegate = delegate
super.init()
backgroundColor = if #available(iOS 26, *) { .clear } else { .Signal.background }
// Match rounded corners of the keyboard backdrop view.
if #available(iOS 26, *) {
contentView.clipsToBounds = true
contentView.cornerConfiguration = .uniformTopRadius(.fixed(26))
}
// Need to set horizontal margins explicitly because they can't be inherited from the parent.
let hMargin = OWSTableViewController2.cellHInnerMargin
stickerPickerView.directionalLayoutMargins = .init(margin: hMargin)
stickerPickerView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(stickerPickerView)
NSLayoutConstraint.activate([
stickerPickerView.topAnchor.constraint(equalTo: contentView.topAnchor),
stickerPickerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
stickerPickerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
stickerPickerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
}
public required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override public func willPresent() {
super.willPresent()
stickerPickerView.willBePresented()
}
override public func wasPresented() {
super.wasPresented()
stickerPickerView.wasPresented()
}
}
// MARK: StickerPacksToolbarDelegate
extension StickerKeyboard: StickerPickerViewDelegate {
func presentManageStickersView(for stickerPickerView: StickerPickerView) {
delegate?.stickerKeyboardDidRequestPresentManageStickersView(self)
}
public func didSelectSticker(_ stickerInfo: StickerInfo) {
delegate?.stickerKeyboard(self, didSelect: stickerInfo)
}
}