V7 - merge into develop#6369
Merged
aleksandar-apostolov merged 236 commits intodevelopfrom Apr 15, 2026
Merged
Conversation
* Update design of composer link preview * Address Detekt warnings * Test handleLinkPreviewClick * Remove unused import * Rename CancelIcon to ComposerCancelIcon * Remove ComposerLinkPreviewTheme and ComposerCancelIconStyle * Use tokens
* Remove product attachment type * Update design of quoted message * Remove QuotedMessageTextFormatter * Address feedback * Fix file icon preview * Remove QuotedAttachmentFactory * Merge radii & spacings into a StreamTokens object * Update Paparazzi snapshots
* Introduce FileTypeIcon * Extract FileIconData.kt
* Support content alignment of Paparazzi snapshots * Change MessageInput to render the trailing content which contain the composer send action * Support composer floating style * Fix margins of ScrollToBottomButton * Fix docs * Renamed the `integrations` parameter in `MessageComposer` to `leadingContent` and remove the commands button from the default leading content. * Move `MessageComposer`'s default composables to the `internal` package. This change makes the following composables `internal`: - `DefaultMessageComposerHeaderContent` - `DefaultMessageComposerFooterInThreadMode` - `DefaultMessageComposerLeadingContent` - `DefaultComposerLabel` - `DefaultMessageComposerInput` - `DefaultMessageComposerInputTrailingContent` - `AttachmentsButton` - `CommandsButton` - `SendButton` * Update composer input max lines * Initial update of message composer actions * Update composer send and mic icons * Update DefaultMessageComposerInputTrailingContent content logic * Decouple MessageInput from InputField * - Update message input padding/margins - Introduce shadow in the message input on floating style mode on * Add composer with attachment previews * Update layout of composer message input * Update add icon * Support canceling link previews * Fix detekt * Fixes after merging from base branch * Support canceling link previews * Fix e2e tests * Fix message input animation * Update ScrollToBottomButton UI * Use StreamTokens * Fix detekt * Fix colors * Update screenshot golden files * Fix scroll to bottom button paddings * coderabbit review * Fix snapshots * apiDump * code review * Bump androidxUiAutomator from 2.4.0-alpha01 to 2.4.0-alpha05 * update snapshots * Fix e2e tests * Refactor message list page objects to use getters, to avoid getting stale reference errors * - Fix flaky quoted reply test. The `deleteMessage` test action was not reliable as it sometimes targeted the quoted message. - assert message with a text selector to prevent flakiness * merge from base branch
* Update AS codeStyle * Remove @StreamPreview mention from agents file * Implement new avatar designs * Change avatar sizing from enum to modifier * Revert String.initials optimization * Make UserAvatarStack public and remove useless intermediate composable * Rename AvatarPlaceholderUtils.kt * Update snapshots
* Replace old Avatar implementation with redesigned one * Introduce avatar size extra large * Update KDoc * Update snapshots * Add test tag to channel avatar * Remove indicator offset for XL size * Remove redundant tests * Update snapshots * Delegate to component factory's UserAvatar in ChannelMediaAttachmentsScreen
* Introduce contextual menu * Extract contextual menu elevation to StreamTokens * Rename main composable to ContextualMenu
* Simplify MessagePositionHandler logic and API * Update MessageItem to hold a single MessagePosition * Dump api
* Update app background color * Dump api
# Conflicts: # stream-chat-android-ai-assistant/build.gradle.kts # stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/factory/AttachmentsPickerFilesTabFactory.kt # stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/factory/AttachmentsPickerImagesTabFactory.kt # stream-chat-android-ui-utils/build.gradle.kts
* Update base message styling * Update message footer style * Remove text styling from MessageTheme * Remove content padding from MessageTheme * Remove background colors from MessageTheme * Remove background border from MessageTheme * Remove link background color from MessageTheme * Remove mention color from MessageTheme * Remove shapes from MessageTheme * Remove redundant prefix * API dump * Remove deprecated example * Separate incoming and outgoing message text color * Move timestamp style to MessageStyling * Add missing kdoc * Extract quoted message styling logic
* Update design of media attachments in messages * Update design of link previews in messages * Use token instead of hardcoded value
* Introduce `toggleAttachmentState` in `AttachmentsPickerViewModel` * Change AttachmentsPickerMenu to be displayed at the bottom of the composer * Introduce PickerFullscreenContent to AttachmentsPickerPollTabFactory * Refactor AttachmentsPicker component - Remove the overlay and dialog-like behavior from the `AttachmentsPicker` composable, making it a regular surface. - Update `AttachmentsPicker` to use `FilledIconToggleButton` for tab selection. - Set the `containerColor` on the `MessagesScreen` Scaffold to use the theme's app background. * Introduce AttachmentTypePicker This commit introduces a new `AttachmentTypePicker` composable. This new component acts as a tab selector for different attachment types like media, files, camera, and polls. Specific changes include: * Introducing the `AttachmentTypePicker` composable. * Adding new icons for each attachment type (media, files, camera, polls). * Adding new string resources for the attachment type labels. * Introducing a new `backgroundCoreSelected` color to `StreamColors` for the selected tab state. * Replacing `AttachmentPickerOptions` with the new `AttachmentTypePicker`. * Updating tests to cover the new `AttachmentTypePicker`. * Add missing design tokens * Introduce AttachmentMediaPicker * Update AttachmentsPicker * Refactor AttachmentsPickerViewModel logic o support the selection count * Update AttachmentsPickerViewModelTest * Introduce AttachmentMediaPicker * Extract AttachmentFilePicker composable * Extract AttachmentCameraPicker * Extract AttachmentPollPicker * Remove `AttachmentsPickerTabFactoryFilter` * Remove unused AttachmentsPickerViewModel.loadAttachmentsData * Remove deprecated constructors * Introduce AttachmentPickerContent * Fix stale channel config * fix merge from v7 * Remove selectedModeIndex from AttachmentTypePicker. selectedAttachmentsPickerMode is now passed from the view model * Hide resetting the picker state. The responsibility for resetting the internal state is now handled within the AttachmentsPickerViewModel when the picker is hidden, removing the need for an explicit `dismissAttachments()` call at the UI layer. * Update media selection indicator * Update UI of media image picker * Refactor: Create Poll screen as a dialog This change refactors the "Create Poll" functionality to be presented within a full-screen dialog instead of navigating to a separate screen. Key changes: - Introduced a new `FullscreenDialog` composable. - The `AttachmentPollPicker` now triggers this dialog to show the `CreatePollScreen`. - Added a new `AttachmentPickerCreatePoll` action to handle opening the dialog. - Updated theme tokens and typography with a new `bodyDefault` style. * Add commands to attachment picker Introduces a new "Commands" option in the attachment picker menu. This allows users to select and trigger slash commands directly from the attachment UI. Key changes: - Added a `Commands` mode to `AttachmentsPickerMode`. - Created `AttachmentCommandPicker.kt` to display the list of available commands. - Integrated the command picker into `AttachmentPickerContent` and `AttachmentsPickerMenu`. - Handled command selection logic to trigger the command via the `composerViewModel`. * When an item is selected or deselected in the picker, the composer's attachment list is synchronized immediately. * feat: Make attachment picker fill width The attachment type picker now expands to fill the maximum available width. * When an item is selected or deselected in the picker, the composer's attachment list is synchronized immediately. * Replace Kluent eith JUnit5 assertions in `MessageComposerControllerTest` * Sync attachment picker state on removal Introduces a `removeSelectedAttachment` function to the `AttachmentsPickerViewModel` to synchronize its state when an attachment is removed from the composer. This new function is called from `MessagesScreen` to ensure the selection state and order within the attachment picker are correctly updated. * fix merge from v7 * Update command suggestions UI * create polls from picker * Update command suggestions UI * update required permission UI * Update snapshot golden files * detekt * Introduce AttachmentSystemPicker * Refactor camera picker * Support picking multiple files * AttachmentCameraPickerTest * Add tests and previews for AttachmentFilePicker * Add tests and previews for AttachmentMediaPicker * Add tests and previews for AttachmentSystemPicker * Fix typo in test file name * Animate attachment button rotation Adds a rotation animation to the attachment button in the `MessageComposer`. The icon now rotates when the attachment picker is opened or closed. The `onCommandsClick` handler has also been removed from the `MessageComposer` as it was unused. * Center permission snackbar The `PermissionPermanentlyDeniedSnackBar` in the attachment pickers was not consistently centered. This change wraps the content and the snackbar in a `Box` with `contentAlignment = Alignment.Center` to ensure the snackbar is properly centered at the bottom of the screen. * Rename AttachmentsPicker to AttachmentPicker * merge from v7 * detekt * apiDump * Animate attachment picker visibility * Update system media picker default value * update snapshots * Allow multiple file selection in system picker * Dismiss command picker after action When an attachment picker action is selected from the command picker, the dialog is now dismissed. * Fix build * Fix tests * apiDump * Fix typo in command picker action The `AttachmentPickerCommandClickClick` action has been renamed to `AttachmentPickerCommandSelect` to fix a typo and better reflect the action of selecting a command. * Fix potential visual inconsistency with fallback icon for unknown commands. * Use placeholder tint color for picker icon. * Reset permission UI state after permission is granted. * kdoc * Fix tests * Rename to selection position instead of count * Leftover * Rename to selection position instead of count * Renaming * Dismiss attachment picker on sending message * Remove content parameter from AttachmentTypePicker * Show poll creation dialog on first render The `AttachmentPollPicker` now immediately shows the poll creation dialog when it's first displayed, rather than waiting for the user to click the "Create Poll" button.
) * Use component factory when rendering media attachments in messages * Only handle file and audio types in FileAttachmentContent * Restructure padding handling in the message * Pass filtered attachments to attachment content composables * Update snapshots * Invert files/media order * Static checks * Temporary fix for adding padding for single-file cases * Revert passing filtered attachments to attachment content composables * Use correct play button overlay * Remove deprecated functions and unused parameter * Remove deprecated functions and unused parameter
* Update poll section background color * Remove avatar border from poll vote item * Set text caret at the end in poll comment dialog * Update duplicate option error appearance * Update snapshots * Extract PollOptionErrorRow * Update string * Improve poll option row accessibility
* Introduce `SampleChatTheme` to standardize theme configuration across the sample app and remove the `allowUIAutomationTest` parameter. * Add avatar snapshot tests and refactor previews. * Remove duplicated UI tests in favor of Paparazzi tests
Co-authored-by: Claude <[email protected]>
Co-authored-by: Claude <[email protected]>
…6351) * Update MediaGalleryPreviewScreen footer icons size * Update spacing in reactions menu header * Dump API * Update snapshots
…eview (#6355) * Add snapshots and previews for MessageComposerInput with active commands in thread mode. * Add screenshot tests for Checkbox component * Update Checkbox size from 24dp to 20dp * Adjust "Also send in Channel" layout position as per designer review. * Pass the modifier to MessageComposerInputBottomContent in ChatComponentFactory * apiDump * Fix focus when selecting a command
* Rename MessageMenu components to MessageActions * Use fully qualified references * Rename ReactionsMenu in sdk and docs
* Fix mention suggestion filter to use substring matching instead of fuzzy Levenshtein filtering. The previous implementation filtered by Levenshtein distance < threshold, causing short queries like @jc to match unrelated names (e.g. "Aleksandar") because the distance was below the cutoff. Now filters by substring containment and sorts by Levenshtein distance, aligning with the Swift SDK. * Update visibility of io.getstream.chat.android.ui.common.feature.messages.composer.query classes * Move `DefaultUserQueryFilter` to the `query.filter` package and refactor it to replace the generic `DefaultQueryFilter`. Update all references and tests to use the new `DefaultUserQueryFilter` implementation. * Update visibility of io.getstream.chat.android.ui.common.feature.messages.composer classes * Replace the Levenshtein sort with indexOf
* Remove customization from Compose sample * Gate composer link preview behind a custom setting in the sample
* Remove count from message read indicator * Remove unused readCount selectors
) * Set CallDispatcherProvider to test dispatcher in TestCoroutineExtension. TestCoroutineExtension already overrides DispatcherProvider for deterministic tests but was missing the equivalent CallDispatcherProvider setup. This caused Call.await() (via MapCall) to hop to real Dispatchers.IO, making tests non-deterministic. * - Track linkPreviewJob to cancel in-flight enrichment on clearData, preventing a resolved preview from appearing in an already-cleared composer after send. - Replace skipEnrichUrl derivation from linkPreviews.isEmpty() with intent-based logic aligned with the iOS SDK: default to false (let backend enrich), only skip when the user explicitly dismisses the preview or the text contains no URLs. Integrator overrides from ChannelScreen are preserved. * Add tests for link preview cancellation and skipEnrichUrl behavior * Given dismissed link preview When same URL text edited and sendMessage called Then skipEnrichUrl is true * Refactor `MessageComposerState` to support a single link preview instead of a list as per iOS. * Fix dismissed link preview reappearing after case change in URL.
* Simplify ChannelScreen signature * Remove most message callbacks from MessageList * Remove styling params from public header composables * Move reaction sorting to ChatUiConfig * Remove composable slots from MessageList * Make Messages internal * Remove composable slots from ThreadList * Remove composable slots from PinnedMessageList * Remove composable slots from MessageContent * Remove composable slots from ChannelList * Make Channels internal * Add KDoc to PollDialogs and remove Box from ThreadList
* Group ChannelViewModelFactory params into classes * Remove `is` prefix from composer options booleans * Remove `is` prefix from MessageComposerController.Config booleans
# Conflicts: # gradle.properties # stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatTheme.kt
Contributor
PR checklist ✅All required conditions are satisfied:
🎉 Great job! This PR is ready for review. |
Contributor
|
DB Entities have been updated. Do we need to upgrade DB Version? |
Contributor
SDK Size Comparison 📏
|
|
VelikovPetar
approved these changes
Apr 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Goal
Merge v7 into develop.
Implementation
V7 - new redesign for chat.
Testing
This is a routine merge.