Repository navigation
feat(groups): rebuild the group profile to match iOS - #1703
Merged
Merged
Conversation
…tfall ChatSubject.Group now carries the description, cover picture and privacy flag from ChatMetadata. The profile's pinned action, join/chat balance rows and shortfall are pure functions, tested against iOS's GroupProfileStateTests cases. GroupAccess gains unmetRequirements and heldAgainst, the measurement the gate already used. GroupOperations gains sampleChatters and refreshCover (a GetChat for feed rows with no cover).
Sample chatters each time the profile opens, name the tokens behind the join and chat rows, and keep the pinned action's standing current as balances and rates move. Share builds its link without the membership check so a non-member can hand the group out.
Cover, description, chatting grid, balance requirements card and a pinned join, buy, open or leave action, with the overflow reduced to Encryption, Mute and Report.
…at both edges The Chatting grid loaded when the profile opened, so it popped in after the rest of the page. Sample chatters as soon as the group chat resolves, as iOS does, and refresh them on each profile open. The page now fades out under the status bar and into the pinned bar. verticalScrollStateGradient gains start and end insets so the fade finishes at the edge of an opaque bar instead of being drawn behind it. The Leave Chat confirmation uses the info sheet.
…ing to Muted when it doesn't fit
This was referenced Oct 7, 2026
Merged
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.
Rebuilds the group profile on the shared profile components, matching code-ios-app#995 and the menu trim in #1000. Edit Group (cover, description, confirm dialogs) follows in a separate PR.
ChatMetadata, whichChatSubject.Groupnow carries along withisPrivate. Feed rows can arrive without a cover, so opening the profile callsrefreshCover(a GetChat) when the cover is null. The member-count subtitle is gone, as on iOS.permissions.canEdit, a Muted chip for members, and the share circle. Share opens the invite sheet for anyone, not only members; the link only needs the chat id, soshareableGroupInviteUrldrops the member check. The invite card inside the chat is unchanged.sampleChatters, with a badge on the creator, in server order. It's hidden for private groups and for an empty or failed sample. The sample loads when the group chat opens, so it's ready by the time the profile does. Tapping a person opens their profile withProfileOrigin.GroupMember.rules.verticalScrollStateGradient, which gains start and end insets so the fade can stop at an opaque bar.The CTA, requirements, shortfall and grid visibility are pure functions in
GroupProfileState.kt, tested inGroupProfileStateTestagainst the iOSGroupProfileStateTestscases. A member short of the join minimum alone buys to chat, which relies onGroupAccesschecking listener rules before speaker rules; the newunmetRequirementshelper keeps that order.Copy changes: "Leave Chat", the leave dialog and its failure copy, and the join failure title and descriptions now match iOS. Leave confirmation uses the info sheet instead of the error one.