Skip to content

Unified support: align the support screens with the app's UI conventions - #26156

Merged
adalpari merged 1 commit into
trunkfrom
adalpari/align-support-screen-ui
Oct 22, 2026
Merged

adalpari merged 1 commit into
trunkfrom
adalpari/align-support-screen-ui

Conversation

@adalpari

@adalpari adalpari commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

TL; DR

This PR is the first iteration of adapting the style of the new support flow to the iOS app. It mainly changes the lists screens. The next iteration will be done on the chat ones.

Screenshot 2026-10-19 at 14 05 13 Screenshot 2026-10-19 at 14 11 26

Description

First iteration of UI alignment for the new support flow. The screens read as a different app than the Me screen they are pushed from: brand-tinted row icons against Me's monochrome ones, heavier row titles, non-standard row metrics, a large navigation title mid-stack, and saturated filled status chips.

The root cause is structural. The Support SPM target linked only AsyncImageKit and WordPressCoreProtocols, so every color, row and empty state in it was hand-rolled. This PR links DesignSystem and WordPressUI — as JetpackStats, WordPressComments and WordPressMediaLibrary already do — and uses them to bring the two menu-style screens in line. There is no cycle (nothing in those modules imports Support) and both consuming app targets already link them, so the binary impact is nil.

Scoped deliberately to the hub and the conversations list. The conversation, ticket, composer and reply-sheet screens are a follow-up.

Changes

  • Support hub (RootSupportView)
    • Row icons .accentColor → AppColor.tint (UIColor.label), matching the tintColor: .label that MeViewController passes to every row.
    • Row title .headline → .callout, detail → .footnote. .callout is what WPStyleGuide.configureTableViewCell puts on every Me row; .headline read a full step heavier.
    • Removed four list modifiers — .listRowBackground and .listRowInsets were applied twice, once on the profile row and once on the List. The background was already the inset-grouped default, and the custom insets gave every row non-standard height and separator insets.
    • The 24pt icon column is now @ScaledMetric; it previously did not grow with Dynamic Type.
    • Failure state uses EmptyStateView.failure(error:onRetry:).
    • Localized the 13 remaining hardcoded English strings into the existing Strings enum.
  • Conversations list (UnifiedSupportListView) — .navigationBarTitleDisplayMode(.large) → .inline; it was the only .large in the repo on a pushed screen. Empty/offline/error now use EmptyStateView, built from its three-closure initializer so the Support-specific unifiedSupportMessage survives rather than being replaced by localizedDescription. .listStyle(.plain) is unchanged — that already matches CommentsListView.
  • Status display — replaced ChipView with UnifiedSupportStatusLabel, a tinted symbol and label on the app's semantic palette, modeled on CommentStatusPill. The app's convention is colored text, not a filled pill — see PostCardStatusViewModel / PostListCell. This also fixes a dark-mode contrast bug: ChipView picked black-or-white text from the fill's WCAG luminance, and the raw .purple/.blue fills barely shift between appearances. ChipView had only two call sites, so both were converted and it is deleted.
  • Application Logs — ActivityLogListView passed logFile.createdAt.description as the row title, rendering 2026-10-19 14:03:12 +0000. Now Oct 19, 2026 at 2:03 PM, matching the formatter the sibling row in the same module already uses.

Not in this PR

Follow-ups, roughly by impact: UnifiedSupportConversationView sets a display mode but no .navigationTitle, so the pushed screen has an empty nav bar while the ticket title is drawn in-content as accent-colored .title2.bold; chat bubble and ticket card fills and radii; the remaining .font(.system(size:)) point sizes that break Dynamic Type; ConversationBotIntro's hardcoded .blue sparkles icon in a green app; and four files under Bot Conversations/ left unreferenced when #26109 retired the "Ask the HE" entry.

Testing instructions

The flow is Jetpack-only and behind FeatureFlag.newSupport, which defaults to off.

  1. Build and run the Jetpack scheme, signed in to a WP.com account.
  2. Enable Me → App Settings → Experimental Features → New Support.
  3. Go to Me → Help & Support.

Check:

  • The hub's rows against the Me screen you just came from — icons monochrome and the same weight, titles the same size, row heights and leading insets identical.
  • Get help pushes with an inline title.
  • Conversation rows show the status as a tinted symbol and label below the snippet, rather than a filled pill above the title.
  • Application Logs rows show a formatted date.
  • The empty, offline and error states — easiest via the #Previews in UnifiedSupportListView.swift, which cover all three.

Please check dark mode, an accessibility text size, and VoiceOver on the conversations row in particular: the status moved inside an .accessibilityElement(children: .combine), and the icon column changed to @ScaledMetric. Those are the three axes I was not able to verify myself.

🤖 Generated with Claude Code

The Support module linked only AsyncImageKit and WordPressCoreProtocols, so its
colors, rows and empty states were all hand-rolled and had drifted from the rest
of the app. Link DesignSystem and WordPressUI — as JetpackStats, WordPressComments
and WordPressMediaLibrary already do — and bring the two menu-style screens in
line with the Me screen they are pushed from.

- Support hub: monochrome `AppColor.tint` row icons and `.callout` titles, matching
  the rows `WPStyleGuide.configureTableViewCell` builds for `MeViewController`.
  Drop the duplicated `listRowBackground` and `listRowInsets` that gave every row
  non-standard height and separator insets, and scale the icon column with Dynamic
  Type instead of pinning it to 24pt.
- Conversations list: push with an inline title rather than a large one.
- Empty, offline and error states use `WordPressUI.EmptyStateView`, the shape the
  rest of the app shows. The list keeps its Support-specific error messages.
- Status: replace the saturated filled `ChipView` with a tinted symbol and label on
  the app's semantic palette, following `CommentStatusPill` and `PostListCell`.
  This also fixes the chip's dark-mode contrast, which was derived from the fill's
  WCAG luminance.
- Localize the remaining hardcoded English on the support hub.
- Application Logs: format the log file date instead of rendering
  `Date.description` as the row title.
@dangermattic

Copy link
Copy Markdown
Collaborator
2 Warnings
⚠️ Modules/Package.swift was changed without updating its corresponding Package.resolved.

If the change includes adding, removing, or editing a dependency please resolve the Swift packages as appropriate to your project setup (e.g. in Xcode or by running swift package resolve).

If the change to the Package.swift did not modify dependencies, ignoring this warning should be safe, but we recommend double checking and running the package resolution just in case.
.

⚠️ View files have been modified, but no screenshot or video is included in the pull request. Consider adding some for clarity.
1 Message
📖 This PR is still a Draft: some checks will be skipped.

Generated by 🚫 Danger

@adalpari
adalpari marked this pull request as ready for review October 19, 2026 12:14
@adalpari
adalpari requested a review from crazytonyli October 19, 2026 12:15
@wpmobilebot

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in WordPress by scanning the QR code below to install the corresponding build.
App NameWordPress
ConfigurationRelease-Alpha
Build Number35047
VersionPR #26156
Bundle IDorg.wordpress.alpha
Commit23f38e2
Installation URL4jn2prn2n6kfo
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in Jetpack by scanning the QR code below to install the corresponding build.
App NameJetpack
ConfigurationRelease-Alpha
Build Number35047
VersionPR #26156
Bundle IDcom.jetpack.alpha
Commit23f38e2
Installation URL1ecdlgqvji6o8
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@adalpari
adalpari added this pull request to the merge queue Oct 22, 2026
Merged via the queue into trunk with commit d6a5d35 Oct 22, 2026
29 checks passed
@adalpari
adalpari deleted the adalpari/align-support-screen-ui branch October 22, 2026 08:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants