July 27th, 2023 - 6.0.0-beta3
I hope you're interested in our latest major release - v6.0.0-beta3! We're currently in the process of preparing migration guides and updating all of our
documentation, but in the meantime, you can look into what we plan to release in v6 of Android Chat.
If you want to learn more about these changes and our decisions, check out our Android Chat v6 Blog Post.
Common changes for all artifacts
⬆️ Improved
- Added baseline profiles to compose and clients modules for improving performance #4610
✅ Added
- Count for read messages. #4678
stream-chat-android-client
🐞 Fixed
- Fixing unread messages count for channels. #4499
- Fix reconnection socket behavior. #4821
- Fixed
QueryChannelRequest.withWatchers
to makewatchers
accessible in response. #4848
⬆️ Improved
- Changes in messages that are quoted now reflect in all messages, not only the original message.#4646
✅ Added
- Added the string extension function
createResizedStreamCdnImageUrl()
which resizes images hosted on Stream's CDN by adding the necessary query parameters to the URL. #4600 - Added the string extension function
getStreamCdnHostedImageDimensions()
used to extract original image dimensions from URLs of images hosted on Stream's CDN which contain the original width and height parameters. Added a new class calledStreamCdnOriginalImageDimensions
which stores the original height and width data. #4600 - Added classes
StreamCdnCropImageMode
andStreamCdnResizeImageMode
used for modifying Stream CDN image resize requests. #4600 - Added
ChatClient.clearPersistence()
to be able to clear local data even if the user is not connected. #4796 - Added new
hideHistory
flag intoChatClient.addMembers
function. This flag can be used to hide the channel's history from the added member. #4817 - Added new
hideHistory
flag intoChannelClient.addMembers
function. This flag can be used to hide the channel's history from the added member. #4817 - Added
ChatClient.inviteMembers
to invite members to an existing channel. #4816 - Added
ChannelClient.inviteMembers
to invite members to an existing channel. #4816 - Added
ChannelUserBannedEvent.shadow
property to know if the user is shadow-banned or standard banned. #4836 - Added
AttachmentsVerifier
to verify if the uploaded attachments are valid. #4852 - Added
ChannelClient.fetchCurrentUser
to fetch current user from backend. #4860 - Added
FetchCurrentUserListener
interface used to perform actions as side effects when theChatCliet.fetchCurrentUser()
method is used to fetch the current user from the backend. #4860 - Added
AudioPlayer
as a part ofasync-voice-messaging
feature. #4828
⚠️ Changed
- Changed
newMessageIntent
lambda's signature ofNotificationHandlerFactory.createNotificationHandler()
. It receives the wholeMessage
/Channel
entity to help you create a more complex navigation intent. - Moved
ChatClient.dismissChannelNotifications()
intoChatClient
class. #4692 - Changed
ConnectionState
from interface to Sealed Class. The newConnectionState.Connected
class contains theuser
that open the WebSocket connection. #4808 - Renamed
InitializationState.RUNNING
toInitializationState.INITIALIZING
. #4827 - Changed return type of
ChatClient.disconnectSocket()
toCall<Unit>
. #4829 - Changed return type of
ChatClient.reconnectSocket()
toCall<Unit>
. #4829
❌ Removed
- Removed
ChatClient.setDevice()
method. #4692
stream-chat-android-offline
🐞 Fixed
- Fixed pagination problems related for quoted messages #4638
- Fixed message gaps in message list view when using offline support. #4633
stream-chat-android-state
🐞 Fixed
- Fixed
SyncManager
not emitting missed events after getting online. #4862
⬆️ Improved
- The
ChannelStateLogic
keeps members updated after ban/unban events are received. #4836
stream-chat-android-ui-common
⬆️ Improved
- Send
TypingStopEvent
whenever the message is sent or the messageComposer contains an empty text message. #4904
✅ Added
- Added
showDateSeparatorInEmptyThread: Boolean
toMessageListController
. It is used to regulate whether date separators appear in empty threads. #4742 - Added
StreamMediaRecorder
as a part ofasync-voice-messaging
feature. #4828 - Added
AudioRecordingController
as a part ofasync-voice-messaging
feature. #4828
stream-chat-android-ui-components
🐞 Fixed
- Fixed edit messages and reply messages with unsupported attachments. #4757
- Fixed
ChannelViewHolder
to show proper last message value. #4901 - Fixed
CnahnelViewHolder
to handle TypingIndicator visibility properly. #4904
⬆️ Improved
- Emails are highlighted and clickable in the message text. #4833
ChannelListPayloadDiff
is calculated using the list of members instead of the list of users. #4840
✅ Added
- Added
ChatUI.streamCdnImageResizing
which allows resizing images where they appear as previews, such as the message list, attachment gallery overview or user and channel avatars. Only images hosted by Stream's CDN which contain original width and height query parameters can be resized. Image resizing is a paid feature and is disabled by default, you can enable it by overriding the aforementionedChatUI.streamCdnImageResizing
property with with an instance that hasStreamCdnImageResizing.imageResizingEnabled
set to true. Pricing can be found here. #4600 - Added
showDateSeparatorInEmptyThread: Boolean
toMessageListViewModelFactory
. It is used to regulate whether date separators appear in empty threads. #4742 - Added the ability to choose
PickerMediaMode
that allows control if the camera recorder and/or take picture feature is allowed or not inMessageComposerView
via xml attributes. #4812streamUiMessageComposerAttachmentsPickerMediaMode
- Added Typing Users list to
ChannelItem
. #4868 - Added typing indicator on
ChannelLitsView
. #4868 - Added options visibility customization for each channel in a list. #4870
- Added
AudioRecordAttachmentPreviewFactory
as a part ofasync-voice-messaging
feature. #4828 - Added
DefaultMessageComposerOverlappingContent
as a part ofasync-voice-messaging
feature. #4828 - Added new custom views (
AudioRecordPlayerView
,AudioWavesSeekBar
,WaveformView
) as a part ofasync-voice-messaging
feature. #4828 - Added
AudioRecordingAttachmentsGroupView
in addition toMediaAttachmentsGroupView
as a part ofasync-voice-messaging
feature. #4828
⚠️ Changed
- Replaced the method parameter
replyMessageId: String
withreplyTo: Message
insideReplyMessageClickListener.onReplyClick()
. The new parameter now contains the complete message to which the reply was made. #4639 - Added the parameter
parentId: String?
toAttachmentGalleryResultItem
. It is used to indicate when a message is belongs to a thread. Same has been added to the extension functionAttachment.toAttachmentGalleryResultItem()
. #4639 - Added the parameter
parentMessageId: String?
to the classMessageListViewModel.ShowMessage
. If the message you want to scroll to is a thread message, pass in its parent message ID, otherwise you can pass innull
. #4639 - 🚨 Breaking change: Removed
ChatUI.showThreadSeparatorInEmptyThread
. It has been replaced byMessageListController.showDateSeparatorInEmptyThread
. If you are using ourViewModel
factory,MessageListViewModelFactory.showDateSeparatorInEmptyThread
will pass the parameter through to theMessageListController
contained byMessageListViewMode
. #4742 - Create new
bind()
method onBaseChannelListItemViewHolder
that takes as parameterChannelItem
. #4868 - Added
MessageComposerView.setCenterOverlapContent
as a part ofasync-voice-messaging
feature. #4828 FileAttachmentsView
supports new audio recording view type as a part ofasync-voice-messaging
feature. #4828- Added audio recording style customization into
MessageComposerViewStyle
as a part ofasync-voice-messaging
feature. #4828audioRecordingButtonVisible
audioRecordingHoldToRecordText
audioRecordingHoldToRecordTextColor
audioRecordingHoldToRecordBackgroundDrawable
audioRecordingHoldToRecordBackgroundDrawableTint
audioRecordingSlideToCancelText
audioRecordingMicIconDrawable
audioRecordingMicIconDrawableTint
audioRecordingLockIconDrawable
audioRecordingLockIconDrawableTint
audioRecordingLockedIconDrawable
audioRecordingLockedIconDrawableTint
- Added audio recording xml attrs for
MessageComposerView
as a part ofasync-voice-messaging
feature. #4828streamUiMessageComposerAudioRecordingButtonVisible
streamUiMessageComposerAudioRecordingHoldToRecordText
streamUiMessageComposerAudioRecordingHoldToRecordTextColor
streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawable
streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawableTint
streamUiMessageComposerAudioRecordingSlideToCancelText
streamUiMessageComposerAudioRecordingMicIconDrawable
streamUiMessageComposerAudioRecordingMicIconDrawableTint
streamUiMessageComposerAudioRecordingLockIconDrawable
streamUiMessageComposerAudioRecordingLockIconDrawableTint
streamUiMessageComposerAudioRecordingLockedIconDrawable
streamUiMessageComposerAudioRecordingLockedIconDrawableTint
stream-chat-android-compose
⬆️ Improved
- Updated Compose compiler version to
1.4.3
. #4697 - Added
ChatClient.clearPersistence()
to be able to clear local data even if the user is not connected. #4797 - Emails are highlighted and clickable in the message text. #4833
✅ Added
- Added
onChannelAvatarClick
handler toMessageListHeader
. #4545 - Added
ChatTheme.streamCdnImageResizing
which allows resizing images where they appear as previews, such as the message list, attachment gallery overview or user and channel avatars. Only images hosted by Stream's CDN which contain original width and height query parameters can be resized. Image resizing is a paid feature and is disabled by default, you can enable it by overriding the aforementionedChatTheme.streamCdnImageResizing
property with an instance that hasStreamCdnImageResizing.imageResizingEnabled
set to true.. Pricing can be found here. #4600 - Added the composable content slot
emptyThreadPlaceholderItemContent
toMessageContainer
. It is used to display placeholders inside empty threads if the feature was enabled by theMessageListController
of theMessageListViewModel
instance you have created. #4742 - Added
showDateSeparatorInEmptyThread: Boolean
toMessagesViewModelFactory
. It is used to regulate whether date separators appear in empty threads. #4742 - Add
ThreadMessagesStart
that allows to control if the stack of thread messages starts at the bottom or the top. #4807 - Add
PickerMediaMode
that allows control if the camera recorder and/or take picture feature is allowed or not. #4812 - Added
MessageTheme
to customize the message components intoChatTheme
. #4856 - Added
StatefulStreamMediaRecorder
as a part ofasync-voice-messaging
feature. #4828 - Added
AudioRecordAttachmentFactory
as a part ofasync-voice-messaging
feature. #4828 - Added new components (
RunningWaveForm
,AudioWaveVSeekbar
,AudioRecordAttachmentContent
,AudioRecordGroupContent
) as a part ofasync-voice-messaging
feature. #4828
⚠️ Changed
- 🚨 Breaking change: Renamed
onHeaderActionClick
toonHeaderTitleClick
inMessagesScreen
. Change made in order to better reflect the handler's behavior. #4535 - 🚨 Breaking change: Renamed
onHeaderActionClick
toonHeaderTitleClick
inMessageListHeader
. Change made in order to better reflect the handler's behavior. #4535 - Added
onChannelAvatarClick
handler toMessageListHeader
. #4545 - Added
parentMessageId
toMediaGalleryPreviewResult
. It is used when we need to return a result upon which we navigate to a thread message. If the message we need to navigate to is not a thread message theparentMessageId
value will be null. #4639 - Added argument
parentMessageId: String?
toMessageListViewModel.scrollToMessage()
. If the message you want to scroll to is a thread message, pass in its parent message ID, otherwise you can pass innull
. #4639 - Added parameter
parentMessageId: String?
toMessageListViewModelFactory
. If you want to scroll to a thread message upon opening the messaging screen, pass in the thread message's parent message ID, otherwise you can pass innull
. #4639
❌ Removed
- Removed
ImagePreviewAction
,ImagePreviewOption
,ImagePreviewResult
,ImagePreviewResultType
,ImagePreviewViewModel
andImagePreviewViewModelFactory
. These were removed in favor of using the newerMediaGalleryPreviewActivity
along with it's accompanying classes. The removed classes have their media gallery counterparts, for instanceImagePreviewAction
becomesMediaGalleryPreviewAction
, and so on. #4766