Audio Content View
Overview
The LMChatAudioContentView is a subclass of LMChatMessageContentView responsible for displaying audio content within chat messages. It supports both audio files and voice notes, providing a customizable interface for audio playback and management.
File Location:
LMChatAudioContentView.swift
Functionality
Protocols Implemented
- LMChatAudioProtocol: Manages audio playback interactions.
UI Components
audioPreviewContainerStackView: A vertical LMStackView that contains the audio preview elements.cancelRetryContainerStackView: A LMStackView for cancel and retry buttons (inherited from superclass).loaderView: ALMAttachmentLoaderViewto display loading state (inherited from superclass).retryView: ALMChatAttachmentUploadRetryViewto display retry option for failed messages (inherited from superclass).
Properties
onShowMoreCallback: An optional closure called when the user taps to show more audio attachments.audioDelegate: A weak reference to an object conforming toLMChatAudioProtocol.
Methods
setDataView(_:index:): Populates the view with data from aLMChatMessageCell.ContentModel.attachmentView(_:delegate:index:): Configures the view based on the type of audio attachment.audioPreview(_:delegate:index:): Sets up the preview for audio file attachments.voiceNotePreview(_:delegate:index:): Sets up the preview for voice note attachments.createAudioPreview(with:delegate:index:): Creates a voice note preview view.prepareToResuse(): Prepares the view for reuse in a table or collection view.resetAudio(): Resets the audio playback state of all audio previews.seekSlider(to:url:): Updates the seeker position for a specific audio URL.
Customization
CustomAudioContentView.swift
class CustomAudioContentView: LMChatAudioContentView {
override func setupViews() {
super.setupViews()
// Add custom views or modify existing ones
}
override func attachmentView(_ data: LMChatMessageCell.ContentModel, delegate: LMChatAudioProtocol?, index: IndexPath) {
super.attachmentView(data, delegate: delegate, index: index)
// Customize attachment view behavior
}
}
AppDelegate.swift
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
LMUIComponents.shared.audioContentView = CustomAudioContentView.self
// ...
return true
}