Skip to content

Profile and Settings - #61

Merged
arun279 merged 3 commits into
feat/expo-nativefrom
feat/screens-account
Sep 20, 2026
Merged

arun279 merged 3 commits into
feat/expo-nativefrom
feat/screens-account

Conversation

@arun279

@arun279 arun279 commented Sep 19, 2026 •

Copy link
Copy Markdown
Owner

+1481 / -85, net 1396

Product-Growth: two screens and their helpers are +711 product lines; every preference the core's store already supported gets a control, with no new stored state; nothing was available to delete in exchange because both routes were stubs. The screens already compose the shared row primitives (Row, Separator, RowMenu, Chevron), so what is left is the settings-specific composition rather than a second copy of them.
Binary-Size: JavaScript only; no native change.

Profile shows the identity, the stats with loading, error and empty states, links into History and Settings, and sign out with a confirmation in the platform's shape. Settings groups every preference the core supports (media visibility, spoiler guard, the lapsed drawer order and the rest), each with a strong default and immediate effect, then the Account hand-offs and finally About with the real version and build. Notification settings are left out until notifications exist, so no dead controls ship. Every control is asserted to have an accessible role and name.

The flow opens the account area, checks the identity, turns movies off in Settings, confirms Library reflects it, turns it back on, checks the Account and About rows, then proves sign out twice: refused while a queued write cannot reach Trakt, with the session kept, and completed to onboarding when only the token revoke fails.

The confirm alert's title and its button both carry the words of the danger
row, and the row stays in the hierarchy under the alert, so an unanchored
text tap matched the title and the confirm was never pressed. Name the
confirm by the Cancel button beside it and wait for the alert before aiming.

Drop the queued write rather than holding it. A held socket only refuses
after five fifteen second request timeouts; a dropped one refuses in
seconds, and an unreachable Trakt is what the refusal copy describes. Then
let writes through, refuse the revoke, and assert the sign out still lands
on onboarding: revoking is best effort and must not strand a session.

The flow runs last in the iOS suite now, because it ends on onboarding and
the app idle measurement before it needs a signed in session.
The error block centres its headline and body, but the action sets its own
alignSelf, so a retry button landed hard left under centred text. Centre it
on the main axis, which is the one alignSelf does not own.

The lapsed order value wrapped to a second line inside a 190 pt cap while
its label was already wrapping, which read as three ragged columns. The cap
now clears the longest value on one line and the label still wraps to two.

Account.yaml signs back in at the end instead of moving down the suite: the
app-idle measurement that follows it is gated to run last and needs the
returning user the other flows leave behind.
@github-actions

Copy link
Copy Markdown

Pull request footprint

measurement base to head
Product code lines in core/src, native/src, native/app, and native/modules +711
Test lines in test, tests, and e2e paths +522
Product comment lines identified by a comment prefix -2

User-delivered artifact sizes

measurement base head delta
Expo iOS JavaScript bundle, raw file 5.19 MB 5.25 MB +55.3 kB
Expo Android JavaScript bundle, raw file 5.23 MB 5.28 MB +55.4 kB
Firebase tester APK, arm64-v8a and all densities 39.62 MB 41.23 MB +1.61 MB
Play download estimate, XXXHDPI arm64-v8a English Android 15 18.15 MB 19.67 MB +1.51 MB

@arun279

arun279 commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

iPhone 17 Pro simulator, iOS 27, against the fake Trakt. Every frame is captured after waitForAnimationToEnd, and each numbered item is a matched light and dark pair at one text size.

  1. Profile at rest, light then dark, default text size: identity row, the watch-time hero, the three count tiles, the two nav rows and the danger row.
  2. Settings from the top, light then dark, default text size: the Theme segmented control, then Tracking with each menu value on one line.
  3. The sign-out confirmation, light then dark, default text size: the platform alert, Cancel leading and Sign out trailing as the default, with no destructive tint.
  4. The sign-out refusal, light then dark, default text size: a queued write cannot reach Trakt, so the disconnect is refused, the message sits above the row, the row still reads Sign out and the session is kept. The Data line reads 1 pending.
  5. Profile at rest, light then dark, largest text size.
  6. Settings from the top, light then dark, largest text size.
  7. The sign-out confirmation, light then dark, largest text size.
  8. The sign-out refusal, light then dark, largest text size.

Two things to read rather than treat as defects: scrolled content passes under the account stack's navigation bar, because the opaque header for that stack lands separately; and the dark default frames carry a back breadcrumb in the status bar from another app that shared this simulator.

light-default-1-profile

dark-default-1-profile

light-default-2-settings-top

dark-default-2-settings-top

light-default-3-sign-out-confirm

dark-default-3-sign-out-confirm

light-default-4-sign-out-refused

dark-default-4-sign-out-refused

light-largetext-1-profile

dark-largetext-1-profile

light-largetext-2-settings-top

dark-largetext-2-settings-top

light-largetext-3-sign-out-confirm

dark-largetext-3-sign-out-confirm

light-largetext-4-sign-out-refused

dark-largetext-4-sign-out-refused

@arun279
arun279 merged commit e6ecdf9 into feat/expo-native Sep 20, 2026
14 checks passed
@arun279
arun279 deleted the feat/screens-account branch September 20, 2026 03:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant