feat: group multi-attachment messages into collections (collages / stacks / groups) - #3147
feat: group multi-attachment messages into collections (collages / stacks / groups)#3147DeveloperBlue wants to merge 69 commits into
Conversation
…roll-wheel on cards
Invert stagger direction while keeping author-edge pinning so swipe-to-reply chevrons grow toward center beside fixed card frames.
…ing-to message box
|
isnt this already implemented? Not the same exact implementation as you. but the photo gallery image fan widget widget i made does the same for the most part. It's also extremely difficult to review the PR when there are 57 changed files... |
|
This looks visually good but we're gonna need a list of specific changes in each file, and reasons for the change. Or break this into much smaller PRs that can stand on their own. |
|
Sorry for the huge PR, the end result definitely got away from me. I can break this PR down into about 3 smaller PRs:
~60 files to ~25 is a big change, but I understand if this still overwhelms the review process. The list of file changes would hopefully alleviate some of the review work. I may be able to break the AttachmentHolder changes out into a separate PR, if requested, but it would be difficult to review with no visual places to see the changes- it depends on the collection widgets.
-- Wiring, passing parameters, and docs updates also inflate the file counts of those PRs, but I think as three separate PRs it should be much easier to go through. Again sorry for the large PR! This is a feature I've wanted for a while, and even have some branches pre-beta of trying to get the impl. right. Going forward, I'll make adjustments so they are more comprehensive to review. If this works for you guys, I can start splitting it up and open # 1 later this week/next week when I can |
Also just to clarify, UX wise, I don't think the fan stack is the best widget for 2-3 images. Native iMessage uses the vertical collage, and Material uses the grid for those cases. On master, it is also currently gated to just iOS. I actually had a branch pre-beta where I tried to implement the collage and stack, and I just could never get a stack as smooth as this one :P that was my biggest blocker from implementing this last year, but since you took care of it the rest was easy to follow up on. Thanks again for the time you guys put into these. |
|
If you can, make each collection implementation its own commit or even its own PR so that the cascading changes are easier to track. I want to be able to tell what exactly you changed about the stack, for example. Worry less about file count and more about the number of architectural changes or new widgets you're including in each PR. Also make sure the PR check is passing |
|
A couple questions:
|
Yes and yes, they both target the specific image part |
Edit
This PR has been superseded by the following incremental PRs:
This PR introduces grouping consecutive image/video message parts into media collections with collages, stacks, and grid layouts!
main features:
full-page grid for all items in the collection with their tapbacks
On the iOS skin, by default, 2-3 items are rendered as a collage and 4+ items are rendered as a fan stack. Material and Samsung render 2+ items with the Grid. You can configure this under Settings → Media Settings → Multi-Attachment Layouts.
stack.mp4
collection_gallery.mp4
stack_react.mp4
collage_reply.mp4
Refactors
This PR is wide in breadth, and while it touches a lot of files, it tries to be very targeted. Most of the core changes can be attributed to the following necessary refactors + bugfixes, wiring, and polish.
MessagePart/ messageParts: collapse adjacent media-only parts withMessageHolder._collapseMediaCollectionParts.Reactions, replies, threads, and bubble effects now target real message-part IDs instead of the original list indices (problematic). Small new helpers for checking if a part group is the leading or trailing part group.
These changes needed to be applied to reactions, replies, threads, and bubble effects (resolve by message-part ID instead of collapsed list index)
AttachmentFrameMode(fixedCard,gridCell) frame modes that determine if they fill their parent container and render their drop shadow (e.g. in grid cells)/collectionsfolder; current fan stack is heavily modified off the originalmessage_image_gallerywidget.threadsForPartsfor handling threads for attachment partsSwipeToReply,MessagePopupHolder, etc.) are deferred and re-used by the internally in a collection per-cardAddresses #3122, #2605, #2812 and lays groundwork for sending multi-attachment messages
Tested on a physical android phone, tablet, and windows desktop.