Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/Signal/src/ViewControllers/ThreadSettings/AvatarViewPresentationContextProvider.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import SignalServiceKit
import SignalUI

protocol AvatarViewPresentationContextProvider: MediaPresentationContextProvider {
    var conversationAvatarView: ConversationAvatarView? { get }
}

extension AvatarViewPresentationContextProvider {
    func mediaPresentationContext(item: Media, in coordinateSpace: UICoordinateSpace) -> MediaPresentationContext? {
        guard let conversationAvatarView else { return nil }
        let mediaView: UIView
        let mediaViewShape: MediaViewShape
        switch item {
        case .gallery:
            owsFailDebug("Unexpected item")
            return nil
        case .image:
            mediaView = conversationAvatarView
            switch conversationAvatarView.configuration.shape {
            case .rectangular:
                mediaViewShape = .rectangle(0)
            case .circular:
                mediaViewShape = .circle
            }
        }

        guard let mediaSuperview = mediaView.superview else {
            owsFailDebug("mediaSuperview was unexpectedly nil")
            return nil
        }

        let presentationFrame = coordinateSpace.convert(mediaView.frame, from: mediaSuperview)

        return MediaPresentationContext(
            mediaView: mediaView,
            presentationFrame: presentationFrame,
            mediaViewShape: mediaViewShape,
        )
    }
}