Signal-iOS/Signal/ConversationView/CVBackgroundContainer.swift
Jordan Rose b0de59f2e2 Remove required from every init that is not dynamically dispatched
This included:
- Removing unavailable inits wholesale if no longer `required`
- Marking a few classes `final` so they could continue using
  `Self(...)` rather than `OWSWhatever(...)`
2024-04-01 15:27:20 -07:00

97 lines
2.5 KiB
Swift

//
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalCoreKit
import SignalUI
public protocol CVBackgroundContainerDelegate: AnyObject {
func updateScrollingContent()
}
// MARK: -
public class CVBackgroundContainer: ManualLayoutViewWithLayer {
private enum ZPositioning: CGFloat {
case wallpaperContent = 0
case wallpaperDimming = 1
case selectionHighlight = 2
}
fileprivate var wallpaperView: WallpaperView?
public weak var delegate: CVBackgroundContainerDelegate?
public init() {
super.init(name: "CVBackgroundContainer")
self.shouldDeactivateConstraints = false
self.isUserInteractionEnabled = false
// Render all background views behind the collection view.
self.layer.zPosition = -1
}
public func set(wallpaperView: WallpaperView?) {
self.wallpaperView?.contentView?.removeFromSuperview()
self.wallpaperView?.dimmingView?.removeFromSuperview()
self.wallpaperView = wallpaperView
if let wallpaperView = wallpaperView {
self.backgroundColor = .clear
if let contentView = wallpaperView.contentView {
addSubview(contentView)
contentView.layer.zPosition = ZPositioning.wallpaperContent.rawValue
}
if let dimmingView = wallpaperView.dimmingView {
addSubview(dimmingView)
dimmingView.layer.zPosition = ZPositioning.wallpaperDimming.rawValue
}
setNeedsLayout()
} else {
self.backgroundColor = Theme.backgroundColor
}
}
public override func layoutSubviews() {
AssertIsOnMainThread()
super.layoutSubviews()
wallpaperView?.contentView?.frame = bounds
wallpaperView?.dimmingView?.frame = bounds
delegate?.updateScrollingContent()
}
}
// MARK: -
extension CVBackgroundContainer: WallpaperBlurProvider {
public var wallpaperBlurState: WallpaperBlurState? {
wallpaperView?.blurProvider?.wallpaperBlurState
}
}
// MARK: -
extension ConversationViewController: CVBackgroundContainerDelegate {
public func updateScrollingContent() {
AssertIsOnMainThread()
UIView.performWithoutAnimation {
for cell in collectionView.visibleCells {
guard let cell = cell as? CVCell else {
owsFailDebug("Invalid cell.")
continue
}
cell.updateScrollingContent()
}
}
}
}