Repository navigation
fix(chat): show unreadable messages as a "needs a newer version" bubble - #1770
Merged
Merged
Conversation
The old bubble said "Update Flipcash to see it", but updating doesn't
render that message: what arrived isn't kept in a form a newer build
could decode. The redesign (component 11420:13397) says the update
covers messages like it and this one stays hidden.
An unknown content type used to map to Text(""), so it showed as an
empty text bubble. It now maps to MessageContent.Unsupported, stored
as a new "unsupported" subtype in the existing content JSON column (no
Room schema change), and draws the same bubble as an unknown widget.
unsupportedContentHint picks UpdateApp for both cases, and the view
model passes it to every branch that draws the bubble.
The bubble takes an optional action label and callback for an "Update
Flipcash" capsule. Nothing passes one yet; it waits on the update check.
Where Figma and the app's incoming bubble differ, the incoming bubble
wins: its fill, corner radius and 12dp horizontal padding, instead of
#2B2B2B, 18 and 14. AskToResend and TrySendingAgain keep their current
look.
This was referenced Oct 15, 2026
Merged
bmc08gt
added a commit
that referenced
this pull request
Oct 16, 2026
…nt on its card code/cash added MessageContent.Unsupported (#1770), which left the card's body mapping non-exhaustive. The card has no way to draw it, so it falls back to the attachment line, like a widget or system message.
bmc08gt
added a commit
that referenced
this pull request
Oct 16, 2026
…1774) * feat(messenger): draw message links as a card of the linked message A link to /chat/{id}/m/{seq} now gets its own card instead of the group invite card. What the card shows depends on the viewer: - in the chat: the message, opened through the chat's own path so a private group's message is decrypted on device, and its reaction count - a public group they aren't in: GetMessage in FULL_OR_REDACTED; a redacted body is drawn blurred and offers Buy - a private group they aren't in: the group's record and Request - a DM they aren't in: that it is one A deleted or missing message, or a chat the server doesn't have, is Unresolved. Unknown membership is read as not a member, so the card never shows more than the server would hand a stranger. Card states follow Figma node 11396:118, values node 11493:201. * fix(chat-ui): cover redacted message text where blur is unavailable Modifier.blur draws nothing below Android 12 and minSdk is 29, so on Android 10 and 11 the redacted excerpt would show in plain text. Cover it with a solid block there instead. Adds a Robolectric test that renders every card state to build/screenshots/message_link_card.png for comparison with the design. * fix(chat-ui): size a message card at the cash card's width The card filled the transcript bubble width, so it ran wider than a cash card and changed width against nothing. It now takes the cash card's fraction of the row in every state, on the sender's side. * feat(chat-ui): match iOS message card type, names and photos - Byline, footer and the "Public group" kind draw in white 60%; the header avatar grows to 24dp. - The author falls back from the roster to a profile the app already has, then a profile fetch, then "Someone". - A photo message draws a 56dp thumbnail beside its caption and no "Photo" label without one. A reader outside the chat's rules gets no blob, so the thumbnail draws its BlurHash only. * feat(chat-ui): show a linked cash link as its payment on the message card When the linked message is only a send.flipcash.com link, the card reads "<author> sent a cash link", shows the amount in the cash card's large type and its claim state in the footer, matching iOS #1057. A cash link with other text around it, or a redacted message, stays an excerpt. * feat(chat-ui): match iOS's reworked message card The card now leads with one identity row: a 32dp avatar beside the chat name over "Author · time", with a chevron in place of the "Open" text when the card opens. The excerpt is 15sp medium at 88% white, up to four lines, with line breaks folded to spaces. A photo sits to the right of its caption, or alone at the start when it has none. The byline time follows iOS: now, 45m, 2h, Yesterday, Oct 9, then Oct 9, 2025 for earlier years. A link to a deleted message now names its chat and says "This message was deleted." instead of resting on the skeleton. * fix(messenger): show a link to a message that's gone as deleted A message GetMessage reports NotFound in a chat it does have drew the loading skeleton forever. iOS draws the deleted card for a nil message (MessageLinkLookup.swift), so the lookup now does the same, and a message carrying any Deleted content counts, not only a lone one. * fix(messenger): load a message card's photo when its rendition has no metadata A photo rendition can arrive with its blob id but no blob metadata, as on the Test B DM photo in XCTests. Every rendition picker skips those, so the card had no photo and no BlurHash and drew an empty square. Fall back to the first rendition, as the transcript bubble does; the loader fetches it by id. * fix(messenger): show a message this version can't read as an attachment on its card code/cash added MessageContent.Unsupported (#1770), which left the card's body mapping non-exhaustive. The card has no way to draw it, so it falls back to the attachment line, like a widget or system message.
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.
An incoming message with a content type this build doesn't know rendered as an empty text bubble, because the mapper turned it into
Text(""). It now maps toMessageContent.Unsupportedand draws the same "needs a newer version" bubble as an unknown widget.Unsupportedis stored as a new"unsupported"subtype in the existing content JSON column, so there's no Room schema change.