Repository navigation
feat(settings): add the update dot and version card - #1070
Merged
Merged
Conversation
A message this build can't read showed a dashed "This message can't be displayed" bubble with "Update Flipcash to see it" hanging under it. The `.updateApp` hint now draws a plain received bubble with no outline: the title "This Message Needs a Newer Version of Flipcash" over the body "Update Flipcash to see messages like this. This one stays hidden." (component 11420:13397), set in the `appTextMedium`, `appTextCaption` and `appTextSmall` tokens rather than Figma's 15/13/14 sizes. Title and body are separate labels; as one attributed string with paragraph spacing, the cell measured short and clipped the body. The decrypt-failure hints (`.askToResend`, `.resend`) keep the dashed bubble. `ChatMessageCell.configure` takes an optional `ChatBubbleAction` that adds an "Update Flipcash" capsule. Nothing passes one yet, so no button shows until the update check exists. A message whose content type this build doesn't know was dropped by `ConversationMessage.init?`. It now maps to `.widget(.unrecognized)`, which already reads back from the store as unsupported, so the schema is unchanged. A message with no content entry is still dropped.
The app knew only the forced minimum build, so an optional update went unnoticed. `UpdateAvailability` (on `Container`) now asks the App Store lookup for the newest version when the app becomes active, at most every 6 hours, and caches the result. Debug, TestFlight and Xcode builds skip the check: anything whose `AppTransaction` environment isn't production. A failed lookup reads as no update. Priority comes from `.well-known/release-manifest.json`, read from `main` on GitHub. It applies only when its production version matches the lookup's, and it is seeded with the current store version, 2026.10.2, at priority 0. "New version available" with an Update action shows once per version when the update is priority (4+) or has been out 7 days: - On the Chats or Wallet home, 1s after coming back from a pushed screen or after 3s on the home, for 10s (section 11693:162). - In a chat, 1s after it opens with the keyboard down, for 6s, raised over the composer and as wide as it (section 11705:162). The keyboard coming up dismisses it. The version is recorded only once the toast is actually on screen, since the controller drops a toast while a sheet or bill covers the app. Update opens `SKStoreProductViewController`, falling back to the App Store app if the product fails to load. The unsupported-message bubble gets the same action as "Update Flipcash" whenever a newer version exists, with no priority or once-only gate. `toastClearance` takes an optional horizontal inset for the chat bar, so every toast in a chat now sits above the composer at its width. Debug builds can force the toast with `-UpdateAvailableOverride <version>`.
The chat toast sat 28pt above the composer, not the 8pt section 11705:162 asks for: the clearance counted the bar's 8pt top margin and its 8pt drop into the safe area on top of the host's 12pt padding. `toastClearance` takes an `overlap` that lowers the toast back into the bar's measured height, and the chat passes `BarMetrics.toastOverlap` (20pt). The profile screens keep the default of 0.
The You tab's gear shows the attention dot while a newer store build exists. The Settings footer becomes a card: inline with the build and 'Up to date' (keeping the beta-access tap), or pinned on glass with an Update capsule when a newer version exists. Debug builds keep an inline card with a Debug tag, no dot and no Update button.
Dark glass with a 10% white edge, bold title, 70pt height, 50pt above the screen bottom. Settings also takes down the update toast so it never covers the pinned card.
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.
Stacked on #1069; review that first. This adds the Settings side of the update signal: an attention dot on the You tab's gear and a version card at the bottom of Settings (Figma section 11435:162, dots 11440:162). The Android side is code-payments/code-android-app#1782.
Gear dot
The gear shows the shared attention dot while a newer store build exists.
Version card
The pinned card sits in a bottom
scrollEdgeBar, so the app's soft scroll edge draws under it. The inline state has no bar background to draw from, so it usesprofileBarlessFadefrom the profile screens: rows fade at the bottom while the list can scroll further.Settings also takes down the update toast, so it never covers the pinned card.
Launch with
-SettingsCardAsRelease YESto see the release cards on a debug build, plus-UpdateAvailableOverride <version>for the pinned card.Cards for internal (TestFlight) and staff builds come in a follow-up.