// // TUIChatConfig_Classic.h // TUIChat // // Created by Tencent on 2024/7/16. // Copyright © 2024 Tencent. All rights reserved. #import #import "UIAlertController+TUICustomStyle.h" #import "TUIChatShortcutMenuView.h" #import "TUIInputMoreCellData.h" #import #import #import "TUIChatConfig.h" NS_ASSUME_NONNULL_BEGIN @class TUIMessageCellData; typedef NS_ENUM(NSInteger, TUIAvatarStyle_Classic) { TUIAvatarStyleRectangle, TUIAvatarStyleCircle, TUIAvatarStyleRoundedRectangle, }; typedef NS_OPTIONS(NSInteger, TUIChatItemWhenLongPressMessage_Classic) { TUIChatItemWhenLongPressMessage_Classic_None = 0, TUIChatItemWhenLongPressMessage_Classic_Reply = 1 << 0, TUIChatItemWhenLongPressMessage_Classic_EmojiReaction = 1 << 1, TUIChatItemWhenLongPressMessage_Classic_Quote = 1 << 2, TUIChatItemWhenLongPressMessage_Classic_Pin = 1 << 3, TUIChatItemWhenLongPressMessage_Classic_Recall = 1 << 4, TUIChatItemWhenLongPressMessage_Classic_Translate = 1 << 5, TUIChatItemWhenLongPressMessage_Classic_Convert = 1 << 6, TUIChatItemWhenLongPressMessage_Classic_Forward = 1 << 7, TUIChatItemWhenLongPressMessage_Classic_Select = 1 << 8, TUIChatItemWhenLongPressMessage_Classic_Copy = 1 << 9, TUIChatItemWhenLongPressMessage_Classic_Delete = 1 << 10, }; @protocol TUIChatConfigDelegate_Classic /** * Tells the delegate a user's avatar in the chat list is clicked. * Returning YES indicates this event has been intercepted, and Chat will not process it further. * Returning NO indicates this event is not intercepted, and Chat will continue to process it. */ - (BOOL)onUserAvatarClicked:(UIView *)view messageCellData:(TUIMessageCellData *)celldata; /** * Tells the delegate a user's avatar in the chat list is long pressed. * Returning YES indicates that this event has been intercepted, and Chat will not process it further. * Returning NO indicates that this event is not intercepted, and Chat will continue to process it. */ - (BOOL)onUserAvatarLongPressed:(UIView *)view messageCellData:(TUIMessageCellData *)celldata; /** * Tells the delegate a message in the chat list is clicked. * Returning YES indicates that this event has been intercepted, and Chat will not process it further. * Returning NO indicates that this event is not intercepted, and Chat will continue to process it. */ - (BOOL)onMessageClicked:(UIView *)view messageCellData:(TUIMessageCellData *)celldata; /** * Tells the delegate a message in the chat list is long pressed. * Returning YES indicates that this event has been intercepted, and Chat will not process it further. * Returning NO indicates that this event is not intercepted, and Chat will continue to process it. */ - (BOOL)onMessageLongPressed:(UIView *)view messageCellData:(TUIMessageCellData *)celldata; @end @interface TUIChatConfig_Classic : NSObject + (TUIChatConfig_Classic *)sharedConfig; /** * The object that acts as the delegate of the TUIChatMessageConfig_Minimalist. */ @property (nonatomic, weak) id delegate; /** * Customize the backgroud color of message list interface. * This configuration takes effect in all message list interfaces. */ @property (nonatomic, strong) UIColor *backgroudColor; /** * Customize the backgroud image of message list interface. * This configuration takes effect in all message list interfaces. */ @property (nonatomic, strong) UIImage *backgroudImage; /** * Customize the style of avatar. * The default value is TUIAvatarStyleCircle. * This configuration takes effect in all avatars. */ @property (nonatomic, assign) TUIAvatarStyle_Classic avatarStyle; /** * Customize the corner radius of the avatar. * This configuration takes effect in all avatars. */ @property (nonatomic, assign) CGFloat avatarCornerRadius; /** * Display the group avatar in the nine-square grid style. * The default value is YES. * This configuration takes effect in all groups. */ @property (nonatomic, assign) BOOL enableGroupGridAvatar; /** * Default avatar image. * This configuration takes effect in all avatars. */ @property (nonatomic, strong) UIImage *defaultAvatarImage; /** * Enable the display "Alice is typing..." on one-to-one chat interface. * The default value is YES. * This configuration takes effect in all one-to-one chat message list interfaces. */ @property (nonatomic, assign) BOOL enableTypingIndicator; /** * When sending a message, set this flag to require message read receipt. * The default value is NO. * This configuration takes effect in all chat message list interfaces. */ @property (nonatomic, assign) BOOL isMessageReadReceiptNeeded; /** * Hide the "Video Call" button in the message list header. * The default value is NO. */ @property (nonatomic, assign) BOOL hideVideoCallButton; /** * Hide the "Audio Call" button in the message list header. * The default value is NO. */ @property (nonatomic, assign) BOOL hideAudioCallButton; /** * Turn on audio and video call floating windows, * The default value is YES. */ @property (nonatomic, assign) BOOL enableFloatWindowForCall; /** * Enable multi-terminal login function for audio and video calls * The default value is NO. */ @property (nonatomic, assign) BOOL enableMultiDeviceForCall; /** * Set this parameter when the sender sends a message, and the receiver will not update the unread count after receiving the message. * The default value is NO. */ @property (nonatomic, assign) BOOL isExcludedFromUnreadCount; /** * Set this parameter when the sender sends a message, and the receiver will not update the last message of the conversation after receiving the message. * The default value is NO. */ @property (nonatomic, assign) BOOL isExcludedFromLastMessage; /** * Time interval within which a message can be recalled after being sent. * The default value is 120 seconds. * If you want to adjust this configuration, please modify the setting on Chat Console synchronously: https://trtc.io/document/34419?platform=web&product=chat&menulabel=uikit#message-recall-settings */ @property (nonatomic, assign) NSUInteger timeIntervalForAllowedMessageRecall; /** * Maximum audio recording duration, no more than 60s. * The default value is 60 seconds. */ @property (nonatomic, assign) CGFloat maxAudioRecordDuration; /** * Maximum video recording duration, no more than 15s. * The default value is 15 seconds. */ @property (nonatomic, assign) CGFloat maxVideoRecordDuration; /** * Enable custom ringtone. * This config takes effect only for Android devices. */ @property (nonatomic, assign) BOOL enableAndroidCustomRing; /** * Hide the items in the pop-up menu when user presses the message. */ + (void)hideItemsWhenLongPressMessage:(TUIChatItemWhenLongPressMessage_Classic)items; /** * Call this method to use speakers instead of handsets by default when playing voice messages. */ + (void)setPlayingSoundMessageViaSpeakerByDefault; /** * Add a custom view at the top of the chat interface. * This view will be displayed at the top of the message list and will not slide up. */ + (void)setCustomTopView:(UIView *)view; /** * Register custom message. * - Parameters: * - businessID: Customized message‘s businessID, which is unique. * - cellName: Customized message's MessagCell class name. * - cellDataName: Customized message's MessagCellData class name. */ - (void)registerCustomMessage:(NSString *)businessID messageCellClassName:(NSString *)cellName messageCellDataClassName:(NSString *)cellDataName; @end @interface TUIChatConfig_Classic (MessageStyle) /** * The color of send text message. */ @property(nonatomic, assign) UIColor *sendTextMessageColor; /** * The font of send text message. */ @property(nonatomic, assign) UIFont *sendTextMessageFont; /** * The color of receive text message. */ @property(nonatomic, assign) UIColor *receiveTextMessageColor; /** * The font of receive text message. */ @property(nonatomic, assign) UIFont *receiveTextMessageFont; /** * The text color of system message. */ @property (nonatomic, strong) UIColor *systemMessageTextColor; /** * The font of system message. */ @property (nonatomic, strong) UIFont *systemMessageTextFont; /** * The background color of system message. */ @property (nonatomic, strong) UIColor *systemMessageBackgroundColor; /** * The font of user's nickname of received messages. */ @property (nonatomic, strong) UIFont *receiveNicknameFont; /** * The color of user's nickname of received messages. */ @property (nonatomic, strong) UIColor *receiveNicknameColor; @end @interface TUIChatConfig_Classic (MessageLayout) /** * Text message cell layout of my sent message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *sendTextMessageLayout; /** * Text message cell layout of my received message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *receiveTextMessageLayout; /** * Image message cell layout of my sent message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *sendImageMessageLayout; /** * Image message cell layout of my received message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *receiveImageMessageLayout; /** * Voice message cell layout of my sent message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *sendVoiceMessageLayout; /** * Voice message cell layout of my received message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *receiveVoiceMessageLayout; /** * Video message cell layout of my sent message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *sendVideoMessageLayout; /** * Video message cell layout of my received message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *receiveVideoMessageLayout; /** * Other message cell layout of my sent message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *sendMessageLayout; /** * Other message cell layout of my received message. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *receiveMessageLayout; /** * System message cell layout. */ @property(nonatomic, assign, readonly) TUIMessageCellLayout *systemMessageLayout; @end @interface TUIChatConfig_Classic (MessageBubble) /** * Enable the message display in the bubble style. * The default value is YES. */ @property(nonatomic, assign) BOOL enableMessageBubbleStyle; /** * Set the background image of the sent message bubble in consecutive message. */ @property (nonatomic, strong) UIImage *sendBubbleBackgroundImage; /** * Set the background image of the sent message bubble in highlight status. */ @property (nonatomic, strong) UIImage *sendHighlightBubbleBackgroundImage; /** * Set the light background image when the sent message bubble needs to flicker. */ @property (nonatomic, strong) UIImage *sendAnimateLightBubbleBackgroundImage; /** * Set the dark background image when the sent message bubble needs to flicker. */ @property (nonatomic, strong) UIImage *sendAnimateDarkBubbleBackgroundImage; /** * Set the background image of the sent error message bubble. */ @property (nonatomic, strong) UIImage *sendErrorBubbleBackgroundImage; /** * Set the background image of the received message bubble in consecutive message. */ @property (nonatomic, strong) UIImage *receiveBubbleBackgroundImage; /** * Set the background image of the received message bubble in highlight status. */ @property (nonatomic, strong) UIImage *receiveHighlightBubbleBackgroundImage; /** * Set the light background image when the received message bubble needs to flicker. */ @property (nonatomic, strong) UIImage *receiveAnimateLightBubbleBackgroundImage; /** * Set the dark background image when the received message bubble needs to flicker. */ @property (nonatomic, strong) UIImage *receiveAnimateDarkBubbleBackgroundImage; /** * Set the background image of the received error message bubble. */ @property (nonatomic, strong) UIImage *receiveErrorBubbleBackgroundImage; @end @interface TUIChatConfig_Classic (InputBar) /** * DataSource for inputBar. */ @property (nonatomic, weak) id inputBarDataSource; /** * DataSource for shortcutView above inputBar. */ @property (nonatomic, weak) id shortcutViewDataSource; /** * Show the input bar in the message list interface. * The default value is YES. */ @property(nonatomic, assign) BOOL showInputBar; /** * Hide items in more menu. */ + (void)hideItemsInMoreMenu:(TUIChatInputBarMoreMenuItem)items; /** * Add sticker group. */ - (void)addStickerGroup:(TUIFaceGroup *)group; @end NS_ASSUME_NONNULL_END