/* Copyright 2024 New Vector Ltd. Copyright 2015 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ #import "MatrixKit.h" @protocol MXBeaconInfoSummaryProtocol; extern NSString *const URLPreviewDidUpdateNotification; // Custom tags for MXKRoomBubbleCellDataStoring.tag typedef NS_ENUM(NSInteger, RoomBubbleCellDataTag) { RoomBubbleCellDataTagMessage = 0, // Default value used for messages RoomBubbleCellDataTagMembership = 1, // bwi: default value for the room membership changes (status messages) RoomBubbleCellDataTagRoomCreateConfiguration = 2, // bwi: default value for the room configuration (status messages) RoomBubbleCellDataTagRoomCreateWithPredecessor, RoomBubbleCellDataTagKeyVerificationNoDisplay, RoomBubbleCellDataTagKeyVerificationRequestIncomingApproval, RoomBubbleCellDataTagKeyVerificationRequest, RoomBubbleCellDataTagKeyVerificationConclusion, RoomBubbleCellDataTagCall, RoomBubbleCellDataTagGroupCall, RoomBubbleCellDataTagRoomCreationIntro, RoomBubbleCellDataTagPoll, RoomBubbleCellDataTagLocation, RoomBubbleCellDataTagLiveLocation, RoomBubbleCellDataTagVoiceBroadcastRecord, RoomBubbleCellDataTagVoiceBroadcastPlayback, RoomBubbleCellDataTagVoiceBroadcastNoDisplay, RoomBubbleCellDataTagACL, RoomBubbleCellDataTagRoomConfiguration }; /** `RoomBubbleCellData` defines Vector bubble cell data model. */ @interface RoomBubbleCellData : MXKRoomBubbleCellDataWithAppendingMode /** A Boolean value that determines whether this bubble contains the current last message. Used to keep displaying the timestamp of the last message. */ @property(nonatomic) BOOL containsLastMessage; /** Indicate true to display the timestamp of the selected component. */ @property(nonatomic) BOOL showTimestampForSelectedComponent; /** Indicate true to display the timestamp of the selected component on the left if possible (YES by default). */ @property(nonatomic) BOOL displayTimestampForSelectedComponentOnLeftWhenPossible; /** The event id of the current selected event inside the bubble. Default is nil. */ @property(nonatomic) NSString *selectedEventId; /** The index of the oldest component (component with a timestamp, and an actual display). NSNotFound by default. */ @property(nonatomic, readonly) NSInteger oldestComponentIndex; /** The index of the most recent component (component with a timestamp, and an actual display). NSNotFound by default. */ @property(nonatomic, readonly) NSInteger mostRecentComponentIndex; /** The index of the current selected component. NSNotFound by default. */ @property(nonatomic, readonly) NSInteger selectedComponentIndex; /** Return additional content height (read receipts, reactions). */ @property(nonatomic, readonly) CGFloat additionalContentHeight; /** MXKeyVerification object associated to key verification event when using key verification by direct message. */ @property(nonatomic, strong) MXKeyVerification *keyVerification; /** Indicate if there is a pending operation that updates `keyVerification` property. */ @property(nonatomic) BOOL isKeyVerificationOperationPending; @property(nonatomic, strong) id beaconInfoSummary; /** Index of the component which needs a sent tick displayed. -1 if none. */ @property(nonatomic) NSInteger componentIndexOfSentMessageTick; @property(nonatomic, strong) NSString *voiceBroadcastState; /** Indicate that both the text message layout and any additional content height are no longer valid and should be recomputed before presentation in a bubble cell. This could be due to a content change, or the available space for the cell has been updated. This is a convenience method that calls `invalidateTextLayout` and `setNeedsUpdateAdditionalContentHeight` together. */ - (void)invalidateLayout; /** Indicate to update additional content height. */ - (void)setNeedsUpdateAdditionalContentHeight; /** Update additional content height if needed. */ - (void)updateAdditionalContentHeightIfNeeded; /** The index of the first visible component. NSNotFound by default. */ - (NSInteger)firstVisibleComponentIndex; /** Returns the bubble component for the specified event ID, but only if that component has detected a link in the event's body. Otherwise returns `nil`. This will also return `nil` If URL previews have been disabled by the user. */ - (MXKRoomBubbleComponent *)bubbleComponentWithLinkForEventId:(NSString *)eventId; #pragma mark - Show all reactions - (BOOL)showAllReactionsForEvent:(NSString*)eventId; - (void)setShowAllReactions:(BOOL)showAllReactions forEvent:(NSString*)eventId; #pragma mark - Accessibility - (NSString*)accessibilityLabel; @end